Доработка статей и модуля информации для seo продвижения.

За основу, для доработки статей, мы возьмем наиболее популярный и перспективный cms движок для интернет магазинов - OPENCART. Для лучшей совместимости сделаем доработку для стабильной версии 2.0.1.X .

В opencart для написания статей, размещения статей, html блоков используются следующие ресурсы

  1. класс контроллера админки - information (написание статей)
  2. класс контроллера каталога  модуль  - HTML (вывода блоков HTML)
  3. класс контроллера каталога модуль - information (вывод блока статей)
 Модуль контроллера каталога information мы не будем дорабатывать. В этом нет необходимости. Для вывода статей используем доработанный модуль контроллера каталога HTML

ВАЖНО!

Перед внесением изменений необходимо 1) сохранить базу! 2) сохранить (переименовать) изменяемые файлы

Рекомендации:

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

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

 Доработка модуля вывода информации  -  HTML

1) предварительная доработка для стилевого оформления модулей html

Кроме вывода статей, модулю необходимо придать некоторую дополнительную функциональность, которой ему не хватает при выводе блоков HTML. В первую очередь это дополнение каждого блока модуля уникальным классом css для всего блока модуля. Отсутствие такой возможности сильно затрудняет SEO оптимизацию сайта. 

Добавим в начале класса модуля:

$data['module_name'] = $setting['name']; 

В шаблоне модуля заменим первую строку:

<div class="m-html <?php echo $module_name; ?>">

После этих доработок у нас появляется возможность определить стили как для всех html блоков модуля, так и для каждого модуля отдельно, используя второй класс = имя модуля.   

2) основная доработка для вывода статей

На будущее мы используем сам html код  чтобы шаблонизировать вывод статей, создать виджеты для упрощенного редактирования шаблона.  На данном этапе это нам не понадобится, но мы создадим саму функциональность.

Добавим в код контроллера (приводится код контроллера полностью):

<?php

class ControllerModuleHTML extends Controller {

public function index($setting) {

if (isset($setting['module_description'][$this->config->get('config_language_id')])) {

$data['module_name'] = $setting['name']; 

$data['heading_title'] = html_entity_decode($setting['module_description'][$this->config->get('config_language_id')]['title'], ENT_QUOTES, 'UTF-8');

$data['html'] = stripslashes(html_entity_decode($setting['module_description'][$this->config->get('config_language_id')]['description'], ENT_QUOTES, 'UTF-8'));

$data['includes'] = array();

//Проверим есть ли включения для статей

if (stripos($data['html'],"<!--start_articles-->") > 2) {

$massage_tmp = $data['html']; 

//первая половина шаблона

$data['start_articles']  = substr($massage_tmp,0,stripos($massage_tmp,"<!--start_articles-->"));

//вторая половина шаблона

$data['end_articles']  = substr($massage_tmp,stripos($massage_tmp,"<!--end_articles-->"));

//повторяемый шаблон

$data['center_articles']  = substr($massage_tmp,stripos($massage_tmp,"<!--start_articles-->"),stripos($massage_tmp,"<!--end_articles-->") - stripos($massage_tmp,"<!--start_articles-->"));

if (isset($this->request->get['path'])) {

$parts = explode('_', (string)$this->request->get['path']);

$category_id = (int)array_pop($parts);

} else {

$category_id = 999999;

}

$this->load->model('module/html'); 

$data['informations'] = array(); 

$results = $this->model_module_html->getInformations($category_id);

if (!$results) {return;}

foreach ($results as $result) {

$data['informations'][] = array(

'title' => $result['title'],

'href'  => $this->url->link('information/information', 'information_id=' . $result['information_id'])

);

$data['includes']['inc_articles'] = true; //вывод статей

}

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/html.tpl')) {

return $this->load->view($this->config->get('config_template') . '/template/module/html.tpl', $data);

} else {

return $this->load->view('default/template/module/html.tpl', $data);

}

}

}

}

В каталоге модели в модулях создадим класс html (файл html.php) (приводим код полностью):

<?php

class ModelModuleHtml extends Model {

public function getInformations($category_id) {

$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "information i LEFT JOIN " . DB_PREFIX . "information_description id ON (i.information_id = id.information_id) LEFT JOIN " . DB_PREFIX . "information_to_store i2s ON (i.information_id = i2s.information_id) LEFT JOIN " . DB_PREFIX . "information_to_category itc ON (i.information_id = itc.information_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1'  AND itc.category_id = '".$category_id."' ORDER BY i.sort_order, LCASE(id.title) ASC");

return $query->rows;

}

}

В код шаблона добавим (приводим код полностью):

<div class="m-html <?php echo $module_name; ?>">

  <h2><?php echo $heading_title; ?></h2>

   <?php if (!empty($includes['inc_articles'])) { ?>

  <?php echo $start_articles; ?>

    <ul class="nav nav-tabs nav-stacked">

        <?php foreach ($informations as $information) { ?>

            <li>

                <a href="<?php echo $information['href']; ?>"><?php echo $information['title']; ?></a>

            </li>

        <?php } ?>

    </ul>

<?php echo $end_articles; ?>

  <?php } else { ?>  

<?php echo $html; ?>

  <?php } ?>

</div> 

Доработка статей  - класс контроллера административной части information.php:

Данная доработка потребует изменения самого контроллера, шаблона формы information_form.tpl, модели information.php. Кроме того необходимо в базу добавить таблицу соответствия статьи и категории сайта.  

На данном этапе доработки мы добавим к статья возможность привязки статьи к категории сайта. В следующих статьях мы добавим анонсы и возможность привязки статей к другим статьям.  

Добавляем изменения доступны для скачивания .

Вы также можете обратиться за помощью или консультацией к нашим специалистам.