Баг с получением информации о контексте
Всем привет, на днях делал сайт с поддоменами и разными контекстами и заметил одну маленькую
неприятность — нигде в шаблоне нельзя получить такие поля контекста как имя и описание,
а key и rank выводятся без проблем.
Распечатал массив через {$_modx->context|print} и всегда получаю следующее:
Решил попробовать включить объект modx в настройках, думал может проблема в классе $_modx, но данный баг оказался более широким и — {$modx->context->name} или {$modx->context->description}
также не дали результатов.
Та же беда при вызове простейшего сниппета:
Однако если воспользоваться xPDO и получить объект контекста то все поля как положено в наличии
Просто весь сайт завязан на логике смены контекстов и везде использовать получение названия через xPDO как то не прикольно.
неприятность — нигде в шаблоне нельзя получить такие поля контекста как имя и описание,
а key и rank выводятся без проблем.
Распечатал массив через {$_modx->context|print} и всегда получаю следующее:
Array
(
[key] => web
[name] =>
[description] =>
[rank] => 0
)
Все поля контекста заполнены, но отсутствуют при выводе.Решил попробовать включить объект modx в настройках, думал может проблема в классе $_modx, но данный баг оказался более широким и — {$modx->context->name} или {$modx->context->description}
также не дали результатов.
Та же беда при вызове простейшего сниппета:
<?php
return $modx->context->key;//работает
return $modx->context->name;//не работает
Однако если воспользоваться xPDO и получить объект контекста то все поля как положено в наличии
<?php
$res = $modx->getObject('modContext',['key'=>'web']);
print_r($res->toArray());
Array
(
[key] => web
[name] => Москва
[description] => Москва
[rank] => 0
)
Собственно вопрос — где искать проблему в pdoTools или в самом MODX?Просто весь сайт завязан на логике смены контекстов и везде использовать получение названия через xPDO как то не прикольно.
Комментарии: 12
Так сделано в modx, от контекста только ключ.
Можете попробовать в плагине на событие OnMODXInit дописывать в объект необходимые данные контекста.
Или как вариант: записать в настройки контекста его имя и описание и получать через {$_modx->config.context_name}
Можете попробовать в плагине на событие OnMODXInit дописывать в объект необходимые данные контекста.
$context= $modx->getObject('modContext',['key'=>$modx->context->key]);
$modx->context->_fields['name'] = $context->get('name');
$modx->contexts[$modx->context->key] = $modx->context;
Не уверен, что потом где-нибудь не всплывет бага. Лучше напишите сниппет для получения данных контекста и используйте его.Или как вариант: записать в настройки контекста его имя и описание и получать через {$_modx->config.context_name}
Спасибо, Алексей, думаю последний вариант самый оптимальный. А баг MODX неприятный, зачем тогда было ключи массива оставлять с пустым значением? Будем надеяться, что поправят.
Ещё бы разработчики знали об этом. Не стесняйтесь создавать issue.
Отправил Issue — github.com/modxcms/revolution/issues/15653
Спасибо
Если ресурс уже подгружен, то можно получить контекст через него
$modx->resource->Context
Проверил, да так реально, работает, Сергей как всегда, спасибо!
Важно только, что при таком раскладе нужен доступ к объекту $modx, с pdoTools и выключенным доступом к объекту (так по умолчанию) такая фишка не прокатит. А упрощенный класс $_modx не даст нужного результата, его нужно допилить, чтобы он возвращал все поля контекста.
Объект $modx легко получается и при выключенной настройке. Так, для информации.
Поделись способом, может где пригодится
Стукни в телегу.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.