Мета данные VirtueMart для страницы с производителями!
|
02.08.2012 20:27 |
По просьбе пользователя который оставил комментарий в статье Мета данные для VirtueMart 1.1.5,1.1.6,1.1.7,1.1.8 | Description | Keywords решил написать еще одну статью про то - как сделать добавление мета данных на страницу с производителями опционально.
И первое, что хочу сказать - это то, что по своей логике VirtueMart очень часто повторяется в работе, но на этот раз, по сравнению с предыдущей статей мы не будем идти такими радикальными методами как регулярные выражения, а сделаем все более правильно.
Начнем с административной части - добавим специальные поля для мета описания, мета ключевых-слов и альтернативного тайтла в подробном просмотре формы производителя, а именно в файле administrator/components/com_virtuemart/html/manufacturer.manufacturer_form.php .
Находим строки
editorArea( 'editor1', $db->f("mf_desc"), 'mf_desc', '300', '150', '70', '25' )
?>
</td>
<tr align="center">
<td colspan="2" > </td>
</tr>
</table>
меняем на
editorArea( 'editor1', $db->f("mf_desc"), 'mf_desc', '300', '150', '70', '25' )
?>
</td>
</tr>
<tr align="center">
<td colspan="2" > </td>
</tr>
<tr>
<td width="22%" align="right" valign="top"><?php echo 'Мета описание' ?>:</td>
<td width="78%" >
<input type="text" class="inputbox" name="mf_m_desc" value="<?php $db->sp("mf_m_desc") ?>" size="30" />
</td>
</tr>
<tr>
<td width="22%" align="right" valign="top"><?php echo 'Мета ключевые-слова' ?>:</td>
<td width="78%" >
<input type="text" class="inputbox" name="mf_m_keyw" value="<?php $db->sp("mf_m_keyw") ?>" size="30" />
</td>
</tr>
<tr>
<td width="22%" align="right" valign="top"><?php echo 'Альтернативный тайтл' ?>:</td>
<td width="78%" >
<input type="text" class="inputbox" name="mf_m_title" value="<?php $db->sp("mf_m_title") ?>" size="30" />
</td>
</tr>
<tr align="center">
<td colspan="2" > </td>
</tr>
</table>
Сохраняем и перезаписываем на сервере и идем дальше!
Дальше идем в наш phpmyadmin или любой другой клиент mysql и находим таблицу jos_vm_manufacturer, выбираем вкладочку структура и поочередно добавляем поля (если у вас новая версия phpmyadmin то там сразу можно указать сколько полей добавлять).
Значит нам откроются 3 шаблона и заполним мы их так - названия полей понятно, как и в пред. примере названия полей (mf_m_desc, mf_m_keyw, mf_m_title), тип полей ставим varchar, длина 255 и нажимаем сохранить (можно еще указать кодировку сравнения ut8_general_ci но это не обязательно).
Потом, что бы эти поля сохранялись в базе нужно добавить пару строк в файле administrator/components/com_virtuemart/classes/ps_manufacturer.php.
Находим
function add(&$d) {
global $VM_LANG;
$db = new ps_DB;
if (!$this->validate_add($d)) {
return false;
}
$fields = array( 'mf_name' => vmGet( $d, 'mf_name' ),
'mf_email' => vmGet( $d, 'mf_email' ),
'mf_desc' => vmGet( $d, 'mf_desc', '', VMREQUEST_ALLOWHTML ),
'mf_category_id' => vmRequest::getInt('mf_category_id'),
'mf_url' => vmGet( $d, 'mf_url')
);
$db->buildQuery('INSERT', '#__{vm}_manufacturer', $fields );
if( $db->query() !== false ) {
$GLOBALS['vmLogger']->info( $VM_LANG->_('VM_MANUF_ADDED') );
$_REQUEST['manufacturer_id'] = $db->last_insert_id();
return true;
}
return false;
}
/**
* updates manufacturer information
*
* @param array $d
* @return boolean
*/
function update(&$d) {
global $VM_LANG;
$db = new ps_DB;
if (!$this->validate_update($d)) {
return False;
}
$fields = array( 'mf_name' => vmGet( $d, 'mf_name' ),
'mf_email' => vmGet( $d, 'mf_email' ),
'mf_desc' => vmGet( $d, 'mf_desc', '', VMREQUEST_ALLOWHTML ),
'mf_category_id' => vmRequest::getInt('mf_category_id'),
'mf_url' => vmGet( $d, 'mf_url')
);
$db->buildQuery('UPDATE', '#__{vm}_manufacturer', $fields, 'WHERE manufacturer_id='.(int)$d["manufacturer_id"] );
if( $db->query() ) {
$GLOBALS['vmLogger']->info( $VM_LANG->_('VM_MANUF_UPDATED') );
return true;
}
return false;
}
меняем на
function add(&$d) {
global $VM_LANG;
$db = new ps_DB;
if (!$this->validate_add($d)) {
return false;
}
$fields = array( 'mf_name' => vmGet( $d, 'mf_name' ),
'mf_email' => vmGet( $d, 'mf_email' ),
'mf_desc' => vmGet( $d, 'mf_desc', '', VMREQUEST_ALLOWHTML ),
'mf_category_id' => vmRequest::getInt('mf_category_id'),
'mf_url' => vmGet( $d, 'mf_url'),
'mf_m_desc' => vmGet( $d, 'mf_m_desc'),
'mf_m_title' => vmGet( $d, 'mf_m_title'),
'mf_m_keyw' => vmGet( $d, 'mf_m_keyw')
);
$db->buildQuery('INSERT', '#__{vm}_manufacturer', $fields );
if( $db->query() !== false ) {
$GLOBALS['vmLogger']->info( $VM_LANG->_('VM_MANUF_ADDED') );
$_REQUEST['manufacturer_id'] = $db->last_insert_id();
return true;
}
return false;
}
/**
* updates manufacturer information
*
* @param array $d
* @return boolean
*/
function update(&$d) {
global $VM_LANG;
$db = new ps_DB;
if (!$this->validate_update($d)) {
return False;
}
$fields = array( 'mf_name' => vmGet( $d, 'mf_name' ),
'mf_email' => vmGet( $d, 'mf_email' ),
'mf_desc' => vmGet( $d, 'mf_desc', '', VMREQUEST_ALLOWHTML ),
'mf_category_id' => vmRequest::getInt('mf_category_id'),
'mf_url' => vmGet( $d, 'mf_url'),
'mf_m_desc' => vmGet( $d, 'mf_m_desc'),
'mf_m_title' => vmGet( $d, 'mf_m_title'),
'mf_m_keyw' => vmGet( $d, 'mf_m_keyw')
);
$db->buildQuery('UPDATE', '#__{vm}_manufacturer', $fields, 'WHERE manufacturer_id='.(int)$d["manufacturer_id"] );
if( $db->query() ) {
$GLOBALS['vmLogger']->info( $VM_LANG->_('VM_MANUF_UPDATED') );
return true;
}
return false;
}
Сохраняем и перезаписываем на сервере!
Дальше идем к уже знакомому нам файлу administrator/com_virtuemart/html/shop.browse.php и меняем такие строки
elseif( $manufacturer_id) {
$db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
$db->next_record();
$mainframe->setPageTitle( $db->f("mf_name") );
$browsepage_lbl = shopMakeHtmlSafe( $db->f("mf_name") );
$tpl->set( 'browsepage_lbl', $browsepage_lbl );
$browsepage_lbltext = $db->f("mf_desc");
$tpl->set( 'browsepage_lbltext', $browsepage_lbltext );
$browsepage_header = $tpl->fetch( 'browse/includes/browse_header_manufacturer.tpl.php' );
}
на вот такие
elseif( $manufacturer_id) {
$db->query( "SELECT manufacturer_id, mf_name, mf_desc, mf_m_desc, mf_m_keyw, mf_m_title FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
$db->next_record();
$new_title = $db->f("mf_m_title");
if(!empty($new_title))
{
$mainframe->setPageTitle($db->f("mf_m_title"));
}
else
{
$mainframe->setPageTitle($db->f("mf_name"));
}
$mainframe->prependMetaTag( "keywords", $db->f("mf_m_keyw"));
$mainframe->prependMetaTag( "description", $db->f("mf_m_desc"));
$mainframe->prependMetaTag( "title", $db->f("mf_m_title"));
$browsepage_lbl = shopMakeHtmlSafe( $db->f("mf_name") );
$tpl->set( 'browsepage_lbl', $browsepage_lbl );
$browsepage_lbltext = $db->f("mf_desc");
$tpl->set( 'browsepage_lbltext', $browsepage_lbltext );
$browsepage_header = $tpl->fetch( 'browse/includes/browse_header_manufacturer.tpl.php' );
}
Вот впринципе и все!
|
Добавить комментарий
|
|
|
Комментарии
Спасибо, все работает.
Эта статья - это экономия времени. То что я находил до этого - была какая то ерунда...но здесь описано все до мелочей(даже я все сделал правильно с первого раза)...
Эта статья, я уверен, помогла не только мне, а и поможет еще десяткам тысяч….она уникальная, на данный момент на просторах рунета и укрнета….
Спасибо еще раз за статью!
И еще один: а можно как то сделать, чтобы замнялся основной title или в этом не смысла, когда есть альтернативный?
Насчет тайтла, я в СЕО не силен потому точно сказать не смогу, и назвал его альтернативным тайтлом просто потому, что назвал, так как где то видел, а насчет того можно ли ним как то заменить именно на этой странице основной тайтл, то присмотритесь в последний кусок кода в данной статье и вы увидите комментарий "//ЗДЕСЬ ПО ЖЕЛАНИЮ МОЖНО ПОМЕНЯТЬ $db->f("mf_name") на наш $db->f("mf_m_title") что бы указывать название страницы нашим мета тайтлом!"! Всегда рад помочь по любым вопросам обращайтесь!
Ваш сайт в закладках - так что, я ваш надолго)
Тогда, нужно прописывать "альтернативный title" для всех производителей, так как нет проверки строк на заполнение. В результате выводится пустая строка - нет титла страницы
я вам уже наверное порядком поднадоел, но у меня выбивает ошибку 500 при вставке этого кода....не работает все меню связаны с virtuemart
попробуйте так
if(!empty($db->f("mf_m_title"))
{
$mainframe->setPageTitle($d b->f("mf_m_title"));
}
else
{
$mainframe->setPageTitle($d b->f("mf_name"));
}
Мы заменяет кодом эту строчку $mainframe->setPageTitle($d b->f("mf_name") ); - я правильно понял? или я не то делаю...когда я этот часть кода заменяю - опять появляется ошибка 500
Спасибо. Вы лучший)
При добавлении
'mf_m_desc' => vmGet( $d, 'mf_m_desc'),
'mf_m_title' => vmGet( $d, 'mf_m_title'),
'mf_m_keyw' => vmGet( $d, 'mf_m_keyw')
в файл ps_manufacturer .php - в админке вместо списка производителей выводится пустая страница.
Когда-то я просил вас написать пост по этой теме...в принципе вы за меня его и написали...большое спасибо.
Сейчас вопрос немного не по теме - но и по теме..нигде не могу найти решение.
Я хочу вставить описание производителя и вывести его на странице товаров этого производителя. На данный момент текст в описание вставляю, но он не отображается. В чем может быть проблема? Подскажите пожалуйста. Joomla 1.5, virtuemart 1.19. Большое спасибо...жду от вас помощи!