Изначально компонент Virtuemart в качестве заголовка Title страницы категории товаров использует название категории. Что само по себе не удобно. Пришлось сделать немного правок кода.
Изначально мы имеем форму вот такого вида:
Картинка
В итоге нашего seo-мода мы получим форму с дополнительными полями Title, описание (Meta Description) и ключевые слова (Meta Keywords):
Картинка
Для начала находим файл product.product_category_form.php, находится в папке /administrator/components/com_virtuemart/html/
В нем находим строки:
<tr>
<td width="21%" nowrap><div align="right"><?php echo $VM_LANG->_('PHPSHOP_CATEGORY_FORM_NAME') ?>:</div></td>
<td width="79%">
<input type="text" name="category_name" size="60" value="<?php echo shopMakeHtmlSafe( $db->sf('category_name')) ?>" />
</td>
</tr>
Добавляем ниже следующие строки:
<tr>
<td width="21%" nowrap><div align="right">Title страницы категории:</div></td>
<td width="79%">
<input type="text" name="title_pg" size="100" value="<?php echo shopMakeHtmlSafe( <strong>$db->sf('title_pg'))</strong> ?>" />
</td>
</tr>
<tr>
<td width="21%" valign="top" nowrap><div align="right">Meta-тег Description категории:</div></td>
<td width="79%" valign="top">
<input type="text" name="meta_desc" size="180" value="<?php echo shopMakeHtmlSafe( <strong>$db->sf('meta_desc'))</strong> ?>" />
</td>
</tr>
<tr>
<td width="21%" valign="top" nowrap><div align="right">Meta-тег Keywords категории:</div></td>
<td width="79%" valign="top">
<input type="text" name="meta_key" size="180" value="<?php echo shopMakeHtmlSafe( <strong>$db->sf('meta_key'))</strong> ?>" />
</td>
</tr>
В этой же директории находим файл shop.browse.php. В нем необходимо заменить код:
if( $category_id ) {
/**
* CATEGORY DESCRIPTION
*/
$db->query( "SELECT category_id, category_name FROM #__{vm}_category WHERE category_id='$category_id'");
$db->next_record();
$category_name = shopMakeHtmlSafe( $db->f('category_name') );
// Set Dynamic Page Title
$vm_mainframe->setPageTitle( $db->f("category_name") );
$desc = $ps_product_category->get_description($category_id);
$desc = vmCommonHTML::ParseContentByPlugins( $desc );
// Prepend Product Short Description Meta Tag "description" when applicable
$mainframe->prependMetaTag( "description", substr(strip_tags($desc ), 0, 255) );
}
Заменяем на следующее:
if( $category_id ) {
/**
* CATEGORY DESCRIPTION
*/
$db->query( "SELECT category_id, category_name, title_pg, meta_desc, meta_key FROM #__{vm}_category WHERE category_id='$category_id'");
$db->next_record();
$category_name = shopMakeHtmlSafe( $db->f('category_name') );
$title_pg = shopMakeHtmlSafe( $db->f('title_pg') );
$meta_desc = shopMakeHtmlSafe( $db->f('meta_desc') );
$meta_key = shopMakeHtmlSafe( $db->f('meta_key') );
$desc = $ps_product_category->get_description($category_id);
//Задание мета тега Description
$desc = vmCommonHTML::ParseContentByPlugins( $desc );
if ($title_pg != '') {
// Set Dynamic Page Title
//Задание титла страницы
$vm_mainframe->setPageTitle( $db->f("title_pg") );
} else { $vm_mainframe->setPageTitle( $db->f("category_name") ); }
if($meta_desc != '') {
$mainframe->prependMetaTag( "description", substr(strip_tags($meta_desc ), 0, 255) );
} else {
// Prepend Product Short Description Meta Tag "description" when applicable
$mainframe->prependMetaTag( "description", substr(strip_tags($desc ), 0, 255) );
}
if($meta_key != '') {
$mainframe->prependMetaTag( "keywords", $meta_key );
}
}
Теперь необходимо добавить обработчики для новых полей. Находим в директории administrator/components/com_virtuemart/classes/ файл ps_product_category.php, в нем находим следующие строки:
'category_name' => vmGet( $d, 'category_name' ), 'category_publish' => vmGet( $d, 'category_publish' ),
Ниже вставляем строки:
'title_pg' => vmGet( $d, 'title_pg' ), 'meta_desc' => vmGet( $d, 'meta_desc' ), 'meta_key' => vmGet( $d, 'meta_key' ),
Добавим новые поля в таблицу vm_category, для этого выполним запрос:
ALTER TABLE `jos_vm_category` ADD COLUMN ` title_pg ` VARCHAR(255) NULL DEFAULT NULL AFTER `list_order`, ADD COLUMN `meta_desc` TEXT NULL DEFAULT NULL AFTER `title_pg`, ADD COLUMN `meta_key` VARCHAR(255) NULL DEFAULT NULL AFTER `meta_desc`;
P.S. мета-теги для страницы товара сделать не сложнее, по той же схеме.