Генерация метатега description в Joomla для страницы материала
С нынешней популярностью соцсетей столкнулся с проблемой поведения мета тега description в Joomla.
А именно при вставке ссылки в вконтакте или фейсбуке, система генерирует сниппет.
Сниппет состоит из заголовка описания и одной картинки, - все мы их видели, но если заголовок берется из тега title то краткое описание берется из тега description.
А в стандартной конфигурации джумлы этот тег работает не так как мне надо.
Я ожидал что на всех страницах будет генерироваться стандартный текст, а на странице статьи (option=com_content&view=article) будут первые строки из самой статьи.
Но в Joomla оказалось не все так просто.
Прописать мета данные для всего сайта, можно в общих настройках. Т.е. Амдинпанель > сайт > общие настройки >Настройки Метаданных
Также для каждого конкретного материала можно их задать индивидуально, при его создании.
Но мне это не подходило, я хотело чтобы просто первые 150 символов текста статьи помещались в тег дескрипшн.
Долго гугля по интернету я все же наткнулся на статью которая мне помогла.
Суть заключается в редактировании файла отвечающего за отображение статьи:
/components/com_content/views/article/view.html.php
гдето после 119 строки, после
if ($article->metadesc) { $document->setDescription( $article->metadesc ); }
Переопределяем значение метатега, добавляем
$ndesc=strip_tags($article->introtext.$article->fulltext ); //берем весь текст без html тегов $ndesc=preg_replace("/s+/", " ", $ndesc); //отсекаем символы переносов, табуляции, двойных пробелов mb_internal_encoding("UTF-8"); $ndesc=mb_substr($ndesc, 0, 153); //обрезаем юникодную строку до нужной длинны $document->setDescription($ndesc."..."); //приписываем в конце три точки
И получаем нужное содержание в метатеге. Только нужно учесть что если в начале статьи у вас присутствует стили или яваскрипт то он тоже может попасть в description.
UPD: 04-01-2013
Для исключения содержимого неконтентных тегов необходимо использовать специальную функцию которая вырежет эти теги.
Хороший вариант нашел на http://nadeausoftware.com/ можно скачать готовую функцию с сайта автора (зеркало)
Код для генерации метатега с использованием функции так:
$ndesc=strip_html_tags($article->introtext.$article->fulltext ); //берем весь текст без html тегов $ndesc=preg_replace("/s+/", " ", $ndesc); //отсекаем символы переносов, табуляции, двойных пробелов mb_internal_encoding("UTF-8"); $ndesc=mb_substr($ndesc, 0, 153); //обрезаем юникодную строку до нужной длинны $document->setDescription($ndesc."..."); //приписываем в конце три точки
Сегодня столкнулся с тем что если в тексте присутствуют нетекстовые теги как script или style то их содержимое, т.е. css или код яваскрипта попадает в метатег.
Решение нашел на http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_html_tags_web_page
использовать на первой строке вместо strip_tags
функцию разработанную на том блоге strip_html_tags