Управление категориями товаров

Стандартные шаблоны партнерских магазинов PowerPartners.ru задают и позволяют оперировать лишь с ограниченным набором категорий товаров, единым для всех партнерских магазинов. Однако, зачастую, возникает необходимость создать свои категории, распределив по ним товары в соответствии с некоторыми правилами.

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

Определение стандартных категорий в партнерских магазинах

Стандартные категории товаров определяются хэш-массивом $nav в файле base_cat.php. Массив определяется следующим образом:

$nav = array(
    'stab' => array(
        'xpath' => "//product[category='Стабилизатор напряжения']",
        'caption' => "Стабилизаторы напряжения",
        'title' => "Стабилизаторы напряжения | Интернет магазин электрооборудования",
        'keywords' => "стабилизатор напряжения",
        'description' => ""
     ),
     ....
);

Каждый элемент этого массива задает категорию товаров. В качестве ключа выступает код категории, который используется как параметр при обращении к скрипту cat.php?cat=xxx, отображающему список товаров из заданной категории.

Значением каждого элемента массива $nav является вложенный хэш-массив, в состав которого входят обязательные элементы (xpath), рекомендуемые (caption, title, keywords, description), а так же элементы, произвольно определяемые веб-мастером и участвующие в формировании страницы категории.

Обязательный элемент xpath определяет для данной категории XPath-запрос, при помощи которого осуществляется выборка товаров данной категории из XML-файла.

Остальные элементы массива не являются обязательными, и служат лишь для передачи переменных в шаблон страницы категории. Однако, все шаблоны партнерских магазинов используют переменные caption, title, keywords и description при формирования страницы категории, для отображения текста h1, заголовка страницы, meta-тега ключевых слов и meta-тега описания соответственно. Поэтому, в случае использования стандартных шаблонов, крайне желательно корректно определять эти элементы.

Переопределение категорий

Переопределение категорий товаров осуществляется путем изменения массива $nav. Переопределение должно осуществляться в файле /custom/custom_cat.php, поскольку изменения оригинального файла cat.php могут быть затерты системой автоматического обновления. Скрипт /custom/custom_cat.php вызывается, при условии существования файла, после стандартного заполнения массива категорий $nav, но, перед его использованием и позволяет переопределить массив категорий.

Разберем практический пример, допустим, мы хотим сделать следующие категории товаров на партнерском сайте:

  • Стабилизаторы напряжения Sassin SVC
    • Однофазные стабилизаторы Sassin SVC
    • Трехфазные стабилизаторы Sassin SVC
  • Стабилизаторы Sassin РСН
    • Однофазные стабилизаторы Sassin РСН
    • Трехфазные стабилизаторы Sassin РСН

Полностью исключив из ассортимента стабилизаторы напряжения Энергия и бензогенераторы Etalon. Плюс к этому мы хотим снабдить каждую категорию некоторым описанием, которое будет выводится на странице вместе с товарами этой категории.

Для этого, создаем в каталоге /custom/ файл custom_cat.php следующего содержания:

