Сегодня представляю вашему вниманию маленький кейс, позволяющий автоматически делать заголовок 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.
Это не очень хороший код, т.к. "руб" также должен выводиться через переменную. Но этот код наиболее простой.
keywords также по шаблону
и в категориях
title
description
keywords
??? спасибо
В категориях аналогично, только код нужно вставлять не в макет карточки товара, а в макет категории.
когда " "
тогда нужно еще раз внутрь вставлять " " и внутри писать выборку
пример
" ".$this->category->category_name." "
а как проверить есть ли теги в карточке товара, то есть
если в карточке товара прописаны теги и тайтл - то берется оттуда
если ничего не прописано, то берется автоматом, что прописал я пример в моей карточке товара
if ($this->product->customtitle) {
$document->setTitle(strip_tags(html_entity_decode('Купить '.$this->product->product_name.' по цене '.round($this->product->prices['salesPrice'], 2).' руб.текст ',ENT_QUOTES)));
} else {
$document->setTitle(strip_tags(html_entity_decode('Купить '.$this->product->product_name.' по цене '.round($this->product->prices['salesPrice'], 2).' руб. текст ',ENT_QUOTES)));
}
Я прописал $this->product,'position'=>'ontop' , но это не работает.
В них вы найдете код разбора этих полей. Нужно выдернуть нужные вам значения полей, сформировать их них строку и уже ее подставлять в Title.
Значение $result выводится через echo $result на странице. А вот в title не отображается зараза !!
замените:
на:
А как взять это значение для вывода в title не знаю.
я не селен в php..((
Подскажите пожалуйста, как правильно сделать.
Так вы увидите все содержимое объекта товара. Там же найдете и поля.