Баг с получением информации о контексте

Всем привет, на днях делал сайт с поддоменами и разными контекстами и заметил одну маленькую
неприятность — нигде в шаблоне нельзя получить такие поля контекста как имя и описание,
а 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 как то не прикольно.
Семён Кудрявцев
01 ноября 2017, 08:37
modx.pro
4 145
0

Комментарии: 12

Алексей Ерохин
01 ноября 2017, 15:15
1
0
Так сделано в modx, от контекста только ключ.

Можете попробовать в плагине на событие 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}
Сергей Шлоков
08 апреля 2021, 14:53
0
Если ресурс уже подгружен, то можно получить контекст через него
$modx->resource->Context
    Семён Кудрявцев
    08 апреля 2021, 14:58
    0
    Проверил, да так реально, работает, Сергей как всегда, спасибо!
      Семён Кудрявцев
      08 апреля 2021, 15:04
      0
      Важно только, что при таком раскладе нужен доступ к объекту $modx, с pdoTools и выключенным доступом к объекту (так по умолчанию) такая фишка не прокатит. А упрощенный класс $_modx не даст нужного результата, его нужно допилить, чтобы он возвращал все поля контекста.
        Сергей Шлоков
        08 апреля 2021, 15:07
        0
        Объект $modx легко получается и при выключенной настройке. Так, для информации.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    12