Автогенерация мета-тегов через шаблоны для категорий и товаров в 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 появятся строки для прописания шаблонов и чекбоксы для разрешения обновления мета-тегов.
Комментарии
Отправить комментарий