История такова: заказчик сказал «на главной странице нужно выводить содержимое последнего опубликованного документа». Шаблон для вывода документа уже был готов, но структура его была сложной и менять ничего не хотелось. Поэтому я решил использовать уже готовый шаблон и при обращении к главной странице просто подменять содержимое документа на последний опубликованный.
Получился такой вот плагин:
/*
* проверяем айди запрашиваемой страницы.
* в моем случае — главной
*/
if ($modx->documentIdentifier==1) {
/*
* здесь нужно получить айди нужного документа для подмены
* в моём случае весьма специфично, поэтому этот шаг я опустил
*/
$latestID = 100;
$modx->documentIdentifier = $latestID;
$modx->documentObject = $modx->getDocument($latestID, '*');
/*
* здесь получаем список TV-параметров для данного документа
* опять же, у меня он свой
*/
foreach ($modx->getTemplateVars(array('issue','pdf','cover'), '*', $latestID) as $tv) {
$modx->documentObject[$tv['name']] = $tv['value'];
}
}
Во вкладке System Events отмечаем наши любимые
OnLoadWebDocument и
OnLoadWebPageCache. И усё.
Похожего не нашел, поэтому сделал велосипед. Поправьте, может что упустил, и задавайте вопросы, если что не понятно.
UPD
Все проще гораздо:
if ($modx->documentIdentifier==1) {
/*
* здесь нужно получить айди нужного документа для подмены
* в моём случае весьма специфично, поэтому этот шаг я опустил
*/
$latestID = 100;
$modx->documentIdentifier = $latestID;
}
только событие другое —
OnWebPageInit, в этот момент известен только
documentIdentifier, а сами данные документа еще не подтянуты.
Работать нужно днем, а ночью спать. Иначе велосипеды получаются немного монстрообразные :)