Уважаемые профессионалы MODX.
Недавно программирую в MODX. Уровень владения php - средний.
Столкнулся c проблемой, которую не знаю как решить. Буду признателен за любые идеи.
Итак, есть движок MODX и пользовательская таблица.
Есть страница для отображения информации из этой таблицы. Она же - форма ввода/редактирования информации.
В разных частях страницы находятся сниппеты, "короткими селектами дергающие" информацию из пользовательской таблицы и рисующие ее в разных частях страницы. Также, на странице расположен сниппет, рисующий форму ввода/редактирования.
При сохранении страницы на сервер передается набор полей, которые обновляются этой формой, в том числе ключевое поле таблицы.
При отрисовке страницы сниппет, соответствующий форме ввода-вывода, анализирует был ли пост-запрос на обновление. Если да - выполняет обновление таблицы и перерисовывает свои данные. Если нет, то, просто выводит данные из таблицы. Прочие сниппеты вывода ничего не анализируют а только выполняют короткие селекты по ключевому полю.
В результате, получается следующая ситуация:
После отправки формы содержимое таблицы обновляется. Но при этом обновление данных заметно только в той части страницы, которая отрисовано сниппетом формы. А те части страницы, которые, отрисовываются другими сниппетами, остаются с теми значениями, которые были до выполнения обновления.
То есть очень получается, что все сниппеты выполняются асинхронно. И получается, что часть селектов на форме успевает выполниться до обновления данных таблицы. А другая - после.
Опытным путем установлено, что варьируя взаимное размещение и общее количество сниппетов а странице можно добиться того, некоторое количество ОДИНАКОВЫХ ВЫЗВОВ сниппетов на странице нарисуют РАЗНЫЕ значения. Некоторые нарисуют селекты до обновления. А остальные - после обновления.
Отсюда и возникает вопрос к знатокам MODX:
Каким образом, в MODX можно управлять порядком выполнения сниппетов?
Нужно сделать что-то наподобие объекта-семафора. Сначала семафор закрыт. Открыть семафор может только главный сниппет-форма. Каждый сниппет должен проверять состояние семафора и приостанавливать свое выполнение до тех пор, пока семафор закрыт. При открытии семафора, все приостановленные сниппеты должны продолжить свою работу. Чтобы не проверять семафор по таймеру, желательно сделать так, чтобы при открытии семафора в каждом их остановленных сниппетов вызывалась колбэк-функция, выводящая его из режима ожидания.
Подскажите, пожалуйста, идею, как все это можно реализовать на php.
И как это потом прикрутить к MODX.
Можно ли на php написать сниппет-семафор. Или это будет уже не сниппет, а скорее, плагин-семафор?