Главная > Статьи > Мета теги для страници с производителями VirtueMart joomla 1.6+

Мета теги для страници с производителями VirtueMart joomla 1.6+

1
09.08.2012 20:59

    После написания предыдущей статьи поступила просьба написать еще 1 статью про добавление мета тегов к производителям компонента VirtueMart для joomla 1.6+ - приступим!

   Пойдем мы тем же путем, что и в прошлой статье для jommla 1.5, для начала сделаем поля для добавления мета тегов. Кстати, хочу отметить, что для новой версии VirtueMart использовало более правдоподобный паттерн проектирования к MVC.

   Идем к файлу administrator/components/com_virtuemart/views/manufacturer/tmpl/edit_description.php.

   Добавляем к строкам

<?php echo VmHTML::row('input', 'COM_VIRTUEMART_MANUFACTURER_NAME', 'mf_name', $this->manufacturer->mf_name); ?>
<?php echo VmHTML::row('booleanlist', 'COM_VIRTUEMART_PUBLISH', 'published', $this->manufacturer->published); ?>
<?php echo VmHTML::row('input', $this->viewName.' '. JText::_('COM_VIRTUEMART_SLUG'), 'slug', $this->manufacturer->slug); ?>
<?php echo VmHTML::row('select','COM_VIRTUEMART_MANUFACTURER_CATEGORY_NAME', 'virtuemart_manufacturercategories_id', $this->manufacturerCategories, $this->manufacturer->virtuemart_manufacturercategories_id, '', 'virtuemart_manufacturercategories_id', 'mf_category_name',false); ?>
<?php echo VmHTML::row('input', 'COM_VIRTUEMART_MANUFACTURER_URL', 'mf_url',$this->manufacturer->mf_url); ?>
<?php echo VmHTML::row('input', 'COM_VIRTUEMART_MANUFACTURER_EMAIL', 'mf_email',$this->manufacturer->mf_email); ?>
<?php echo VmHTML::row('editor', 'COM_VIRTUEMART_MANUFACTURER_DESCRIPTION', 'mf_desc', $this->manufacturer->mf_desc); ?>

   3 поля и получаем такой вид

<?php echo VmHTML::row('input', 'COM_VIRTUEMART_MANUFACTURER_NAME', 'mf_name', $this->manufacturer->mf_name); ?>
<?php echo VmHTML::row('booleanlist', 'COM_VIRTUEMART_PUBLISH', 'published', $this->manufacturer->published); ?>
<?php echo VmHTML::row('input', $this->viewName.' '. JText::_('COM_VIRTUEMART_SLUG'), 'slug', $this->manufacturer->slug); ?>
<?php echo VmHTML::row('select', 'COM_VIRTUEMART_MANUFACTURER_CATEGORY_NAME',
'virtuemart_manufacturercategories_id', $this->manufacturerCategories, $this->manufacturer->virtuemart_manufacturercategories_id, '', 'virtuemart_manufacturercategories_id', 'mf_category_name',false); ?>
<?php echo VmHTML::row('input', 'COM_VIRTUEMART_MANUFACTURER_URL','mf_url', $this->manufacturer->mf_url); ?>
<?php echo VmHTML::row('input', 'COM_VIRTUEMART_MANUFACTURER_EMAIL','mf_email', $this->manufacturer->mf_email); ?>
<?php echo VmHTML::row('editor', 'COM_VIRTUEMART_MANUFACTURER_DESCRIPTION', 'mf_desc', $this->manufacturer->mf_desc); ?>
<?php echo VmHTML::row('input', 'Мета описание', 'mf_m_desc', $this->manufacturer->mf_m_desc); ?>
<?php echo VmHTML::row('input', 'Мета ключевые-слова', 'mf_m_key', $this->manufacturer->mf_m_key); ?>
<?php echo VmHTML::row('input', 'Мета тайтл','mf_m_title', $this->manufacturer->mf_m_title); ?>

   сохраняем и перезаписываем.

   Далее идем в базу данных и находим таблицу "(ваш префикс к базе данных - посмотреть можно в файле configuration.php)_virtuemart_manufacturers_ru_ru" - насчет букв "ru_ru" не полностю уверен, наверняка это язык под которым вы устанавливали VirtueMart, и добавляем 3 поля соответственно mf_m_desc, mf_m_key, mf_m_title, как и какие добавлять поля описано в прошлой статье.

   Следующим шагом делаем вывод и сохранение данных в выше указаные поля.

   Идем к файлу модели производителя (еще раз хочу сделать акцент на приблеженности нового VirtueMart-a к MVC) administrator/components/com_virtuemart/models/manufacturer.php.

   Находим такой кусочек кода:.

