Где сохранить общие поля для сайта в MODX

При проектировании сайта часто требуется создание клиентских настроек, которые в дальнейшем мог бы самостоятельно редактировать любой менеджер. Это номера телефонов компании, почтовые адреса, слоганы, счетчики и прочее. MODX гибкий движок и позволяет решить эту задачу разными способами, в том числе, созданием дополнительных параметров в системных настройках. Но стоит ли мешать системные настройки с клиентскими? Думаю что нет, ведь есть дополнение «ClientConfig».
Пакет есть в официальном репозитории. После инсталляции в меню «Приложения» появится пункт «Конфигурация». В правом верхнем углу будет кнопка «Администрирование», переход по которой позволит создавать группы и сами настройки.
Группы позволяют объединять настройки по какому-то признаку. Добавление самих настроек происходит с помощью интуитивно понятного интерфейса. Очень полезна возможность выбора типа поля:
- Текст.
- Текстовая область.
- Image.
- Число.
- Выбор цвета.
- Чекбокс.
- Дата.
- Время.
- Выпадающий список.
Вызываются значения по ключу как системные плейсхолдеры.
[[++phone1]]
Работа с ClientConfig в сниппетах
С клиенсткими настройками можно работать и программно, из сниппетов. Получить значение по ключу так же просто, если бы это была системная настройка.
$phone1 = $modx->getOption('phone1','');
Изменить существующее значение ключа тоже не сложно. Для этого достаточно обратиться к процессору «save» компонента «ClientConfig» и передать в JSON строке ключи и их новые значения. Работать будет только в MODX Revolution начиная с версии 2.2.
$otherProps = array( 'processors_path' => $modx->getOption('core_path') . 'components/clientconfig/processors/' ); $_POST = array( 'values' => '{"phone1":"99-99-99","phone2":"55-55-55"}' ); $response = $modx->runProcessor('mgr/settings/save', $_POST, $otherProps); if (!$response->isError()) return 'clientconfig save'; else return = implode($modx->error->failure($response->getMessage()));
При работе с «ClientConfig» из PHP скриптов стоит помнить, что в системные плейсхолдеры значения подставляются только при возникновении события «onHandleRequest». Поэтому, если из скрипта не выходит получить значение, попробуйте вызывать его программно.
$modx->invokeEvent('OnHandleRequest');
Либо при переустановке не всё удаляется у компонента… удалите компонент, удалите его папку в assets и core, почисть кеш. Убедись что в БД не осталось таблицы компонента и после уже пробуй ставить его заново. Может вообще стили какие-то делают эти кнопки скрытыми, а они на самом деле есть. Может с учетной записью что-то не так, например, прав не хватает на редактирование настроек. Короче, много вариантов может быть)