Глава 14. VamShop для разработчика

Содержание

Переделываем модуль оплаты из osCommerce в VamShop
Переделываем модуль доставки из osCommerce в VamShop
Переделываем модуль итого из osCommerce в VamShop
Создаём новый бокс в VamShop
Создание исходного кода бокса
Создание содержимого бокса
Создание html-шаблона бокса
Подключение бокса
Создаём новую страницу в VamShop
Создание исходного кода страницы
Создание содержимого страницы
Создание html-шаблона страницы
Подключение страницы
Основные отличия VamShop от osCommerce
Установщик модулей
Введение
CIP пакеты
Структура CIP пакета
Формат XML файла
Описание доступных XML тэгов
Создаём модуль для установщика

Переделываем модуль оплаты из osCommerce в VamShop

Есть модуль - Western Union Module - http://www.oscommerce.com/community/contributions,3068 Модуль оплаты Western Union

Как Вы могли заметить, данный модуль для osCommerce. Мы работаем в VamShop и, соответственно, нам нужно его переделать под VamShop.

Скачиваем модуль - http://www.oscommerce.com/community/contributions,3068 (в данной статье используется последняя версия на момент написания статьи - Minimum Amount to Enable Western Union Payments). Распаковываем.

Начинаем переделывать модуль под VamShop.

1. Первое, что Вы должны знать об отличиях VamShop и osCommerce - это расположение языковых файлов. В osCommerce: /includes/languages/язык. В VamShop: /lang/язык.

Соотвественно, первое, что нам нужно сделать - переписать файл /includes/languages/english/modules/payment/west.php в /lang/english/modules/payment/west.php (это языковой файл для английского языка) и в /lang/russian/modules/payment/west.php (это языковой файл для русского языка). Можно также перевести на русский текст в /lang/russian/modules/payment/west.php, но это уже по желанию.

2. Теперь нам нужно переделать сам модуль /includes/modules/payment/west.php. Первое отличие структуры VamShop от osCommerce:

Все функции в VamShop начинаются с vam_ (а не tep_ как в osCommerce). Соответственно, в файле /includes/modules/payment/west.php меняем все tep_ на vam_

Второе отличие структуры VamShop от osCommerce: Все настройки модуля, т.е. названия и описания полей в VamShop, в отличии от osCommerce, хранятся в языковых файлах.

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

Открываем файл /lang/russian/modules/payment/west.php.

Смотрим на insert запросы, определяем, какие константы нам нужно добавить (т.е. смотрим на значения поля configuration_key) и видим следующие ключи:

MODULE_PAYMENT_WEST_STATUS
MODULE_PAYMENT_WEST_PAYTO
MODULE_PAYMENT_WEST_EMAIL
MODULE_PAYMENT_WEST_SORT_ORDER
MODULE_PAYMENT_WEST_MIN_AMOUNT
MODULE_PAYMENT_WEST_ZONE
MODULE_PAYMENT_WEST_ORDER_STATUS_ID

Создаём языковые константы для данных ключей, добавляя к каждому ключу в конце:

_TITLE - это будет название настройки.
_DESC - это будет описание настройки.

Учитывая всё, что я сказал выше, Вы должны добавить в /lang/russian/modules/payment/west.php (можно также перевести данный текст на русский) следующее:

  define('MODULE_PAYMENT_WEST_STATUS_TITLE', 'Enable Western Union Module');
  define('MODULE_PAYMENT_WEST_STATUS_DESC', 'Do you want to accept Western Union payments?');
  define('MODULE_PAYMENT_WEST_PAYTO_TITLE', 'Make Payable to:');
  define('MODULE_PAYMENT_WEST_PAYTO_DESC', 'Who should payments be made payable to?');
  define('MODULE_PAYMENT_WEST_EMAIL_TITLE', 'Your email address:');
  define('MODULE_PAYMENT_WEST_EMAIL_DESC', 'Where will the customer send confirmation of payment.');
  define('MODULE_PAYMENT_WEST_SORT_ORDER_TITLE', 'Sort order of display.');
  define('MODULE_PAYMENT_WEST_SORT_ORDER_DESC', 'Sort order of display. Lowest is displayed first.');
  define('MODULE_PAYMENT_WEST_MIN_AMOUNT_TITLE', 'Minimum amount for Western Union use');
  define('MODULE_PAYMENT_WEST_MIN_AMOUNT_DESC', 'The minimum amount to make the Western Union payment method available');
  define('MODULE_PAYMENT_WEST_ZONE_TITLE', 'Payment Zone');
  define('MODULE_PAYMENT_WEST_ZONE_DESC', 'If a zone is selected, only enable this payment method for that zone.');
  define('MODULE_PAYMENT_WEST_ORDER_STATUS_ID_TITLE', 'Set Order Status');
  define('MODULE_PAYMENT_WEST_ORDER_STATUS_ID_DESC', 'Set the status of orders made with this payment module to this value');

Затем нам нужно исправить все SQL запросы типа insert, проще говоря, смысл в том, чтобы перенести текст (название и описание настроек модуля) из SQL запросов в языковой файл, т.к. текст мы уже перенесли, теперь нужно удалить его из insert запросов. Удаляем из запроса поля configuration_title и configuration_description, а также значения для этих полей, т.е., к примеру, нам нужно исправить:

      vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable Check/Money Order Module', 'MODULE_PAYMENT_WEST_STATUS', 'True', 'Do you want to accept Check/Money Order payments?', '6', '1', 'vam_cfg_select_option(array(\'True\', \'False\'), ', now());");

На:

      vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added) values ('MODULE_PAYMENT_WEST_STATUS', 'True', '6', '1', 'vam_cfg_select_option(array(\'True\', \'False\'), ', now());");

Точно также исправляем остальные insert запросы, в итоге insert запросы будут выглядеть следующим образом:

      vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added) values ('MODULE_PAYMENT_WEST_STATUS', 'True', '6', '1', 'vam_cfg_select_option(array(\'True\', \'False\'), ', now());");
      vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_WEST_PAYTO', '', '6', '1', now());");
      vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_WEST_EMAIL', '', '6', '1', now());");
      vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_WEST_SORT_ORDER', '0', '6', '0', now())");
	  vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_WEST_MIN_AMOUNT', '100', '6', '0', now())");
      vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, use_function, set_function, date_added) values ('MODULE_PAYMENT_WEST_ZONE', '0', '6', '2', 'vam_get_zone_class_title', 'vam_cfg_pull_down_zone_classes(', now())");
      vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, use_function, date_added) values ('MODULE_PAYMENT_WEST_ORDER_STATUS_ID', '0', '6', '0', 'vam_cfg_pull_down_order_statuses(', 'vam_get_order_status_name', now())");

Далее в файле /includes/modules/payment/west.php меняем:

      //$this->enabled = ((MODULE_PAYMENT_WEST_STATUS == 'True') ? true : false);

На:

      $this->enabled = ((MODULE_PAYMENT_WEST_STATUS == 'True') ? true : false);

Если этого не сделать, то у данного модуля в админке не будет изменён статус на установлен и не будут показаны кнопки Удалить и Редактировать.

Затем нам нужно добавить в модуль новую настройку - список разрешённых стран, т.е. для покупателей из каких стран будет доступен данный модуль оплаты.

Для этого в файле /includes/modules/payment/west.php после:

      vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added) values ('MODULE_PAYMENT_WEST_STATUS', 'True', '6', '1', 'vam_cfg_select_option(array(\'True\', \'False\'), ', now());");

Добавляем:

		vam_db_query("insert into ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_WEST_ALLOWED', '', '6', '0', now())");

Затем в список ключей:

      return array('MODULE_PAYMENT_WEST_STATUS', 'MODULE_PAYMENT_WEST_ZONE', 'MODULE_PAYMENT_WEST_ORDER_STATUS_ID', 'MODULE_PAYMENT_WEST_SORT_ORDER', 'MODULE_PAYMENT_WEST_PAYTO', 'MODULE_PAYMENT_WEST_EMAIL', 'MODULE_PAYMENT_WEST_MIN_AMOUNT');

Добавляем MODULE_PAYMENT_WEST_ALLOWED, т.е. изменяем данный текст на:

      return array('MODULE_PAYMENT_WEST_STATUS', 'MODULE_PAYMENT_WEST_ALLOWED', 'MODULE_PAYMENT_WEST_ZONE', 'MODULE_PAYMENT_WEST_ORDER_STATUS_ID', 'MODULE_PAYMENT_WEST_SORT_ORDER', 'MODULE_PAYMENT_WEST_PAYTO', 'MODULE_PAYMENT_WEST_EMAIL', 'MODULE_PAYMENT_WEST_MIN_AMOUNT');

И в языковой файл модуля /lang/russian/modules/payment/west.php добавляем описание данной настройки:

define('MODULE_PAYMENT_WEST_ALLOWED_TITLE' , 'Разрешённые страны');
define('MODULE_PAYMENT_WEST_ALLOWED_DESC' , 'Укажите коды стран, для которых будет доступен данный модуль (например RU,DE (оставьте поле пустым, если хотите что б модуль был доступен покупателям из любых стран))');

Всё, на этом переделка модуля закончена. Если какие-либо моменты Вам не понятны, можете скачать уже изменённый для VamShop модуль в файлах - http://vamshop.ru/forum/files и проверить, как правильно менять код.

Далее нужно просто установить модуль:

1. Переписывайте в свой магазин изменённые файлы модуля: /includes/modules/payment/west.php /lang/english/modules/payment/west.php /lang/russian/modules/payment/west.php

2. В Админке - Модули - Оплата установите модуль Western Union Wired Payment.

3. Настройте модуль, т.е. укажите имя получателя платежа, свой e-mail, минимальную сумму заказа для которых будет доступен данный модуль оплаты.

4. Модуль будет показан в списке доступных модулей оплаты при оформлении заказа - рис. 1.

Рис. 1.

Рис. 1.

Коротко подведу итог, в чём отличия модулей оплаты VamShop от модулей оплаты в osCommerce: 1. Расположение языковых файлов. В osCommerce: /includes/languages/язык. В VamShop: /lang/язык. 2. Все функции в VamShop начинаются с vam_ (а не tep_ как в osCommerce). 3. Все настройки модуля, т.е. названия и описания полей в VamShop, в отличии от osCommerce, хранятся в языковых файлах. 4. В модуль оплаты при переделке для VamShop нужно добавлять новую настройку, в данном примере MODULE_PAYMENT_WEST_ALLOWED, т.е. список разрешённых стран.

Зная эти 4 основных отличия, можно самому переделывать и другие модули оплаты из osCommere в VamShop.