function __construct() {
parent::__construct('virtuemart_manufacturer_id');
$this->setMainTable('manufacturers');
$this->addvalidOrderingFieldName(array('m.virtuemart_manufacturer_id', 'mf_name', 'mf_desc', 'mf_category_name', 'mf_url'));
$this->removevalidOrderingFieldName('virtuemart_manufacturer_id');
$this->_selectedOrdering = 'mf_name';
$this->_selectedOrderingDir = 'ASC';
}

   и дополняем его.

function __construct() {
parent::__construct('virtuemart_manufacturer_id');
$this->setMainTable('manufacturers');
$this->addvalidOrderingFieldName(array('m.virtuemart_manufacturer_id',
'mf_name',
'mf_desc',
'mf_category_name',
'mf_url',
'mf_m_desc',
'mf_m_key',
'mf_m_title'));
$this->removevalidOrderingFieldName('virtuemart_manufacturer_id');
$this->_selectedOrdering = 'mf_name';
$this->_selectedOrderingDir = 'ASC';
}

   Сохраняем, перезаписываем. Но хочу обратить ваше внимание на то что - это нам даст только вывод наших данных, а о том как они сохраняются подсказала нам строка:

$this->setMainTable('manufacturers');

   а если сказать точнее то она нам говорит, что где то лежит модель базовой таблици, рыть долго не нужно, она обычно лежит в папке tables, по пути administrator/components/com_virtuemart/tables/manufacturers.php - тут немного дописываем класс

class TableManufacturers extends VmTable {

/** @var int Primary key */
var $virtuemart_manufacturer_id = 0;
/** @var string manufacturer name */
var $mf_name = '';
var $slug = '';
/** @var string manufacturer email */
var $mf_email = '';
/** @var string manufacturer description */
var $mf_desc = '';
/** @var int Manufacturer category id */
var $virtuemart_manufacturercategories_id = 0;
/** @var string manufacturer URL */
var $mf_url = '';

/** @var int published or unpublished */
var $published = 1;

/**
* @author Max Milbers
* @param $db A database connector object
*/
function __construct(&$db)
{
parent::__construct('#__virtuemart_manufacturers', 'virtuemart_manufacturer_id', $db);

$this->setUniqueName('mf_name');
$this->setLoggable();
$this->setTranslatable(array('mf_name','mf_email','mf_desc','mf_url'));
$this->setSlug('mf_name');
$this->setTableShortCut('m');
}

}

   и превращаем его в такой вид