<?php

  $nav['svc'] = array(
        'xpath' => "//product[category='Стабилизатор напряжения' and trademark='Sassin' and type=1]",
        'caption' => "Стабилизаторы напряжения Sassin SVC",
        'title' => "Стабилизаторы напряжения Sassin SVC",
        'keywords' => "стабилизатор напряжения Sassin SVC",
        'description' => "список стабилизаторов напряжения Sassin SVC",
        'text' => "Сопроводительный текст с стабилизаторам Sassin SVC",
       );

  $nav['svc1'] = array(
        'xpath' => "//product[category='Стабилизатор напряжения' and trademark='Sassin' and type=1 and phases=1]",
        'caption' => "Однофазные стабилизаторы напряжения Sassin SVC",
        'title' => "Однофазные стабилизаторы напряжения Sassin SVC",
        'keywords' => "однофазный стабилизатор напряжения Sassin SVC",
        'description' => "список однофазных стабилизаторов напряжения Sassin SVC",
        'text' => "Сопроводительный текст с однофазным стабилизаторам Sassin SVC",
       );

  $nav['svc3'] = array(
        'xpath' => "//product[category='Стабилизатор напряжения' and trademark='Sassin' and type=1 and phases=3]",
        'caption' => "Трехфазные стабилизаторы напряжения Sassin SVC",
        'title' => "Трехфазные стабилизаторы напряжения Sassin SVC",
        'keywords' => "трехфазный стабилизатор напряжения Sassin SVC",
        'description' => "список трехфазных стабилизаторов напряжения Sassin SVC",
        'text' => "Сопроводительный текст с трехфазным стабилизаторам Sassin SVC",
       );

  $nav['rsn'] = array(
        'xpath' => "//product[category='Стабилизатор напряжения' and trademark='Sassin' and type=2]",
        'caption' => "Релейные стабилизаторы Sassin РСН",
        'title' => "Релейные стабилизаторы Sassin РСН",
        'keywords' => "стабилизатор напряжения Sassin РСН",
        'description' => "список релейных стабилизаторов Sassin РСН",
        'text' => "Сопроводительный текст с релейным стабилизаторам Sassin РСН",
       );

  $nav['rsn1'] = array(
        'xpath' => "//product[category='Стабилизатор напряжения' and trademark='Sassin' and type=2 and phases=1]",
        'caption' => "Релейные однофазные стабилизаторы Sassin РСН",
        'title' => "Релейные однофазные стабилизаторы Sassin РСН",
        'keywords' => "однофазный стабилизатор напряжения Sassin РСН",
        'description' => "список однофазных релейных стабилизаторов Sassin РСН",
        'text' => "Сопроводительный текст с однофазным релейным стабилизаторам Sassin РСН",
       );

  $nav['rsn3'] = array(
        'xpath' => "//product[category='Стабилизатор напряжения' and trademark='Sassin' and type=2 and phases=3]",
        'caption' => "Трехфазные релейные стабилизаторы Sassin РСН",
        'title' => "Трехфазные релейные стабилизаторы Sassin РСН",
        'keywords' => "трехфазный релейный стабилизатор Sassin РСН",
        'description' => "список трехфазных релейных стабилизаторов Sassin РСН",
        'text' => "Сопроводительный текст с трехфазным релейным стабилизаторам Sassin РСН",
       );

Таким образом, мы переопределили категории товаров партнерского магазина, создав новые категории с кодами svc, svc1, svc3, rsn, rsn1 и rsn3. Теперь, обращение по URL http://mysite.ru/cat.php?cat=rsn1 отобразится список однофазных релейных стабилизаторов напряжения Sassin РСН.

При построении XPath запросов мы дополнительно задействовали в условиях узлы trademark и type XML-файла товаров.

Теперь, для того чтобы включить новые категории в навигацию сайта, необходимо внести изменения в шаблоны магазина. Для этого, в нужный .tmpl-файл каталога /theme/ (обычно, меню навигации по категориям расположено в шаблоне header.tmpl) добавляем следующий HTML-код:

<h3>Продукция</h3>
<ul>
  <li>
    <a href="cat.php?cat=svc">Стабилизаторы напряжения Sassin SVC</a>
    <ul>
      <li><a href="cat.php?cat=svc1">Однофазные стабилизаторы Sassin SVC</a></li>
      <li><a href="cat.php?cat=svc3">Трехфазные стабилизаторы Sassin SVC</a></li>
    </ul>
  </li>
  <li>
    <a href="cat.php?cat=rsn">Стабилизаторы напряжения Sassin РСН</a>
    <ul>
      <li><a href="cat.php?cat=rsn1">Однофазные стабилизаторы Sassin РСН</a></li>
      <li><a href="cat.php?cat=rsn3">Трехфазные стабилизаторы Sassin РСН</a></li>
    </ul>
  </li>
</ul>

Кроме того, для каждой категории, мы задали небольшой сопроводительный текст в параметре text, для его отображения необходимо внести изменения в шаблон отображения категории товаров /theme/cat.tmpl. Добавляем в нужное место шаблона строку

<TMPL_VAR NAME="text">

которая отображает переменную text определенную для каждой категории в массиве $nav.

Также существует возможность вставки на страницы категорий html-блоков. Для этого, html-код помещается в файлы в каталоге /custom/cat/, и их названия, указывается в специальном параметре include с указанием идентификаторов html-блоков. Например, так:

  $nav['stab'] = array(
    'xpath' => "//product[category='Стабилизатор напряжения']",
    'caption' => "Стабилизаторы напряжения",
    'title' => "Стабилизаторы напряжения | Интернет магазин электрооборудования",
    'keywords' => "стабилизатор напряжения",
    'description' => "",
    'include' => array(
      'html_block_header' => 'stabs_header.htm',
      'html_block_footer' => 'stabs_footer.htm',
    ),
  );

В этом примере определены 2 html-блока с идентификаторами html_block_header и html_block_footer, и указано, что для категории stab, содержимое блоков следует брать из файлов stabs_header.htm и stabs_footer.htm соответственно.

Теперь в шаблон /theme/cat.tmpl в нужные места необходимо вставить тэги

<TMPL_VAR NAME="html_block_header">

и

<TMPL_VAR NAME="html_block_footer">

для отображения html-блоков.


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