Главная > Статьи > Мета данные VirtueMart для страницы с производителями!

Мета данные VirtueMart для страницы с производителями!

1
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" >&nbsp;</td>
</tr>
</table>

   меняем на

editorArea( 'editor1', $db->f("mf_desc"), 'mf_desc', '300', '150', '70', '25' )
?>
</td>
</tr>
<tr align="center">
<td colspan="2" >&nbsp;</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" >&nbsp;</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' );
}

   Вот впринципе и все!

Twitter
Нравится
SocButtons v1.4
 

Комментарии 

 
# Сергей 04.08.2012 12:40
Вы супер!!!!!

Спасибо, все работает.

Эта статья - это экономия времени. То что я находил до этого - была какая то ерунда...но здесь описано все до мелочей(даже я все сделал правильно с первого раза)...

Эта статья, я уверен, помогла не только мне, а и поможет еще десяткам тысяч….она уникальная, на данный момент на просторах рунета и укрнета….

Спасибо еще раз за статью!
Ответить | Ответить с цитатой | Цитировать
 
 
# Сергей 04.08.2012 12:44
Вопросик немного не по теме: альтернативный title выводится в поиске google в зависимости от запроса или на него влияют доугие факторы?

И еще один: а можно как то сделать, чтобы замнялся основной title или в этом не смысла, когда есть альтернативный?
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 04.08.2012 19:17
Спасибо за столь лестный комментарий, рад, что смог вам помочь!
Насчет тайтла, я в СЕО не силен потому точно сказать не смогу, и назвал его альтернативным тайтлом просто потому, что назвал, так как где то видел, а насчет того можно ли ним как то заменить именно на этой странице основной тайтл, то присмотритесь в последний кусок кода в данной статье и вы увидите комментарий "//ЗДЕСЬ ПО ЖЕЛАНИЮ МОЖНО ПОМЕНЯТЬ $db->f("mf_name") на наш $db->f("mf_m_title") что бы указывать название страницы нашим мета тайтлом!"! Всегда рад помочь по любым вопросам обращайтесь!
Ответить | Ответить с цитатой | Цитировать
 
 
# Сергей 04.08.2012 20:08
Спасибо....
Ваш сайт в закладках - так что, я ваш надолго)
Ответить | Ответить с цитатой | Цитировать
 
 
# Сергей 04.08.2012 22:24
ПОМЕНЯТЬ $db->f("mf_name") на наш $db->f("mf_m_title") что бы указывать название страницы нашим мета тайтлом!"!

Тогда, нужно прописывать "альтернативный title" для всех производителей, так как нет проверки строк на заполнение. В результате выводится пустая строка - нет титла страницы
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 05.08.2012 18:08
Тогда напишите так $mainframe->setPageTitle(!e mpty($db->f("mf_m_title"))?$db->f("mf_m_title"):$db->f("mf_name")); и будет вам счастье!
Ответить | Ответить с цитатой | Цитировать
 
 
# Сергей 06.08.2012 12:17
Цитирую Roket007:
Тогда напишите так $mainframe->setPageTitle(!e mpty($db->f("mf_m_title"))?$db->f("mf_m_title"):$db->f("mf_name")); и будет вам счастье!