class TableManufacturers extends VmTable {

/** @var int Primary key */
var $virtuemart_manufacturer_id = 0;
/** @var string manufacturer name */
var $mf_name = '';
var $slug = '';
/** @var string manufacturer email */
var $mf_email = '';
/** @var string manufacturer description */
var $mf_desc = '';
/** @var int Manufacturer category id */
var $virtuemart_manufacturercategories_id = 0;
/** @var string manufacturer URL */
var $mf_url = '';

var $mf_m_desc = '';
var $mf_m_key = '';
var $mf_m_title = '';
/** @var int published or unpublished */
var $published = 1;

/**
* @author Max Milbers
* @param $db A database connector object
*/
function __construct(&$db)
{
parent::__construct('#__virtuemart_manufacturers', 'virtuemart_manufacturer_id', $db);

$this->setUniqueName('mf_name');
$this->setLoggable();
$this->setTranslatable(array('mf_name', 'mf_email', 'mf_desc', 'mf_url', 'mf_m_desc', 'mf_m_key', 'mf_m_title'));
$this->setSlug('mf_name');
$this->setTableShortCut('m');
}

}

   сохраняем и перезаписываем - теперь по идее, наши данные должны сохраняться.

   Теперь соответсвенно приступим к тому, для чего это все и делалось - к выводу мета тегов.

   Первое это вывод на странице описания самого производителя, а именно components/com_virtuemart/views/manufacturer/view.html.php и меняем здесь такие строки

if ($virtuemart_manufacturer_id !=0 ) {

$manufacturer = $model->getManufacturer();
$model->addImages($manufacturer,1);

$manufacturerImage = $manufacturer->images[0]->displayMediaThumb('class="manufacturer-image"',false);

$document->setTitle(JText::_('COM_VIRTUEMART_MANUFACTURER_DETAILS').' '.strip_tags($manufacturer->mf_name));

$this->assignRef('manufacturerImage', $manufacturerImage);
// $this->assignRef('manufacturerProductsURL', $manufacturerProductsURL);
$this->assignRef('manufacturer', $manufacturer);
$pathway->addItem(strip_tags($manufacturer->mf_name));

$this->setLayout('details');
// vmdebug('$manufacturer',$manufacturer);
}

   на

if ($virtuemart_manufacturer_id !=0 ) {

$manufacturer = $model->getManufacturer();
$model->addImages($manufacturer,1);

$manufacturerImage = $manufacturer->images[0]->displayMediaThumb('class="manufacturer-image"',false);
if(!empty($manufacturer->mf_m_title))
{$titler = $manufacturer->mf_m_title;}
else
{$titler = $manufacturer->mf_name;}
$document->setTitle(JText::_('COM_VIRTUEMART_MANUFACTURER_DETAILS').' '.strip_tags($titler));
$document->setMetaData('description', $manufacturer->mf_m_desc);
$document->setMetaData('keywords', $manufacturer->mf_m_key);

$this->assignRef('manufacturerImage', $manufacturerImage);
// $this->assignRef('manufacturerProductsURL', $manufacturerProductsURL);
$this->assignRef('manufacturer', $manufacturer);
$pathway->addItem(strip_tags($manufacturer->mf_name));

$this->setLayout('details');
// vmdebug('$manufacturer',$manufacturer);
}

   сохраняем, перезаписываем.

   Но основной целью у нас является страница с товарами от производителя потому идем дальше в такой файл components/com_virtuemart/views/category/view.html.php и находим следующий код:

if (JRequest::getInt('virtuemart_manufacturer_id' ) and !empty($products[0])) $title .=' '.$products[0]->mf_name ;
$document->setTitle( $title );

$pagination = $productModel->getPagination($perRow);
$this->assignRef('vmPagination', $pagination);

$orderByList = $productModel->getOrderByList($categoryId);
$this->assignRef('orderByList', $orderByList);

// $productRelatedManufacturerList = $productModel->getProductRelatedManufacturerList($categoryId);
// $this->assignRef('productRelatedManufacturerList', $productRelatedManufacturerList);

//$sortOrderButton = $productModel->getsortOrderButton();
//$this->assignRef('sortOrder', $sortOrderButton);

if ($category->metadesc) {
$document->setDescription( $category->metadesc );
}
if ($category->metakey) {
$document->setMetaData('keywords', $category->metakey);
}
if ($category->metarobot) {
$document->setMetaData('robots', $category->metarobot);
}

if ($app->getCfg('MetaTitle') == '1') {
$document->setMetaData('title', $title);

}

   и меняем его на:

if (JRequest::getInt('virtuemart_manufacturer_id' ) and !empty($products[0])) $title .=' '.$products[0]->mf_name ;
if(!empty($products[0]->mf_m_title))
{$titler = $products[0]->mf_m_title;}
else
{$titler = $title;}
$document->setTitle( $titler );//здесь сами можете выбрать какой тайтл оставлять или менять в случае если не пустой мета-тайтл

$pagination = $productModel->getPagination($perRow);
$this->assignRef('vmPagination', $pagination);

$orderByList = $productModel->getOrderByList($categoryId);
$this->assignRef('orderByList', $orderByList);

// $productRelatedManufacturerList = $productModel->getProductRelatedManufacturerList($categoryId);
// $this->assignRef('productRelatedManufacturerList', $productRelatedManufacturerList);

//$sortOrderButton = $productModel->getsortOrderButton();
//$this->assignRef('sortOrder', $sortOrderButton);

if ($category->metadesc) {
$document->setDescription( $category->metadesc );
}
elseif(JRequest::getInt('virtuemart_manufacturer_id' ))
{
$document->setDescription($products[0]->mf_m_desc);
}
if ($category->metakey) {
$document->setMetaData('keywords', $category->metakey);
}
elseif(JRequest::getInt('virtuemart_manufacturer_id' ))
{
$document->setMetaData('keywords',$products[0]->mf_m_key);
}
if ($category->metarobot) {
$document->setMetaData('robots', $category->metarobot);
}

if ($app->getCfg('MetaTitle') == '1') {
$document->setMetaData('title', $titler);
}

   вот в принципе и все, если возникнут вопросы то прошу в комментарии или в раздел "задать вопрос".

Twitter
Нравится
SocButtons v1.4
 

Комментарии 

 
# Лена 10.08.2012 12:58
Огромное спасибо вам за решение , всё получилось отлично ! В коде страницы с производителем всё появилось !!!
Ответить | Ответить с цитатой | Цитировать
 
 
# Артур 08.01.2013 12:50
Пойдет ли данный способ для Версии 1.5.20 ?
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 09.01.2013 15:48
http://roket.kiev.ua/index.php?option=com_content&view;=article&id;=44:-virtuemart-&catid;=1:articls&Itemid;=6
Вот страница с нужной вам статьей!
Ответить | Ответить с цитатой | Цитировать
 
 
# Вячеслав 21.02.2016 19:52
Ребята, для страницы производителей joomla 3:

if ($virtuemart_ma nufacturer_id>0 and !empty($this->products[0])) $title .=' '.$this->products[0]->mf_name ;
if(!empty($this ->products[0]->mf_m_title)){
$title = $this->products[0]->mf_m_title;
}
$document->setTitle( $title );

Автору респект просто зверский.
Ответить | Ответить с цитатой | Цитировать
 

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


Защитный код
Обновить

 

Сторонние

Модуль новостей для Joomla - JU News Ultra
14.11.2011 |  9007
Модуль вывода новостей JU News Ultra - еще один способ...

Новости

Безопасность смартфона — пин-код с текущим временем, Screen Lock – Time Password
IT мир
20.10.2014 |  1156
Любой владелец смартфона всегда с опаской вводит пин-код разблокировки, ведь...
Alien: Isolation — прими участие в фильме «Чужой»
IT мир
20.10.2014 |  1025
Creative Assembly можно поздравить, впрочем, как и геймеров. Игра Alien:...
Серия «кожаных» ноутбуков от Samsung продолжается: Chromebook 2 с пассивным охлаждением
IT мир
20.10.2014 |  940
Samsung продолжило серию «одетых в кожу» ноутбуков. Новая модификация Chromebook...
3D-принтер iBox Nano — компактность, доступность и долговечность
IT мир
20.10.2014 |  1028
Громоздкие и дорогие 3D-принтеры слишком медленно распространяются. Для популяризации 3D-печати...