title для VirtueMart отдельная тема. Или использоваться разные СЕФ-расширения, которые делают заголовки по своим алгоритмам, или прописать свои алгоритмы в шаблоне ВМа.
На
www.nasos4you.com.ua title в VirtueMart организованы так (virtuemart 1.1.8):
В файлы добавлен код:
/components/com_virtuemart/themes/THEME/templates/product_details/flypage.tpl.php<?php
$manufacturer_name = preg_replace ('/<a.*>.*\((.*)\).*<\/a>/Ui','$1', $manufacturer_link);
$cl = new ps_product_category;
//if ($cl->has_childs($category_id)) {
//}
$category_name = $cl->get_name($category_id);
$parents = $cl->get_allparents_list($category_id);
$parent_names = '';
foreach ($parents as $parent ) {
$parent_names .= $parent['category_name']." ";
}
$all_names = $parent_names.' '.$category_name;
$product_price_for_title = strip_tags($product_price,'<a>');
if (JString::strlen($product_price_for_title)!= JString::strlen(strip_tags($product_price_for_title))) {
$product_price_for_title = ' ';
}
else {
$product_price_for_title = ' - '.$VM_LANG->_('PHPSHOP_PRODUCT_PRICE_TITLE').' '.$product_price_for_title.' '.JText::_('на').' '.date('d.m.Y',time()).' - ';
$product_price_for_title = preg_replace('~\n~Ui',' ',$product_price_for_title);
$product_price_for_title = preg_replace('~\t~Ui',' ',$product_price_for_title);
$product_price_for_title = preg_replace('~ ~Ui',' ',$product_price_for_title);
}
//$page_title = $VM_LANG->_('PHPSHOP_CART_ADD_TO').' '.$manufacturer_name.' '.$product_name.' '.$all_names.' '.$vendor_city.' : ';
$page_title = $VM_LANG->_('PHPSHOP_CART_ADD_TO').' '.$product_name.$product_price_for_title.$all_names.' '.$vendor_city.' : ';
$page_desc = $VM_LANG->_('PHPSHOP_CART_ADD_TO').' '.$product_name.$product_price_for_title.$all_names.' '.$vendor_city.' : ';
$keywords = $product_name.' '.$all_names.' '.$vendor_city;
/*
foreach ($categories as $category) {
$page_title .= $category['category_name'].", ";
$keywords .= $category['category_name'].", ";
$page_desc .= $category['category_name'].", ";
}
*/
$page_title = JString::substr($page_title,0,JString::strlen($page_title)-2) ;
$page_title = preg_replace( '/\s+/', ' ', trim( $page_title ) );
$keywords = JString::substr($keywords,0,JString::strlen($keywords )-2) ;
$keywords = preg_replace( '/;/', ' ', trim( $keywords ) );
$keywords = preg_replace( '/\s+/', ' ', trim( $keywords ) );
$keywords = explode (' ',$keywords);
$keywords = implode (',', $keywords);
$page_desc = JString::substr($page_desc,0,JString::strlen($page_desc)-2) ;
$metadesc = html_entity_decode($VM_LANG->_('PHPSHOP_SHOP_MOD').' '.$vendor_name.', '.$vendor_city.'. '.$page_desc );
$metadesc = preg_replace( '/\s+/', ' ', trim( $metadesc ) );
//##my200912120717 Модифікую заголовок документа {
$document =& JFactory::getDocument();
$document->setTitle(html_entity_decode($page_title));
$document->setDescription($metadesc);
$document->setMetaData('keywords', $keywords);
//##my200912120717 Модифікую заголовок документа }
?>
components/com_virtuemart/themes/THEME/templates/browse/includes/browse_header_category.tpl.php<?php
$cl = new ps_product_category;
//if ($cl->has_childs($category_id)) {
//}
$parents = $cl->get_allparents_list($category_id);
$parent_names = '';
foreach ($parents as $parent ) {
$parent_names .= $parent['category_name']." ";
}
$all_names = JString::ucfirst($browsepage_lbl). '; ' . $parent_names;
$page_title = $all_names.'; '.JString::strtolower($VM_LANG->_('PHPSHOP_CART_ADD_TO')).' '.$vendor_city.' : ';
$page_desc = $VM_LANG->_('PHPSHOP_CART_ADD_TO').' '.$all_names.' : ';
$keywords = $all_names.', ';
foreach ($categories as $category) {
$page_title .= $category['category_name'].", ";
$keywords .= $category['category_name'].", ";
$page_desc .= $category['category_name'].", ";
}
$page_title = JString::substr($page_title,0,JString::strlen($page_title)-2) ;
$keywords = JString::substr($keywords,0,JString::strlen($keywords )-2) ;
$page_desc = JString::substr($page_desc,0,JString::strlen($page_desc)-2) ;
//##my200912120717 Модифікую заголовок документа {
$document =& JFactory::getDocument();
$document->setTitle(html_entity_decode($page_title));
$metadesc = $VM_LANG->_('PHPSHOP_SHOP_MOD').' '.$vendor_name.', '.$vendor_city.'. '.$page_desc ;
$document->setDescription($metadesc);
$document->setMetaData('keywords', $keywords);
//##my200912120717 Модифікую заголовок документа }
?>
Создан файл
/components/com_virtuemart/themes/THEME/user_class/ps_product_category.php<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
/**
*
* @version $Id: ps_product_category.php 2285 2010-02-01 10:57:18Z soeren_nb $
* @package VirtueMart
* @subpackage classes
* @copyright Copyright (C) 2004-2010 soeren - All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* VirtueMart is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details.
*
* http://virtuemart.net
*/
/**
* The class to manage and show product categories
*
*/
class ps_product_category extends vm_ps_product_category {
/**
* creates a bulleted of the childen of this category if they exist
* @author pablo
* @param int $category_id
* @return string The HTML code
*/
function get_child_list($category_id) {
global $sess, $ps_product, $VM_LANG;
$ps_vendor_id = $_SESSION["ps_vendor_id"];
$db = new ps_DB;
$childs = array();
/*##my##2010-11-24 00:25:03 { I need category_full_image
//It was:
$q = "SELECT category_id, category_thumb_image, category_child_id,category_name FROM #__{vm}_category,#__{vm}_category_xref ";
//It became: */
$q = "SELECT category_id, category_thumb_image, category_full_image, category_child_id,category_name FROM #__{vm}_category,#__{vm}_category_xref ";
/*##my##2010-11-24 00:25:03 } */
$q .= "WHERE #__{vm}_category_xref.category_parent_id='$category_id' ";
$q .= "AND #__{vm}_category.category_id=#__{vm}_category_xref.category_child_id ";
$q .= "AND #__{vm}_category.vendor_id='$ps_vendor_id' ";
$q .= "AND #__{vm}_category.category_publish='Y' ";
$q .= "ORDER BY #__{vm}_category.list_order, #__{vm}_category.category_name ASC";
$db->setQuery($q);
$db->query();
while( $db->next_record() ) {
$childs[] = array (
'category_name' => $db->f("category_name"),
'category_id' => $db->f("category_id"),
'category_thumb_image' => $db->f("category_thumb_image"),
/*##my##2010-11-24 00:25:39 { I add category_full_image */
'category_full_image' => $db->f("category_full_image"),
/*##my##2010-11-24 00:25:39 } */
'number_of_products' => ps_product_category::products_in_category( $db->f("category_id")),
);
}
return $childs;
}
/*##my##2010-11-24 06:33:47 { Add functions to handle parents */
/**
* Checks for parents of the category $category_id
*
* @param int $category_id
* @return boolean True when the category has parents, false when not
*/
function has_parents($category_id) {
$db = new ps_DB;
if( empty( $GLOBALS['category_info'][$category_id]['has_parents'] )) {
$q = "SELECT category_parent_id FROM #__{vm}_category_xref ";
$q .= "WHERE category_child_id='$category_id' ";
$q .= "AND category_parent_id <> '0' ";
$db->setQuery($q);
$db->query();
if ($db->num_rows() > 0)
$GLOBALS['category_info'][$category_id]['has_parents'] = true;
else
$GLOBALS['category_info'][$category_id]['has_parents'] = false;
}
return $GLOBALS['category_info'][$category_id]['has_parents'];
}
/**
* creates a bulleted of the parents of this category if they exist
* @author gruz
* @param int $category_id
* @return string The HTML code
*/
function get_parent_list($category_id) {
global $sess, $ps_product, $VM_LANG;
$ps_vendor_id = $_SESSION["ps_vendor_id"];
$db = new ps_DB;
$childs = array();
/*##my##2010-11-24 00:25:03 { I need category_full_image
//It was:
$q = "SELECT category_id, category_thumb_image, category_child_id,category_name FROM #__{vm}_category,#__{vm}_category_xref ";
//It became: */
$q = "SELECT category_id, category_thumb_image, category_full_image, category_child_id,category_name FROM #__{vm}_category,#__{vm}_category_xref ";
/*##my##2010-11-24 00:25:03 } */
$q .= "WHERE #__{vm}_category_xref.category_child_id='$category_id' ";
$q .= "AND #__{vm}_category.category_id=#__{vm}_category_xref.category_parent_id ";
$q .= "AND #__{vm}_category.vendor_id='$ps_vendor_id' ";
$q .= "AND #__{vm}_category.category_publish='Y' ";
$q .= "ORDER BY #__{vm}_category.list_order, #__{vm}_category.category_name ASC";
$db->setQuery($q);
$db->query();
while( $db->next_record() ) {
$childs[] = array (
'category_name' => $db->f("category_name"),
'category_id' => $db->f("category_id"),
'category_thumb_image' => $db->f("category_thumb_image"),
/*##my##2010-11-24 00:25:39 { I add category_full_image */
'category_full_image' => $db->f("category_full_image"),
/*##my##2010-11-24 00:25:39 } */
'number_of_products' => ps_product_category::products_in_category( $db->f("category_id")),
);
}
return $childs;
}
/**
* creates a bulleted of the parents of this category if they exist
* @author gruz
* @param int $category_id
* @return string The HTML code
*/
function get_allparents_list($category_id) {
$parents = $this->get_parent_list($category_id);
if (empty($parents)) {
return array();
}
$i=0;
while (true) {
if ($parents[$i]['category_id']!=0) {
$new_parent = $this->get_parent_list($parents[$i]['category_id']);
if (!empty($new_parent)) {
$parents[] = $new_parent[0];
break;
} else {
break;
}
}
else {
break;
}
if ($i==$this->count_categories()) {break;} //Страхуюсь на випадок зависання цилку.
//Він зробиться не більше разів, ніж є взагалі категорій
$i++;
}
$parents = array_reverse($parents);
return $parents;
}
/*##my##2010-11-24 06:33:47 } */
}
?>
В настройках ВМа включено использование пользовательских классов.
http://www.vm-expert.com/virtuemart-expert-blog/80-extending-virtuemart-114