Генерация метатега description в Joomla для страницы материала

10 октября, 2012 | Автор: El

С нынешней популярностью соцсетей столкнулся с проблемой поведения мета тега 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."..."); //приписываем в конце три точки	
	

Понравилась статья? Жми



 Комментарии:

 
1. EL :
29 декабря, 2012 | 08:58


Сегодня столкнулся с тем что если в тексте присутствуют нетекстовые теги как script или style то их содержимое, т.е. css или код яваскрипта попадает в метатег.
Решение нашел на http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_html_tags_web_page
использовать на первой строке вместо strip_tags
функцию разработанную на том блоге strip_html_tags
 
Написать комментарий:

Текст сообщения     

Ваше имя (обязательно)     

Ваша почта (скрыто) (обязательно)     

Если комментарии содержат ссылки они проходят модерацию...
ICQ:
  • Lex:  940-902
  • El:  448-018-956
Карта сайта
Карта сайта
Прямые ссылки скачать последние версии Adobe Flash, Кодеки, Google Chrome и другие популярные программы  
Компьютерная графика и вычислительная геометрия: