Создаём модуль для установщика

В данном разделе я покажу относительно простой пример, как создавать свои модули (CIP пакеты) для VamShop.

В качестве примера создадим новый бокс, по мотивам раздела Создаём новый бокс в VamShop, который мы рассматривали выше. Только теперь установка/удаление этого бокса, что мы создали в статье, будет проходит не "руками", как написано в статье, т.е. откройте файл, найдите, замените и т.д., а в автоматическом режиме через установщик модулей (Админка - Модули - Установка модулей), т.е. чтобы удалить (либо вновь добавить) этот бокс в магазин не придётся лазить по файлам, а всего-лишь нужно будет нажать кнопку установить/удалить в Админке - Модули - Установка модулей.

Начнём.

Итак, нам нужно создать новый бокс в магазине (в данном примере с icq консультантом), подробности описаны в статье http://vamshop.ru/forum/files (или в разделе Создаём новый бокс в VamShop)

Что мы делаем.

1. Смотрим статью - http://vamshop.ru/forum/files (или читаем раздел Создаём новый бокс в VamShop)

А именно раздел структура CIP пакета, там написано:

CIP_name/
CIP_name/install.xml

Создаём где-нибудь у себя папку my-first-cip

Внтури папки my-first-cip создём файл install.xml с таким содержимым:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<contrib>
    <description>
        <details contrib_ref="0" forum_ref="0" contrib_type="Боксы" status="0" last_update="2007-03-02"/>
        <comments>Мой первый CIP
        </comments>
        <credits>Автор: Я
        
Добавляем в интернет-магазин новый бокс.</credits>
    </description>

</contrib>

Вот так должен выглядеть простейший install.xml файл, в который мы добавили название нашего модуля (тэг comments) и описание модуля (тэг credits).

Текст должен быть обязательно в кодировке utf-8.

Все эти данные будут видны при установке модуля в Админке - Модули - Установка модулей.

Теперь нам нужно написать инструкции для установщика, что он должен делать при установке нашего CIP пакета.

Читая статью про создание бокса мы там видим, что нужно создать файл templates/vamshop/source/boxes/mybox.php. Также смотри в описание установщика, в раздел о структуре CIP пакета.

Файлы для каталога должны находиться в папке с CIP пакетом, в подкатегории catalog.

Значит создаём внутри нашей директории my-first-cip каталог catalog.

Затем внутри catalog создаём поддиректории templates/vamshop/source/boxes.

В папке my-first-cip/catalog/templates/vamshop/source/boxes создаём файл mybox.php с содержимым, которые описано в статье, т.е. mybox.php содержит следующий код:

<?php

// reset var
$box = new vamTemplate;
$box_content='';
$flag='';
$box->assign('tpl_path','templates/'.CURRENT_TEMPLATE.'/');

$box_content = MY_BOX_CONTENT;

if ($flag==true) define('SEARCH_ENGINE_FRIENDLY_URLS',true);
$box->assign('BOX_CONTENT', $box_content);

$box->caching = 0;
$box->assign('language', $_SESSION['language']);
$box_admin= $box->fetch(CURRENT_TEMPLATE.'/boxes/box_mybox.html');
$vamTemplate->assign('box_MYBOX',$box_admin);

?>

Собственно бокс мы создали.

Теперь вовзращаемся к нашему my-first-cip/install.xml файлу.

Нам нужно указать установщика, что он должен делать с этим файлом при установке CIP пакета в магазина.

Нам нужно добавить этот файл, а как следует из описания установщика, для этого есть тэг addcode.

Добавляем в наш install.xml после описания нашего модуля, т.е. после:

    </description>

Добавляем:

	<addfile>
		<file name="templates/vamshop/source/boxes/mybox.php" />
	</addfile>

Тем самым мы указываем, что установщик должен скопировать файл из папки с CIP модулем в интернет-магазин, а именно в templates/vamshop/source/boxes/mybox.php

Читаем дальше статью про создание бокса, дальше нам нужно добавить:

define('MY_BOX_CONTENT', 'Телефон: 123-56-78<br>ICQ: 123456');

в файл /lang/russian.php

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

Смотрим синтаксис тэга add2end в описании установищка, соответственно, добавляем в install.xml файл, после /addfilе, следующий код:

    <add2end>
        <file name="lang/russian/russian.php" />
        <add type="php">define('MY_BOX_CONTENT', 'Телефон: 123-56-78<br>ICQ: 123456');</add>
    </add2end>

Идём дальше, смотрим статью про создания бокса, дальше нам нужно создать файл templates/vamshop/boxes/box_mybox.html. Так как мы делаем CIP модуль, то нам нужно создать файл внутри папки с CIP модулем.

Создаём файл в папке с нашим CIP модулем, т.е. создаём файл my-first-cip/catalog/templates/vamshop/boxes/box_mybox.html со следующим содержимым (из статьи про создание бокса):

{config_load file="$language/lang_$language.conf" section="boxes"}
<table width="100%" border="0" cellpadding="2" cellspacing="0">
  <tr>
    <td class="infoBoxHeading_right"><table width="100%"  border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td class="infoBoxHeading_right">{#heading_mybox#}</td>
          <td>&nbsp;</td>
        </tr>
    </table></td>
  </tr>
  <tr>
    <td class="infoBox_right" align="left"><table width="95%"  border="0" cellpadding="2" cellspacing="0">
        <tr>
          <td class="boxText">{$BOX_CONTENT}</td>
        </tr>
    </table></td>
  </tr>
</table>

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

Возвращаемся к описанию установщика мы смотрим, что для создания файлов в магазине есть тэг addfile.

Значит аналогично, как мы выше добавляли через addfile файл mybox мы добавляем box_mybox.html, т.е. в install.xml добавляем следующий код:

	<addfile>
		<file name="templates/vamshop/boxes/box_mybox.html" />
	</addfile>

Читаем статью про создание бокса дальше.

Теперь нам нужно добавить новый код в файл lang/russian/lang_russian.conf.

Смотрим описание установщика, какой тэг нам для этого использовать. В установщике модуля для редактирования файлов есть тэг addcode.

Читаем синтаксис данного тэга. Нам нужно добавить:

heading_mybox = 'Мой первый бокс'
После:
[boxes]

В нашем случае в файл install.xml мы добавляем следующую запись:

   <addcode>
      <file name="lang/russian/lang_russian.conf" />
      <findlinenumbers start="1" end="1"/>
      <find>[boxes]</find>
      <add type="html">heading_mybox = 'Мой первый бокс'</add>
   </addcode>

Тем самым мы сообщаем установщику, что он должен при установке нашего CIP пакета в файле lang/russian/lang_russian.conf после:

[boxes]
Добавить:
heading_mybox = 'Мой первый бокс'

Смотрим статью про создание бокса дальше.

Теперь нам нужно подключить бокс, а именно, нам нужно добавить новый код в файл templates/vamshop/source/boxes.php, т.е. мы создаём CIP пакет, то мы никакие файлы в магазине не трогаем сами, а даём команды установщику в файле install.xml. Также как и выше, для добавления нового кода мы используем тэг addcode.

Нам нужно добавить в файл templates/vamshop/source/boxes.php:

  include(DIR_WS_BOXES . 'mybox.php');

После:

  define('DIR_WS_BOXES',DIR_FS_CATALOG .'templates/'.CURRENT_TEMPLATE. '/source/boxes/');

Записываем это в XML виде с помощью тэга addcode, т.е. добавляем в наш install.xml файл следующий код:

   <addcode>
      <file name="templates/vamshop/source/boxes.php" />
      <findlinenumbers start="1" end="1"/>
      <find>  define('DIR_WS_BOXES',DIR_FS_CATALOG .'templates/'.CURRENT_TEMPLATE. '/source/boxes/');
</find>
      <add type="php">  include(DIR_WS_BOXES . 'mybox.php');</add>
   </addcode>

Всё, мы указали установщику, что он должен сделать в файле templates/vamshop/source/boxes.php при установке нашего CIP пакета.

Идём дальше, смотрим статью про создание бокса.

Заключительный шаг, теперь нам нужно в файле templates/vamshop/index.html добавить метку нашего нового бокса:

{$box_MYBOX}

После:

{$box_CATEGORIES}

Возвращаемся в нашему install.xml файлу.

Всё точно также, для добавления нового кода в файлы используем тэг addcode, добавляем следующий код:

   <addcode>
      <file name="templates/vamshop/index.html" />
      <findlinenumbers start="1" end="1"/>
      <find>{$box_CATEGORIES}</find>
      <add type="html">{$box_MYBOX}</add>
   </addcode>

Вот и всё, мы закончили описание команд для установщика в файле install.xml.

В конечном итоге наш файл install.xml получился таким:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<contrib>
    <description>
        <details contrib_ref="0" forum_ref="0" contrib_type="Боксы" status="0" last_update="2007-03-02"/>
        <comments>Мой первый CIP
        </comments>
        <credits>Автор: Я
        
Добавляем в интернет-магазин новый бокс.</credits>
    </description>

	<addfile>
		<file name="templates/vamshop/source/boxes/mybox.php" />
	</addfile>

    <add2end>
        <file name="lang/russian/russian.php" />
        <add type="php">define('MY_BOX_CONTENT', 'Телефон: 123-56-78<br>ICQ: 123456');</add>
    </add2end>

	<addfile>
		<file name="templates/vamshop/boxes/box_mybox.html" />
	</addfile>

   <addcode>
      <file name="lang/russian/lang_russian.conf" />
      <findlinenumbers start="1" end="1"/>
      <find>[boxes]</find>
      <add type="html">heading_mybox = 'Мой первый бокс'</add>
   </addcode>

   <addcode>
      <file name="templates/vamshop/source/boxes.php" />
      <findlinenumbers start="1" end="1"/>
      <find>  define('DIR_WS_BOXES',DIR_FS_CATALOG .'templates/'.CURRENT_TEMPLATE. '/source/boxes/');
</find>
      <add type="php">  include(DIR_WS_BOXES . 'mybox.php');</add>
   </addcode>

   <addcode>
      <file name="templates/vamshop/index.html" />
      <findlinenumbers start="1" end="1"/>
      <find>{$box_CATEGORIES}</find>
      <add type="html">{$box_MYBOX}</add>
   </addcode>

</contrib>

Всё, CIP пакет создан, ни одного файла в магазине мы не трогали. Мы работали только с нашим CIP модулем и писали XML инструкции для установщика.

Теперь архивируем нашу папку my-first-cip со всем содержимым с помощью zip архиватора. Называться файл архива должен также как и название папки, т.е. мы получаем файл my-first-cip.zip.

Вы можете скачать уже запакованный мной архив - http://kypi.ru/vam/my-first-cip.zip

В нём всё то, о чём было написано в данной статье.

Теперь просто заходим в Админку - Модули - Установка модулей. Слева внизу нажимаем кнопку Загрузить и через кнопку Обзор загружаем наш архив my-first-cip.zip. Затем после того как загрузится архив, напротив my-first-cip.zip нажимаем кнопку установить. Если всё правильно и к файлам и папкам есть доступ, модуль установится и в магазине появится новый бокс. Если будет написана ошибка о правах доступа, просто установите права доступа на запись на указанные файлы и папки.

Чтобы удалить CIP модуль напротив модуля нажимаем кнопку удалить модуль и бокс из магазина удалится.

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

Данная статья не столько руководство к действию, сколько объяснение принципов создания своих CIP модулей для интернет-магазина VamShop.