Для чего нужен documentObject

Столько времени я в каждом сниппете использую следующую схему:
$id = $modx->documentIdentifier;
$doc = $modx->getDocument($id);
$tvs = $modx->getTemplateVarOutput('*', $id);
...

Не задумываясь о том, что есть уже прописанная переменная, которой можно смело пользоваться и это будет максимально правильно и эффективно. К тому же, такой подход противоречит здравомыслию, так как в неопубликованном ресурсе, во- время работы такого сниппета, будет непредсказуемый результат.

documentObject

В ней хранятся данные всех тв, как основные, pagetitle, id, alias, так и собственного производства, например color.

Но вот незадача, требуется в каждом сниппете начинать произведение с этого:
$objects = $modx->documentObject;


Спрашивается, не проще ли создать, над всем кодом шаблона, вызов сниппета [[objects]] с следующим содержимым:
global $objects;
$objects = $modx->documentObject;

И при создании сниппетов вначале получать эту переменную глобально:
global $objects;

Дальше всё что угодно:
$all = '<ul class="all"><li>' . implode('</li><li>', $objects) . '</li></ul>';


Является ли данный подход идеальным…

Какие недостатки?

1. Удаление сниппета objects приведёт к отключению таких сниппетов и может вызвать ошибку, из-за которой сайт будет недоступен. Нужно ли так рисковать.
2. Данный метод получения переменных шаблона не похож на получение при помощи getTemplateVarOutput, так получение значения тв будет следующим $objects['color'][1].

Мне кажется это единственные недостатки. Хорошо, можно в каждом сниппете использовать:
$objects = $modx->documentObjects;

Наверное, получается даже красивей, ведь отпадает необходимость прописывать [[objects]] в каждый шаблон, создавать его и хранить.

Хотелось бы почитать что нибудь в комментариях на эту тему. Я не считаю себя профессионалом, то что я написал данную статью говорит о многом, по этой части.

Вопросы

1. Какая нагрузка создаётся в первом и втором варианте
2. Безопасно ли использовать первый метод, не получится ли так же как и с site_url

5 комментариев

avatar
Нагрузки никакой, если не считать дополнительную работу парсера для получения и исполнения сниппета [[object]]

А использования global в современном мире считается дурным тоном, т.к. кто-то в другом месте может вашу переменную затереть и результат окажется не предсказуемым
avatar
А чем собственно
$modx->documentObject['pagetitle']
не нравится?
avatar
"$modx->" и documentObject не нравится печатать каждый раз. Было бы даже, думаю, красивей использовать переменную $o вместо $objects.
avatar
И вот в этом примере $objects['color'][1] создаётся впечатление, как буд-то на вопрос «где?» звучит ответ «там» )
Комментарий отредактирован 2014-12-01 11:00:50 пользователем sergej_savelev
avatar
Не знаю, меня в целом устраивает, напрямую с параметрами страницы в коде работать, по моему опыту, приходится не очень много, в основном когда велосипедишь :) Согласен конечно что иногда [1] бесит, но я просто распечатываю
bLog('doc', $modx->documentObject);
в отладчик, уже привычка
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.