Кейс, позволяющий автоматически делать заголовок Title страницы товара Virtuemart совпадающим с названием товара. Данное решение не требует хаков ядра.
Как убрать категорию из Title на странице товара Virtuemart без хака

Сегодня представляю вашему вниманию маленький кейс, позволяющий автоматически делать заголовок Title страницы товара Virtuemart совпадающим с названием товара. Данное решение не требует хаков ядра. После него вы можете смело обновлять Virtuemart. Изменения не будут стерты.

Проблема заголовков товаров Virtuemart

Допустим, у нас есть категория «Одежда» и в ней товар «Футболка». Если перейти на страницу товара, заголовок Title этой страницы будет: "Одежда : Футболка". Это, мягко говоря, неправильно с точки зрения поисковой оптимизации (SEO).

Title должен быть таким же, как и H1, т.е. совпадать с названием товара.  Думаю, в чем-то сео-оптимизаторы могут здесь со мной поспорить, но что они точно не будут отрицать, так это то, что Title формата «Название категории: Название товара» не является правильным.

Не знаю, что движет разработчиками Virtuemart и почему они не исправляют  от версии к версии эту проблему. Исправим самостоятельно. Решение, описанное ниже, почему-то не встречается в Интернете. На других сайтах решение есть, но оно требует хака. Решение из этого кейса обходится без него.

Делаем заголовки страниц Title товаров Virtuemart идентичными названиям товаров

Решение состоит из двух шагов:

Шаг 1. Переопределяем макет карточки товара в используемый вами шаблон Joomla. Для этого копируем файл:

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

в:

 /templates/ваш_шаблон/html/com_virtuemart/productdetails/

Если каких-то каталогов во втором пути не хватает, создайте их сами. Если копируемый файл уже существует, то не заменяем его, а переходим сразу к шагу 2.

Шаг 2. Открываем файл:

/templates/ваш_шаблон/html/com_virtuemart/productdetails/default.php

И после строчки:

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

Вставляем следующий код:

//Исправляем Title страницы товара
$document = JFactory::getDocument();
if ($this->product->customtitle) {
	$document->setTitle(strip_tags(html_entity_decode($this->product->customtitle,ENT_QUOTES)));
} else {
	$document->setTitle(strip_tags(html_entity_decode($this->product->product_name,ENT_QUOTES)));
}

После этого сохраняем файл, обновляем страницу и видим, что Title теперь совпадает с названием товара.

Кстати, данный вариант не ломает пользовательское название страницы. Вы можете заполнить соответствующую опцию в настройках товара и при этом Title изменится на введенный вами.

Подставляя другие переменные из макета карточки товара в данный код, вы можете автоматически создавать уникальные заголовки для страниц товаров. Например, сделав их вида:

 «[Название товара] от [производитель] по цене всего [цена]»

В результате у вас получится что-то вроде:

 «Футболка от Nike по цене всего 999руб»

И для каждого товара автоматически будет генерироваться аналогичный уникальный заголовок.

P.S.: А здесь вы можете почитать подробнее про управление заголовками Title в Joomla.

Понравилась статья? Сохраните себе на стену:

Ваша оценка материала очень важна для нас. Просим вас оценить статью или оставить отзыв в комментариях.

Другие статьи серии

Комментарии  

0 # АВТОФОРМИРОВАНИЕПавел 21.09.2017 09:14
вчера спрашивал - разобрался самостоятельно - вот решение
когда " "
тогда нужно еще раз внутрь вставлять " " и внутри писать выборку
пример
" ".$this->category->category_name." "
Ответить | Ответить с цитатой | Цитировать
0 # кейвордспавел 20.09.2017 22:56
А вот такая проблемка - а если я хочу в кейвордс добавить название товара или категории, чтоб тянулось, как сделать?
Ответить | Ответить с цитатой | Цитировать
0 # эта жепавел 19.09.2017 22:15
а как в товарах
keywords также по шаблону
и в категориях
title
description
keywords
??? спасибо
Ответить | Ответить с цитатой | Цитировать
0 # RE: эта жеWedal 20.09.2017 05:38
павел,
Код:$document = JFactory::getDocument();
$document->setDescription( "Your meta description" );
$document->setMetaData('keywords', "keyword1,keyword2, etc.");
$document->setMetaData('robots', "index,follow");
$document->setMetaData('author', "Jobin Jose");


В категориях аналогично, только код нужно вставлять не в макет карточки товара, а в макет категории.
Ответить | Ответить с цитатой | Цитировать
0 # RE: Как убрать категорию из Title на странице товара Virtuemart без хакаСергей 14.09.2017 14:56
А покажите пожалуйста пример именно кода " «Футболка от Nike по цене всего 999руб»" который необходимо вставить
Ответить | Ответить с цитатой | Цитировать
+1 # RE: Как убрать категорию из Title на странице товара Virtuemart без хакаWedal 15.09.2017 05:39
Сергей, это зависит от особенностей вашего магазина. Можно, например, вот так:

Код:$document->setTitle(strip_tags(html_entity_decode($this->product->product_name.' от '.$this->product->mf_name.' по цене всего '.round($this->product->prices['salesPrice'], 2).' руб',ENT_QUOTES)));

Это не очень хороший код, т.к. "руб" также должен выводиться через переменную. Но этот код наиболее простой.
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий

Для отправки комментария введите код с картинки:
Защитный код
Обновить

Вверх