Доброго времени суток! Есть задача генерировать по контенту meta description, если метатег не заполнен. Перехватываю событие OnEndBufferContent и вставляю в $content мета-тег. Вот полный код:
Код
class PageEvent{
function setPageTitle(&$content){
$doc = new DomDocument();;
$doc->validateOnParse = true;
$doc->formatOutput = true;
$doc->loadHTML($content);
//сюда вставить id контента
$id='workarea';
//для генерации пока подставим упрощенный алгоритм
//находим содержимое. обрезаем до 50 символов
$newDescription=substr($doc->getElementById($id)->textContent, 0, 50);
$head=$doc->getElementsByTagName('head')->item(0);
$xpath = new DomXpath($doc);
$resultDescription=$xpath->query('//meta[@name="description"]');
$saveHtml=false;
if(($resultDescription->length)<1){//если у нас не заполнено meta description
$node = $head->appendChild($doc->createElement('meta'));
$node->setAttribute('name', 'description');
$node->setAttribute('content', $newDescription);
$saveHtml=true;
}
if($saveHtml){//если html был изменен
$content=$doc->saveHTML();
}
}
}
AddEventHandler("main", "OnEndBufferContent", Array("PageEvent", "setPageTitle"));
Суть проблемы - после этого ломается кодировка в эрмитаже и это начинает выглядеть так http://joxi.ru/12MWYJ1F4aDkLr