Маска для meta тегов товаров и категорий в OpenCart


Для лучшей SEO оптимизации товаров и их категорий иногда нужно сделать просто маску, чтобы сразу у всего было прописано хоть что-то на старте продвижения, а потом уже продвигать какой-то конкретный товар или категорию, меная теги под запросы. Ниже описан метод, как быстро сделать маску под товары и категории.

Данный способ протестирован на версии OpenCart 2.3.0.2. Работа на других версиях не гарантируется на 100% и возможно потребует доработок. 
Все изменения в данном примере будут происходить путём написания модуля стандартным механизмом ocmod. Вы можете делать все изменения прямо в файлах движка, тут как вам удобнее.

Создаём файл модуля, как пример будет meta_teg_mask.ocmod.xml, который будет расположен в папке /system/. Именно в данном файле будем производить все изменения движка.

<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Маска meta тегов для категорий и товаров</name>
<code>Маска meta тегов для категорий и товаров</code>
<version>2.3.0.2</version>
<date>15.03.2018</date>
<author>Bobroed</author>
<link>https://bobroed.ru</link>


</modification>

1. Следует создать специальные поля в админке, в которые мы и будем прописывать нашу маску.

<file path="admin/language/ru-ru/setting/setting.php">
    <operation>
        <search>
        <![CDATA[
            $_['entry_comment']                = 'Дополнительная информация';
		]]>      
        </search>
		<add position="after">
        <![CDATA[
            $_['entry_mask_meta_title_category']       = 'Маска title у категорий';
            $_['entry_mask_meta_description_category'] = 'Маска description у категорий';
            $_['entry_mask_meta_keyword_category']     = 'Маска keyword у категорий';

            $_['entry_mask_meta_title_product']        = 'Маска title у товара';
            $_['entry_mask_meta_description_product']  = 'Маска description у товара';
            $_['entry_mask_meta_keyword_product']      = 'Маска keyword у товара';
		]]>      
        </add>
    </operation>
</file>

