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

Возьмём, к примеру, следующий модуль доставки - Customer Pickup Option - http://www.oscommerce.com/community/contributions,3354 Модуль доставки Customer Pickup Option

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

Скачиваем модуль - http://www.oscommerce.com/community/contributions,3354 (в данной статье используется самая первая версия модуля - Customer Pickup Option). Распаковываем.

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

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

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

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

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

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

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

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

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

MODULE_SHIPPING_PICKUP_STATUS
MODULE_SHIPPING_PICKUP_COST
MODULE_SHIPPING_PICKUP_TAX_CLASS
MODULE_SHIPPING_PICKUP_ZONE
MODULE_SHIPPING_PICKUP_SORT_ORDER

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

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

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

define('MODULE_SHIPPING_PICKUP_STATUS_TITLE', 'Enable Customer Pickup');
define('MODULE_SHIPPING_PICKUP_STATUS_DESC', 'Do you want to offer customer pickup?');
define('MODULE_SHIPPING_PICKUP_COST_TITLE', 'Pickup Fee');
define('MODULE_SHIPPING_PICKUP_COST_DESC', 'The fee for all orders being picked up by the customer. Most likely will be 0.00 but can be changed if needed.');
define('MODULE_SHIPPING_PICKUP_TAX_CLASS_TITLE', 'Tax Class');
define('MODULE_SHIPPING_PICKUP_TAX_CLASS_DESC', 'Use the following tax class on the fee.');
define('MODULE_SHIPPING_PICKUP_ZONE_TITLE', 'Shipping Zone');
define('MODULE_SHIPPING_PICKUP_ZONE_DESC', 'If a zone is selected, only enable this shipping method for that zone.');
define('MODULE_SHIPPING_PICKUP_SORT_ORDER_TITLE', 'Sort Order');
define('MODULE_SHIPPING_PICKUP_SORT_ORDER_DESC', 'Sort order of display.');

Затем нам нужно исправить все 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 Customer Pickup', 'MODULE_SHIPPING_PICKUP_STATUS', 'True', 'Do you want to offer customer pickup?', '6', '0', '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_SHIPPING_PICKUP_STATUS', 'True', '6', '0', '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_SHIPPING_PICKUP_STATUS', 'True', '6', '0', '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_SHIPPING_PICKUP_COST', '0.00', '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_SHIPPING_PICKUP_TAX_CLASS', '0', '6', '0', 'vam_get_tax_class_title', 'vam_cfg_pull_down_tax_classes(', 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_SHIPPING_PICKUP_ZONE', '0', '6', '0', '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, date_added) values ('MODULE_SHIPPING_PICKUP_SORT_ORDER', '0', '6', '0', now())");

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

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

      vam_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added) values ('MODULE_SHIPPING_PICKUP_STATUS', 'True', '6', '0', '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_SHIPPING_PICKUP_ALLOWED', '', '6', '0', now())");

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

      return array('MODULE_SHIPPING_PICKUP_STATUS', 'MODULE_SHIPPING_PICKUP_COST', 'MODULE_SHIPPING_PICKUP_TAX_CLASS', 'MODULE_SHIPPING_PICKUP_ZONE', 'MODULE_SHIPPING_PICKUP_SORT_ORDER');

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

      return array('MODULE_SHIPPING_PICKUP_STATUS', 'MODULE_SHIPPING_PICKUP_ALLOWED', 'MODULE_SHIPPING_PICKUP_COST', 'MODULE_SHIPPING_PICKUP_TAX_CLASS', 'MODULE_SHIPPING_PICKUP_ZONE', 'MODULE_SHIPPING_PICKUP_SORT_ORDER');

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

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

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

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

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

2. В Админке - Модули - Доставка установите модуль Pickup Rate.

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

Рис. 1.

Рис. 1.

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

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