Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Шаблонизация мета тегов Title и Description для товаров


Recommended Posts

Небольшая доработка позволяющая добавить возможность не заполняя мета теги Title и Description для товаров выводить их по шаблону определяемому в категории. Делалось для версии 1.5.3.2.

Доступные ключи: [title], [price], [category] - название товара, цена и категория, к которой он привязан.

 

Приоритетность вывода тега Title и Description (кроме 4 пункта):

1. Из товара

2. Из категории к которой привязан товар

3. Из родительской категории (т.е. категории более высокого уровня)

4. Использование в качестве Title названия товара

 

 

Открываем в php MyAdmin БД сайта и выполняем запрос:

ALTER TABLE `oc_category_description` ADD `product_seo_title` VARCHAR(256) NOT NULL;
ALTER TABLE `oc_category_description` ADD `product_seo_description` VARCHAR(512) NOT NULL

В файле admin/view/template/catalog/category_form.tpl

 

Перед:

<tr>
  <td><?php echo $entry_seo_h1; ?></td>
  <td><input type="text" name="category_description[<?php echo $language['language_id']; ?>][seo_h1]" maxlength="255" size="100" value="<?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['seo_h1'] : ''; ?>" /></td>
</tr>

Добавляем:

<tr>
  <td><?php echo $entry_product_seo_title; ?></td>
  <td><input type="text" name="category_description[<?php echo $language['language_id']; ?>][product_seo_title]" maxlength="255" size="100" value="<?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['product_seo_title'] : ''; ?>" /></td>
</tr>
<tr>
  <td><?php echo $entry_product_seo_description; ?></td>
  <td><textarea name="category_description[<?php echo $language['language_id']; ?>][product_seo_description]" cols="97" rows="5"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['product_seo_description'] : ''; ?></textarea>
</tr>

В файле admin/model/catalog.php

 

В двух местах вместо:

foreach ($data['category_description'] as $language_id => $value) {
            $this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'");
        }

Добавляем:

        foreach ($data['category_description'] as $language_id => $value) {
            $this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', product_seo_title = '" . $this->db->escape($value['product_seo_title']) . "', product_seo_description = '" . $this->db->escape($value['product_seo_description']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'");
        }

Или, если этот код у Вас отличается, просто добавляем в него:

product_seo_title = '" . $this->db->escape($value['product_seo_title']) . "', product_seo_description = '" . $this->db->escape($value['product_seo_description']). "',

Далее, после:

        foreach ($query->rows as $result) {
            $category_description_data[$result['language_id']] = array(
                'name'             => $result['name'],

Добавляем:

                'product_seo_title'        => $result['product_seo_title'],
                'product_seo_description'  => $result['product_seo_description'],

В файле admin/controller/catalog/category.php

 

После:

        $this->data['entry_seo_h1'] = $this->language->get('entry_seo_h1');

Добавляем:

        $this->data['entry_product_seo_title'] = $this->language->get('entry_product_seo_title');
        $this->data['entry_product_seo_description'] = $this->language->get('entry_product_seo_description');

В файле admin/language/russian/catalog/category.php

 

Добавляем:

$_['entry_product_seo_title']      = 'Meta Title товара:';
$_['entry_product_seo_description'] = 'Meta Description товара:';

В файле catalog/model/catalog/category.php

 

После:

    public function getCategories($parent_id = 0) {
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "'  AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)");

        return $query->rows;
    }

Добавляем:

    public function getCategoryParent($category_id) {
        $query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.parent_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.category_id = '" . (int)$category_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'");
        
        return $query->row;
    }

В файле catalog/controller/product/product.php

 

Удаляем:

            $this->document->setDescription($product_info['meta_description']);

Вместо:

            if ($product_info['seo_title']) {
                $this->document->setTitle($product_info['seo_title']);
            } else {
                $this->document->setTitle($product_info['name']);
            }

Добавляем:

            $product_title = $product_info['name'];
            $product_price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
            $product_category = $category_info['name'];

            $parent_category = $this->model_catalog_category->getCategoryParent($category_id);
            $p_product_seo_title = $category_info['product_seo_title'];
            $p_product_seo_title = $parent_category['product_seo_title'];

            $product_seo_title = $category_info['product_seo_title'];

            $seo_old = array("[title]", "[price]", "[category]");
            $seo_new   = array("$product_title", "$product_price", "$product_category");

            $p_product_seo_title = str_replace($seo_old, $seo_new, $p_product_seo_title);
            $product_seo_title = str_replace($seo_old, $seo_new, $product_seo_title);

            if ($product_info['seo_title']) {
                $this->document->setTitle($product_info['seo_title']);
            } else if ($category_info['product_seo_title']) {
                $this->document->setTitle($product_seo_title);
            } else if ($parent_category['product_seo_title']) {
                $this->document->setTitle($p_product_seo_title);
            } else {
                $this->document->setTitle($product_info['name']);
            }
            
            if ($product_info['seo_h1']) {    
                $this->data['heading_title'] = $product_info['seo_h1'];
                } else {
                $this->data['heading_title'] = $product_info['name'];
                }
            if ($product_info['meta_description']) {
                $this->document->setDescription($product_info['meta_description']);
            } else if($category_info['product_seo_description']) {
                $product_seo_description = $category_info['product_seo_description'];
                $product_seo_description = str_replace($seo_old, $seo_new, $product_seo_description);
                $this->document->setDescription($product_seo_description);
            } else if($parent_category['product_seo_description']) {
                $p_product_seo_description = $parent_category['product_seo_description'];
                $p_product_seo_description = str_replace($seo_old, $seo_new, $p_product_seo_description);
                $this->document->setDescription($p_product_seo_description);
            }
Змінено користувачем elscept
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.