я вам уже наверное порядком поднадоел, но у меня выбивает ошибку 500 при вставке этого кода....не работает все меню связаны с virtuemart
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 06.08.2012 14:12
я не тестировал выше представленный кусок кода, скорее там внутренний синтаксис кокой то функции имеет свои проблемы!
попробуйте так
if(!empty($db->f("mf_m_title"))
{
$mainframe->setPageTitle($d b->f("mf_m_title"));
}
else
{
$mainframe->setPageTitle($d b->f("mf_name"));
}
Ответить | Ответить с цитатой | Цитировать
 
 
# Сергей 06.08.2012 14:38
Цитирую Roket007:
я не тестировал выше представленный кусок кода, скорее там внутренний синтаксис кокой то функции имеет свои проблемы!
попробуйте так
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
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 06.08.2012 18:55
Ладно давайте я разберусь и отпишу, а то просто руки не доходят работы много, будет сегодня позно вечером или завтра днем.
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 06.08.2012 20:10
Обновил последний кусок кода пробуйте!
Ответить | Ответить с цитатой | Цитировать
 
 
# Сергей 07.08.2012 07:52
:( .... не работает... альтернативный показывает, а если его нет - то пустой title
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 07.08.2012 08:06
if(!empty($new_ title) || !is_null($new_t itle)) от суда уберите "|| !is_null($new_t itle)".
Ответить | Ответить с цитатой | Цитировать
 
 
# Сергей 07.08.2012 14:37
Все заработало - ураааааааааааа)
Спасибо. Вы лучший)
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 07.08.2012 15:32
Спасибо, обращайтесь - помогу!
Ответить | Ответить с цитатой | Цитировать
 
 
# Кен 27.08.2012 12:58
Правильно ли я понял, что данное решение позволяет генерировать тайтл и дескрипшен страницам которые получаются при выборе производителя, т.е. при сортировке по производителю сейчас присваивается общий тайл магазина, а при использовании данного решения он будет формироваться как-то рандомно, при этом самому его не отредактировать ?
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 27.08.2012 18:57
Нет, они не генерируются автоматически и не радомно, у вас в настройках производителя в административно й части, будет 3 поля в которых вы будете указывать мета данные!
Ответить | Ответить с цитатой | Цитировать
 
 
# Вячеслав 22.09.2012 10:23
Подскажите пжл, после выполнения инструкции не отображается у производителей ни тайтл ни кейворд и дискрипшн, joomla1.5.25+vm1.1.3, где копать?
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 22.09.2012 14:17
VM 1.1.3 - старовато! Дайте ссылку на сайт!
Ответить | Ответить с цитатой | Цитировать
 
 
# Вячеслав 29.09.2012 08:31
www.arni.lg.ua
Ответить | Ответить с цитатой | Цитировать
 
 
# Вячеслав 29.09.2012 08:37
не знаю зачем вам ссылка на сайт, пробую все на локалке
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 29.09.2012 18:08
Логично
Ответить | Ответить с цитатой | Цитировать
 
 
# Руслан 30.09.2012 06:05
Подскажите, в чем может быть проблема:
При добавлении
'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 - в админке вместо списка производителей выводится пустая страница.
Ответить | Ответить с цитатой | Цитировать
 
 
# Руслан 30.09.2012 06:11
Хотя решил не ломать голову а добавить мета через phpmyadmin. Спасибо, работает!
Ответить | Ответить с цитатой | Цитировать
 
 
# Евгений 26.12.2012 02:17
Спасибо ! А не кто не знает Мета данные VirtueMart 1,1,7 для товаров и категорий как сделать ? Спасибо!
Ответить | Ответить с цитатой | Цитировать
 
 
# Илья 22.01.2013 07:44
Спасибо большое Премного благодарен за развернутое решение. Все работает.
Ответить | Ответить с цитатой | Цитировать
 
 
# Roket007 22.01.2013 08:45
Обращайтесь!
Ответить | Ответить с цитатой | Цитировать
 
 
# Сергей 26.01.2014 13:27
Добрый день!

Когда-то я просил вас написать пост по этой теме...в принципе вы за меня его и написали...большое спасибо.

Сейчас вопрос немного не по теме - но и по теме..нигде не могу найти решение.

Я хочу вставить описание производителя и вывести его на странице товаров этого производителя. На данный момент текст в описание вставляю, но он не отображается. В чем может быть проблема? Подскажите пожалуйста. Joomla 1.5, virtuemart 1.19. Большое спасибо...жду от вас помощи!
Ответить | Ответить с цитатой | Цитировать
 
 
# Serhyi 18.02.2014 12:57
Походу автор бросил блог...много новых комментов без ответов...жалко, всегда его статьи были в помощь
Ответить | Ответить с цитатой | Цитировать
 
 
# twins 13.07.2014 18:31
Идеальное решение, автор скажите есть ли у вас статья такого же решений только доя virtuemart 2.0 ?
Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий


Защитный код
Обновить

 

Сторонние

Модуль новостей для Joomla - JU News Ultra
14.11.2011 |  9008
Модуль вывода новостей JU News Ultra - еще один способ...

Новости

Безопасность смартфона — пин-код с текущим временем, Screen Lock – Time Password
IT мир
20.10.2014 |  1157
Любой владелец смартфона всегда с опаской вводит пин-код разблокировки, ведь...
Alien: Isolation — прими участие в фильме «Чужой»
IT мир
20.10.2014 |  1026
Creative Assembly можно поздравить, впрочем, как и геймеров. Игра Alien:...
Серия «кожаных» ноутбуков от Samsung продолжается: Chromebook 2 с пассивным охлаждением
IT мир
20.10.2014 |  941
Samsung продолжило серию «одетых в кожу» ноутбуков. Новая модификация Chromebook...
3D-принтер iBox Nano — компактность, доступность и долговечность
IT мир
20.10.2014 |  1029
Громоздкие и дорогие 3D-принтеры слишком медленно распространяются. Для популяризации 3D-печати...