Virtuemart 2.0.2 - meta tag Description и meta tag Keywords на странице товара и категории



Расскажу, как вывести мета теги description и keywords на страницах товара и категории товаров.

Имеем много товаров и категорий, заполнять вручную мета теги лень\нет времени\бесполезно. Когда сам столкнулся с этой проблемой, то не знал, как решить. Нашел вот здесь решение http://itblog.yabl.info/2011/02/14/tegi-meta-i-keywords-dlya-virtuemart/.  За идею спасибо, но реализация, честно говоря, меня не устроила. Каждый раз при обновлении Vitruemart пришлось бы заново все переделывать. Поэтому взял идею и немного подправил реализацию.

Итак, берем этот файл (это самодельный небольшой класс для Virtuemart, в котором пишу необходимые только для меня методы. Хотя, возможно, они кому-то тоже пригодятся) и пихаем по пути/components/com_virtuemart/helpers/vmsmallhelper.php

VmSmallHelper.php

нас интересует метод

 

1
2
3
4
5
6
7
8
9
10
11
public static function createKeywords($sText = "")
{
	$sKeywords = "";
 
	preg_match_all("/[a-zа-яёїъ]{3,}/iu", JString::strtolower(strip_tags($sText)), $aKeywords);
 
	if(is_array($aKeywords[0]) && !empty($aKeywords[0]))
		$sKeywords = self::limitStringByWord(implode(", ", array_unique($aKeywords[0])), 255);
 
	return $sKeywords;
}

 

Как видно, в него передаем любой текст, метод выбирает все слова длиной 3 и более символа (Чтобы исключить союзы, предлоги, местоимения. Не все, конечно, но хотя бы некоторые. Может, кто-то дополнит каким-то словариком для исключений)

Почему именно отдельный файл для класса? Это необходимо для того, чтобы при обновлении компонента ваш код не затирался. Поэтому и создали отдельный файл, о существовании которого установщик Virtuemart не знает.

1. Страница товара

1. Далее, открываем шаблон страницы товара

/templates/[TEMPLATE NAME]/html/com_virtuemart/productdetails/default.php

Если у вас такого файла нет, то скопируйте в указанное выше место файл 

/components/com_virtuemart/views/productdetails/tmpl/default.php 

Этой несложной процедурой вы просто создадите свой пользовательский шаблон страницы товара. Это необходимо для того, чтобы не править системные файлы Virtuemart и при обновлении не потерять правки.

2. Открываем /templates/[TEMPLATE NAME]/html/com_virtuemart/productdetails/default.php  и находим строку 

1
defined('_JEXEC') or die('Restricted access');

сразу после нее подключаем наш класс, скачанный выше

1
2
if(!class_exists("VmSmallHelper"))
	require(JPATH_VM_SITE.DS.'helpers'.DS.'vmsmallhelper.php');

и добавляем код, устанавливающий мета теги description и keywords после создания переменной $document

1
2
3
4
5
6
7
8
9
10
11
12
13
$document = JFactory::getDocument();
 
if(empty($this->product->metadesc))
	$document->setDescription(VmSmallHelper::limitStringByWord(
strip_tags(
str_replace(array("\n", "\r"), "", $this->product->product_desc)), 
500));
 
if(empty($this->product->metakey))
	$document->setMetaData(
"keywords", 
VmSmallHelper::createKeywords(
$this->product->product_name." ".$this->product->product_s_desc));

Обратите внимание на строки 3 и 9. Проверяем наличие заполненных мета тегов для товара. Если они заполнены, то они были установлены выше по коду, поэтому здесь мы их не заменяем. Другими словами, если вы заполнили поля мета тегов для товара, то выводится будут именно они, если же для какого-то товара вы оставили мета поля пустыми, то сработает этот код

 

2. Теперь для категории продуктов

1. Открываем файл /components/com_virtuemart/views/category/tmpl/default.php

Если такой отсутствует, то копируем /components/com_virtuemart/views/category/tmpl/default.php  в /components/com_virtuemart/views/category/tmpl/default.php

2. Находим строку

1
defined('_JEXEC') or die('Restricted access');

и добавляем после нее

1
2
if(!class_exists("VmSmallHelper"))
	require(JPATH_VM_SITE.DS.'helpers'.DS.'vmsmallhelper.php');

Затем спускаемся чуть ниже и вставляем после создания переменной $document нужный нам код

1
2
3
4
5
6
7
8
9
10
11
12
13
document = JFactory::getDocument();
 
if(empty($this->category->metadesc))
	$document->setDescription(
VmSmallHelper::limitStringByWord(
strip_tags(
str_replace(array("\r", "\n"), "", $this->category->category_description)), 500));
 
if(empty($this->category->metakey))
	$document->setMetaData(
"keywords", 
VmSmallHelper::createKeywords(
$this->category->category_name." ".$this->category->category_description));

В принципе, это все. Только не забудьте сохранить файлы и протестировать:) 

Пример можно посмотреть здесь

http://samovar.kharkov.ua/katalog-chaya/chernyj-chaj/dardjiling-detail.html

Благодарность принимаю в виде:

  • "Спасибо" от чистого сердца
  • лайка / шары
  • комментария
  • Яндекс.Денег 4100162037745
  • WebMoney Z150917603458, R351335054010, E199046692457, U207019834816



Оставить комменатрий

Последние 10 комментариев(я)