VirtueMart 1.1 добавление keywords и description
- Joomla /
- Virtuemart
- 19.12.2012
- job
- 7644
И так. В ходе выполнения заказа по модернизации 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 программирование (кодинг) лучше доверьте эту работу профильному специалисту. Можно обращаться ко мне )))).
Всем Спасибо и Удачи!!!
-
Иван
-