<file path="admin/controller/setting/setting.php">
    <operation>
        <search>
        <![CDATA[
            $data['entry_comment'] = $this->language->get('entry_comment');
		]]>      
        </search>
		<add position="after">
        <![CDATA[
            $data['entry_mask_meta_title_category']       = $this->language->get('entry_mask_meta_title_category');
            $data['entry_mask_meta_description_category'] = $this->language->get('entry_mask_meta_description_category');
            $data['entry_mask_meta_keyword_category']     = $this->language->get('entry_mask_meta_keyword_category');

            $data['entry_mask_meta_title_product']        = $this->language->get('entry_mask_meta_title_product');
            $data['entry_mask_meta_description_product']  = $this->language->get('entry_mask_meta_description_product');
            $data['entry_mask_meta_keyword_product']      = $this->language->get('entry_mask_meta_keyword_product');
		]]>      
        </add>
    </operation>

    <operation>
        <search>
        <![CDATA[
            if (isset($this->request->post['config_comment'])) {
		]]>      
        </search>
		<add position="before">
        <![CDATA[
            if(isset($this->request->post['config_mask_meta_title_category'])){
    			$data['config_mask_meta_title_category'] = $this->request->post['config_mask_meta_title_category'];
    		}else{
    			$data['config_mask_meta_title_category'] = $this->config->get('config_mask_meta_title_category');
    		}

            if(isset($this->request->post['config_mask_meta_description_category'])){
    			$data['config_mask_meta_description_category'] = $this->request->post['config_mask_meta_description_category'];
    		}else{
    			$data['config_mask_meta_description_category'] = $this->config->get('config_mask_meta_description_category');
    		}

            if(isset($this->request->post['config_mask_meta_keyword_category'])){
    			$data['config_mask_meta_keyword_category'] = $this->request->post['config_mask_meta_keyword_category'];
    		}else{
    			$data['config_mask_meta_keyword_category'] = $this->config->get('config_mask_meta_keyword_category');
    		}

            if(isset($this->request->post['config_mask_meta_title_product'])){
    			$data['config_mask_meta_title_product'] = $this->request->post['config_mask_meta_title_product'];
    		}else{
    			$data['config_mask_meta_title_product'] = $this->config->get('config_mask_meta_title_product');
    		}

            if(isset($this->request->post['config_mask_meta_description_product'])){
                $data['config_mask_meta_description_product'] = $this->request->post['config_mask_meta_description_product'];
            }else{
                $data['config_mask_meta_description_product'] = $this->config->get('config_mask_meta_description_product');
            }

            if(isset($this->request->post['config_mask_meta_keyword_product'])){
                $data['config_mask_meta_keyword_product'] = $this->request->post['config_mask_meta_keyword_product'];
            }else{
                $data['config_mask_meta_keyword_product'] = $this->config->get('config_mask_meta_keyword_product');
            }
		]]>      
        </add>
    </operation>
</file>

<file path="admin/view/template/setting/setting.tpl">
    <operation>
        <search>
        <![CDATA[
            <textarea name="config_comment" rows="5" placeholder="<?php echo $entry_comment; ?>" id="input-comment" class="form-control"><?php echo $config_comment; ?></textarea>
		]]>      
        </search>
		<add position="after" offset="2">
        <![CDATA[
            <div class="form-group">
              <label class="col-sm-2 control-label" for="input-mask_meta_title_category"><?php echo $entry_mask_meta_title_category; ?></label>
              <div class="col-sm-10">
                <textarea name="config_mask_meta_title_category" rows="5" placeholder="<?php echo $entry_mask_meta_title_category; ?>" id="input-mask_meta_title_category" class="form-control"><?php echo $config_mask_meta_title_category; ?></textarea>
              </div>
            </div>
            <div class="form-group">
              <label class="col-sm-2 control-label" for="input-mask_meta_description_category"><?php echo $entry_mask_meta_description_category; ?></label>
              <div class="col-sm-10">
                <textarea name="config_mask_meta_description_category" rows="5" placeholder="<?php echo $entry_mask_meta_description_category; ?>" id="input-mask_meta_description_category" class="form-control"><?php echo $config_mask_meta_description_category; ?></textarea>
              </div>
            </div>
            <div class="form-group">
              <label class="col-sm-2 control-label" for="input-mask_meta_keyword_category"><?php echo $entry_mask_meta_keyword_category; ?></label>
              <div class="col-sm-10">
                <textarea name="config_mask_meta_keyword_category" rows="5" placeholder="<?php echo $entry_mask_meta_keyword_category; ?>" id="input-mask_meta_keyword_category" class="form-control"><?php echo $config_mask_meta_keyword_category; ?></textarea>
              </div>
            </div>
            
            <div class="form-group">
              <label class="col-sm-2 control-label" for="input-mask_meta_title_product"><?php echo $entry_mask_meta_title_product; ?></label>
              <div class="col-sm-10">
                <textarea name="config_mask_meta_title_product" rows="5" placeholder="<?php echo $entry_mask_meta_title_product; ?>" id="input-mask_meta_title_product" class="form-control"><?php echo $config_mask_meta_title_product; ?></textarea>
              </div>
            </div>
            <div class="form-group">
              <label class="col-sm-2 control-label" for="input-mask_meta_description_product"><?php echo $entry_mask_meta_description_product; ?></label>
              <div class="col-sm-10">
                <textarea name="config_mask_meta_description_product" rows="5" placeholder="<?php echo $entry_mask_meta_description_product; ?>" id="input-mask_meta_description_product" class="form-control"><?php echo $config_mask_meta_description_product; ?></textarea>
              </div>
            </div>
            <div class="form-group">
              <label class="col-sm-2 control-label" for="input-mask_meta_keyword_product"><?php echo $entry_mask_meta_keyword_product; ?></label>
              <div class="col-sm-10">
                <textarea name="config_mask_meta_keyword_product" rows="5" placeholder="<?php echo $entry_mask_meta_keyword_product; ?>" id="input-mask_meta_keyword_product" class="form-control"><?php echo $config_mask_meta_keyword_product; ?></textarea>
              </div>
            </div>
		]]>      
        </add>
    </operation>
</file>

В языковом файле страницы настроек setting.php, расположенном по пути «admin/language/ru-ru/setting/setting.php» добавляем название будущих полей под теги.
В контроллере страницы настроек setting.php,  расположенном по пути «admin/controller/setting/setting.php» определяем языковые переменные и программируем инициализацию и присвоение значения полям при сохранении. 
В файле визуального представления страницы настроек setting.tpl, расположенном по пути «admin/view/template/setting/setting.tpl» программируем вывод полей.

В итоге в настройках, во вкладке «Магазин», должны появится созданные поля, которые, впоследствии, будем использовать под хранение маски meta тегов.

2. Теперь надо в контроллере шапки сайта прописать присвоение маски для категорий и товаров.

<file path="catalog/controller/common/header.php">
    <operation>
        <search>
        <![CDATA[
            $data['name'] = $this->config->get('config_name');
		]]>      
        </search>
		<add position="after">
        <![CDATA[
            if(isset($this->request->get['route']) && $this->request->get['route']=='product/category'){
				$this->load->model('catalog/category');
				$parts = explode('_', (string)$this->request->get['path']);
				$total=count($parts);
				$category_info=$this->model_catalog_category->getCategory($parts[$total-1]);

				if($this->document->getTitle()==$category_info["name"]){
					$config_mask_meta_title_category = $this->config->get('config_mask_meta_title_category');

					if($config_mask_meta_title_category!=''){
						$config_mask_meta_title_category = str_replace("%h1%", $category_info["name"], $config_mask_meta_title_category);

						$data['title'] = $config_mask_meta_title_category;
					}
				}

				if($this->document->getDescription()==''){
					$config_mask_meta_description_category = $this->config->get('config_mask_meta_description_category');

					if($config_mask_meta_description_category!=''){
						$config_mask_meta_description_category = str_replace("%h1%", $category_info["name"], $config_mask_meta_description_category);

						$data['description'] = $config_mask_meta_description_category;
					}
				}

				if($this->document->getKeywords()==''){
					$config_mask_meta_keyword_category = $this->config->get('config_mask_meta_keyword_category');

					if($config_mask_meta_keyword_category!=''){
						$config_mask_meta_keyword_category = str_replace("%h1%", $category_info["name"], $config_mask_meta_keyword_category);

						$data['keywords'] = $config_mask_meta_keyword_category;
					}
				}
	        }

	        if(isset($this->request->get['route']) && $this->request->get['route']=='product/product'){
	        	$this->load->model('catalog/product');
	        	$product_info=$this->model_catalog_product->getProduct($this->request->get['product_id']);
	        	$temp_title=$this->document->getTitle();
				if($product_info["name"]==$temp_title){
					$config_mask_meta_title_product = $this->config->get('config_mask_meta_title_product');

					if($config_mask_meta_title_product!=''){
						$config_mask_meta_title_product = str_replace("%h1%", $product_info["name"], $config_mask_meta_title_product);

						$data['title'] = $config_mask_meta_title_product;
					}
				}
				
				if($this->document->getDescription()==''){
					$config_mask_meta_description_product = $this->config->get('config_mask_meta_description_product');

					if($config_mask_meta_description_product!=''){
						$config_mask_meta_description_product = str_replace("%h1%", $product_info["name"], $config_mask_meta_description_product);

						$data['description'] = $config_mask_meta_description_product;
					}
				}
				
				if($this->document->getKeywords()==''){
					$config_mask_meta_keyword_product = $this->config->get('config_mask_meta_keyword_product');

					if($config_mask_meta_keyword_product!=''){
						$config_mask_meta_keyword_product = str_replace("%h1%", $product_info["name"], $config_mask_meta_keyword_product);

						$data['keywords'] = $config_mask_meta_keyword_product;
					}
				}
			}
		]]>      
        </add>
    </operation>
</file>

В контроллере шапки сайта header.php,  расположенном по пути «catalog/controller/common/header.php», вносим определение meta тегов. 
В блоках 
if(isset($this->request->get[‘route’]) && $this->request->get[‘route’]==’product/category’)
if(isset($this->request->get[‘route’]) && $this->request->get[‘route’] ==’product/product’)
определяем, какая страница открыта — страница категории или товара.

Затем для для каждого meta тега мы определяем, если он не заполнен в админке, вместо него подставляем маску. Если заполнен, идёт тот, что в админке.
С title ситуация немного другая. Он заполняется всегда, при создании товара или категории. По этому, сначала делаем проверку, одинаковый ли title и название категории/товара, и если одинаковый, ставим мамку.
В качестве заменителя слова в маске на название товара/категории в данном примере используется %h1%
$config_mask_meta_title_product = str_replace(«%h1%», $product_info[«name»], $config_mask_meta_title_product);
вы можете использовать свой.

Вот в принципе и всё, результат будет таким

Скачать итоговый файл модуля.


Для связи

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

Или написать прямо на почту info@bobreod.ru





Отправляя форму, вы соглашаетесь с нашей политикой конфиденциальности