VirtueMart 1.1 добавление keywords и description

И так. В ходе выполнения заказа по модернизации VirtueMart на базе 1.1.3 решил попутно описать реализацию метаданных keywords и description. В стандартном дистрибутиве данный функционал не предусмотрен, поэтому данный хак пригодится многим обладателем старой версии магазина.

Не забываем прежде чем совершать какие либо телодвижения с рабочим сайтом, ОБЯЗАТЕЛЬНО создаем резервную копию. Есть два типа администраторов которые делают бэкапы и которые нет. Мне хватило одного раза что бы заучить эту мудрость!

Начнем с того, что добавим в БД две записи. В структуру таблицы vm_product добавляем два поля, расположение не имеет значение, в моем случае я расположил посте поля product_desc. Поля - product_metakey и product_metadesc, тип - VARCHAR, длина - 256, по умолчанию - NULL, сравнение - в соответствии с вашей базой, галочка на NULL, остальное без изменений. VARCHAR(256) я использую преднамеренно, т.к. по канонам SEO описание рекомендуется в 250 с мелочью символов, так же количество ключевиков что то около десятка. Поэтому ставим ограничение. Но а кому и этого мало ставим тип - TEXT и пишем там поэмы ))).

На этом в БД закончили, переходим к правкам на FTP. Сперва админка.

Добавляем поля в форму редактирования товара

открываем сайт.ру/administrator/components/com_virtuemart/html/product.product_form.php

после (примерно строка 360)

    <tr class="row1"> 
      <td width="29%" valign="top"><div style="text-align:right;font-weight:bold;">
          <?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_S_DESC') ?>:</div>
      </td>
      <td width="71%"  valign="top">
          <textarea class="inputbox" name="product_s_desc" id="short_desc" cols="35" rows="6" ><?php echo $db->sf("product_s_desc"); ?></textarea> 
      </td>
    </tr>

добавляем

    <tr class="row0"> 
      <td width="29%" valign="top"><div style="text-align:right;font-weight:bold;">
          Мета-тег Description:</div>
      </td>
      <td width="71%"  valign="top">
          <textarea class="inputbox" name="product_metadesc" cols="35" rows="6" ><?php echo $db->sf("product_metadesc"); ?></textarea> 
      </td>
    </tr>
    <tr class="row1"> 
      <td width="29%" valign="top"><div style="text-align:right;font-weight:bold;">
          Мета-тег Keywords:</div>
      </td>
      <td width="71%"  valign="top">
          <textarea class="inputbox" name="product_metakey" cols="35" rows="6" ><?php echo $db->sf("product_metakey"); ?></textarea> 
      </td>
    </tr>

хочу обратить ваше внимание, если вставляем кириллицу то файл следует сохранять в кодировке UTF-8 без BOM или же воспользоваться языковыми файлами, но я тут заморачиваться не стал.

Отлично, формы есть, осталось их обучить сохраняться в БД!

открываем файл сайт.ру/administrator/components/com_virtuemart/classes/ps_product.php

после (примерно строка 278)

// Insert into DB
	$fields = array ( 'vendor_id' => $vendor_id,
			'product_parent_id' => vmRequest::getInt('product_parent_id'),
			'product_sku' => vmGet($d,'product_sku'),
			'product_name' => vmGet($d,'product_name'),
			'product_desc' => vmRequest::getVar('product_desc', '', 'default', '', VMREQUEST_ALLOWHTML),
			'product_s_desc' => vmRequest::getVar('product_s_desc', '', 'default', '', VMREQUEST_ALLOWHTML),

вставляем

			'product_metadesc' => vmGet($d,'product_metadesc'),
			'product_metakey' => vmGet($d,'product_metakey'),

после (примерно строка 478)

// Insert into DB
	$fields = array ( 'vendor_id' => $vendor_id,
			'product_sku' => vmGet($d,'product_sku'),
			'product_name' => vmGet($d,'product_name'),
			'product_desc' => vmRequest::getVar('product_desc', '', 'default', '', VMREQUEST_ALLOWHTML),
			'product_s_desc' => vmRequest::getVar('product_s_desc', '', 'default', '', VMREQUEST_ALLOWHTML),

вставляем

			'product_metadesc' => vmGet($d,'product_metadesc'),
			'product_metakey' => vmGet($d,'product_metakey'),

этими правками мы обучаем сайт сохранять и обновлять товары с нашими мета-данными.

Осталось за малым - научить сайт добавлять в html мета-теги с нашими данными.

открываем файл сайт.ру/administrator/components/com_virtuemart/html/shop.product_details.php

заменяем часть кода (примерно строка 230)

// Prepend Product Short Description Meta Tag "description"
if( vmIsJoomla('1.5')) {
	$document = JFactory::getDocument();
	$document->setDescription(strip_tags( $db_product->f("product_s_desc")));
} else {
	$mainframe->prependMetaTag( "description", strip_tags( $db_product->f("product_s_desc")) );
}

на

// Prepend Product Short Description Meta Tag "description"
if( vmIsJoomla('1.5')) {
	$document = JFactory::getDocument();
	if ($db_product->f("product_metadesc")) {
		$document->setDescription(strip_tags( $db_product->f("product_metadesc")));
	} else {
		$document->setDescription(strip_tags( $db_product->f("product_s_desc")));
	}
	if ($db_product->f("product_metakey")) {
		$document->setMetadata('keywords', strip_tags( $db_product->f("product_metakey")));
	}
} else {
	if ($db_product->f("product_metadesc")) {
		$mainframe->prependMetaTag("description", strip_tags( $db_product->f("product_metadesc")));
	} else {
		$mainframe->prependMetaTag("description", strip_tags( $db_product->f("product_s_desc")));
	}
	if ($db_product->f("product_metakey")) {
		$mainframe->prependMetaTag("keywords", strip_tags( $db_product->f("product_metakey")));
	}
}

Вот и весь фокус. Все эти телодвижения проделывались на Joomla 1.5.5 + VirtueMart 1.1.3, по идее во всей ветке 1.1 должно работать. Если не имеете опыта в PHP программирование (кодинг) лучше доверьте эту работу профильному специалисту. Можно обращаться ко мне )))).

Всем Спасибо и Удачи!!!

 

  • Добрый день, подскажите, прописал все как написано выше - все окна появились только теперь совсем никакая информация не поддается редактирования, а метатеги не сохраняются. С чем это может быть связано? Заранее спасибо! С уважением, Иван
  • job
    День добрый. А у вас точно virtuemart v1.1 он древний и уже не актуальный. Могу оказать услугу по настройке, если что обращайтесь