После написания предыдущей статьи поступила просьба написать еще 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);
	  }
	
 
   вот в принципе и все, если возникнут вопросы то прошу в комментарии или в раздел "задать вопрос".
			 
Комментарии
Вот страница с нужной вам статьей!
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 );
Автору респект просто зверский.