Разделы

  
 

[EVO] Плагин для подмены содержимого документа

История такова: заказчик сказал «на главной странице нужно выводить содержимое последнего опубликованного документа». Шаблон для вывода документа уже был готов, но структура его была сложной и менять ничего не хотелось. Поэтому я решил использовать уже готовый шаблон и при обращении к главной странице просто подменять содержимое документа на последний опубликованный.

Получился такой вот плагин:

/* 
 * проверяем айди запрашиваемой страницы.
 * в моем случае — главной
 */
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, а сами данные документа еще не подтянуты.

Работать нужно днем, а ночью спать. Иначе велосипеды получаются немного монстрообразные :)