Автогенерация мета-тегов через шаблоны для категорий и товаров в VirtueMart 3.x

Часто требуется для интернет-магазинов и каталогов, особенно когда у них  очень много товаров, сформировать мета-теги по шаблону для всех категорий и товаров.

Для Joomla 3.x и VirtueMart 3.x предлагаю следующее решение:

Добавляем в \administrator\components\com_virtuemart\views\config\tmpl\default_sef.php

echo VmHTML::row('checkbox','Обновить мета-теги категорий','seo_meta_cat',VmConfig::get('seo_meta_cat',0));
echo VmHTML::row('input','Шаблон Title для Категории','seo_title_cat', VmConfig::get('seo_title_cat', '{category}'));
echo VmHTML::row('input','Шаблон Description для Категории','seo_description_cat', VmConfig::get('seo_description_cat', '{category}'));
echo VmHTML::row('checkbox','Обновить мета-теги товаров','seo_meta_prod',VmConfig::get('seo_meta_prod',0));
echo VmHTML::row('input','Шаблон Title для Товара','seo_title_prod', VmConfig::get('seo_title_prod', '{product}'));
echo VmHTML::row('input','Шаблон Description для Товара','seo_description_prod', VmConfig::get('seo_description_prod', '{product}'));


Файл classes.php размещаем по пути \administrator\components\com_virtuemart\controllers\classes.php
со следующим содержанием:

<?php
require_once('../configuration.php');
class Meta extends JConfig {
   function updateProducts($title,$description,$seo_meta) {
      if ($seo_meta == 1) {
         $link = mysqli_connect($this->host, $this->user, $this->password, $this->db) or die(mysqli_connect_error());
         $query = mysqli_query($link, "SET NAMES 'utf8'") or die(mysqli_error($link));
         $sql = "SELECT virtuemart_product_id, product_name FROM " . $this->dbprefix . "virtuemart_products_ru_ru";
         $query = mysqli_query($link, $sql) or die(mysqli_error($link));
         while ($data = mysqli_fetch_assoc($query)) {
            // Подставляем название товара в наш шаблон
            $title = str_replace('{product}', mysqli_real_escape_string($link, $data['product_name']), mysqli_real_escape_string($link, $title));
            $description = str_replace('{product}', mysqli_real_escape_string($link, $data['product_name']), mysqli_real_escape_string($link, $description));
            // Финальный запрос для вставки мета-информации в базу
            $sql = "UPDATE " . $this->dbprefix . "virtuemart_products_ru_ru SET customtitle='$title', metadesc='$description' WHERE virtuemart_product_id='$data[virtuemart_product_id]'";
            $q = mysqli_query($link, $sql) or die(mysqli_error($link));
         }
         mysqli_free_result($query);
         mysqli_close($link);
      }
   }

   function updateCategories($title,$description,$seo_meta) {
      if ($seo_meta == 1) {
         //print_r($title);
         //exit;
         $link = mysqli_connect($this->host, $this->user, $this->password, $this->db) or die(mysqli_connect_error());
         $query = mysqli_query($link, "SET NAMES 'utf8'") or die(mysqli_error($link));
         $sql = "SELECT virtuemart_category_id, category_name FROM " . $this->dbprefix . "virtuemart_categories_ru_ru";
         $query = mysqli_query($link, $sql) or die(mysqli_error($link));
         while ($data = mysqli_fetch_assoc($query)) {
            // Подставляем название категории в наш шаблон
            $title = str_replace('{category}', mysqli_real_escape_string($link, $data['category_name']), mysqli_real_escape_string($link, $title));
            $description = str_replace('{category}', mysqli_real_escape_string($link, $data['category_name']), mysqli_real_escape_string($link, $description));
            // Финальный запрос для вставки мета-информации в базу
            $sql = "UPDATE " . $this->dbprefix . "virtuemart_categories_ru_ru SET customtitle='$title', metadesc='$description' WHERE virtuemart_category_id='$data[virtuemart_category_id]'";
            $q = mysqli_query($link, $sql) or die(mysqli_error($link));
         }
         mysqli_free_result($query);
         mysqli_close($link);
      }
   }
}

В файл \administrator\components\com_virtuemart\controllers\config.php добавляем строки в функцию function save($data = 0):
 
$meta = new Meta();

$meta->updateProducts($data['seo_title_prod'],$data['seo_description_prod'],$data['seo_meta_prod']);

$meta->updateCategories($data['seo_title_cat'],$data['seo_description_cat'],$data['seo_meta_cat']);


После проделанных действий на в настройках VirtueMart 3.x на вкладке SEO появятся строки для прописания шаблонов и чекбоксы для разрешения обновления мета-тегов.

 

Комментарии

Популярные сообщения из этого блога

QuickForm для Джумла - как убрать ссылку

Конвертер валют НБРБ для VirtueMart 2.6