Помощь » База знаний » Shop-Script » Инструкции и советы »
В статье описаны базовые принципы работы WebAsyst Shop-Script, которые будут полезны при разработке дополнительных модулей и модификации оригинального исходного кода приложения.
| published/SC/html/scripts/frame.php | меню навигации в администрировании |
| published/SC/html/scripts/index.php | витрина и администрирование, основная точка входа |
| published/SC/html/callbackhandlers/paymenthandler.php | скрипт взаимодействия с платежными системами, адрес получения ответов от серверов платежных систем |
| published/SC/html/scripts/get_file.php | скачивание файлов, которые требуют проверки прав доступа (экспортированные в файл данных, купленные электронные продукты) |
| published/SC/html/scripts/imgval.php | генератор CAPTCHA |
| shop/index.php | альтернативный адрес витрины |
| shop/get_file.php | альтернативный адрес для скачивания файлов |
| shop/callbackhandlers/paymenthandler.php | альтернативный адрес скрипта взаимодействия с платежными системами |
Разделы — это иерархическая структура («скелет магазина») магазина. Вся структура разделов (которые можно называть страницами) хранится в виде дерева в таблице базы данных SC_divisions, где и определяется иерархия. Каждый раздел имеет свой числовой идентификатор did. В режиме администрирования обращение к разделу осуществляется по did. Для пользовательской части (витрины) используется строковый ключ ukey, значение которого извлекается из текущего URL (например, category, home, cart и т. д.).
Модули — это «функциональная начинка» магазина. Все модули расположены в директории published/SC/html/scripts/modules/. Каждый модуль представляет собой отдельную поддиректорию с некоторым набором файлов. Каждый модуль представлен обязательным XML-файлом описания модуля с именем вида %module_name%.xml и в элементе <File> содержит название файла основного класса, реализующего функционал модуля.
<Connector>
<Class>
<Name>%ModuleClassName%</Name>
<File>%module_file_name.php%</File>
<Title>%module_title%</Title>
<Description>%module_description%</Description>
<SingleInstallation>true</SingleInstallation>
</Class>
</Connector>
Определенный в элементе <File> файл %module_file_name.php% (рекомендуется, чтобы имя файла без расширения совпадало с директорией модуля) должен существовать и описывать класс, являющийся дочерним по отношению к классу Module или AbstractModule.
Информация об установленных модулях хранится в таблицах SC_modules и SC_module_configs, связанных между собой по полю ModuleID.
Интерфейсы представляют собой код, вызываемый в контексте модулей. Такой код может быть реализован в виде методов класса модуля либо в виде внешних файлов в поддиректории _methods/ модуля, которые подключаются при вызове соответствующих файлам интерфейсов. Описание доступных интерфейсов модуля содержится в параметре Interfaces модуля либо в XML-файлах в директории _methods/ модуля и инициализируется в методе initInterfaces модуля. Ключ интерфейса совпадает с именем файла интерфейса и его описания без расширений.
<interfaces>
<interface>
<name>Localization strings search</name>
<key>find_local</key>
</interface>
</interfaces>
$this->Interfaces = array(
'bnews' => array(//b_news – ключ интерфейса
'name' => 'Manage news',
'method' => 'methodBNews',//указан явно метод класса модуля
),
'b_subscribers' => array(
'name' => 'Manage subscribers',
'type' => INTDIVAVAILABLE,
//метод не указан, поэтому будет вызываться код из файла _methods/b_subscribers.php
),
);
Связь между разделом и интерфейсами модулей определяется в таблице SC_division_interface. По идентификатору раздела xDivisionID формируется строка xInterface вида [число]_[строка], где число — это идентификатор модуля в таблице SC_modules_configs, а строка — идентификатор (ключ) интерфейса модуля. C одним разделом может быть связано несколько интерфейсов, вызываемых в порядке xPriority, также интерфейс может быть наследуемым xInheritable для дочерних разделов.
Компоненты — это информационные блоки в шаблонах страниц. Во встроенном редакторе дизайна витрины они представлены в виде списка элементов страницы, которые можно перемещать по шаблону вместе с изменением ряда свойств. Компоненты являются обособленным типом интерфейсов модуля, имеющим описание применимых настроек и свойств, а также списком шаблонов, в которых они могут использоваться.
Коллекции модулей — это модули, предоставляющие набор «подмодулей». Например, модуль оплаты payment предоставляет набор «подмодулей» для различных платежных систем.
Соблюдение жестких правил именования PHP-файлов модулей не является обязательным, но рекомендуется формат class.%class_name%.php, поскольку информация о самом модуле добавляется в начало файла модуля в виде специальных тегов формата phpDoc.
Обязательным в файле модуля является тег connect_module_class_name, содержащий имя класса модуля. В ряде модулей используются также дополнительные теги.
Пример описания:
<?php
/**
* @connect_module_class_name PPExpressCheckout
* @package DynamicModules
* @subpackage Payment
*/
class PPExpressCheckout extends PaymentModule {
…
В методе _initVars объявляются свойства модуля (название title, описание description, список настроек модуля Settings). В методе _initSettingFields задается описание настроек модуля в виде ассоциативного массива. Настройки сохраняются в таблице SC_settings, имеющей следующий формат:
module_id — численный идентификатор экземпляра модуля
module_type — численный тип модуля (доставка, оплата, печатные формы и т. п.)
module_name — наименование модуля
ModuleClassName — имя класса модуля
Установка и удаление экземпляров модулей осуществляется методами install() и uninstall(). Модули могут допускать несколько экземпляров в приложении, если параметр SingleInstall имеет значение false. Методы установки и удаления добавляют необходимые записи о настройках модуля в базу данных.
Расположены в директории published/SC/html/scripts/modules/shipping/ и используются для определения возможности и расчета стоимости доставки до того момента, когда заказ оформлен.
Метод allow_shipping_to_address() проверяет, возможна ли доставка по указанному покупателем адресу.
Метод calculate_shipping_rate() вычисляет стоимость доставки для адреса, указанного покупателем.
Файлы модулей расположены в директории published/SC/html/scripts/modules/payment/.
Существуют следующие типы модулей:
PAYMTD_TYPE_CC — оплата кредитными картами
PAYMTD_TYPE_ONLINE — оплата через различные платежные системы
PAYMTD_TYPE_MANUAL — ручная обработка платежей
PAYMTD_TYPE_REPLACE — оплата, совмещаемая с альтернативным способом оформления заказа (googlecheckout/paypal), когда оформление заказа происходит не на сайте магазина, а на стороннем сайте
Метод payment_form_html() используется для генерации HTML-кода формы оплаты.
Метод after_processing_php() вызывается после записи данных о заказе в базу данных.
Метод payment_process() осуществляет проверку и отправку данных о заказе серверу платежного шлюза; в базовом классе представлен заглушкой, возвращающей единицу (1).
Метод after_processing_html() вызывается после записи данных о заказе в базу данных и возвращает HTML-код кнопки перехода на сайт платежного шлюза.
Файлы модулей расположены в директории published/SC/html/scripts/modules/printforms/. Шаблоны и графические ресурсы, используемые модулями, располагаются в директории published/SC/html/scripts/templates/forms/. Модули используются для генерации различных печатных форм, связанных с заказами, например, счетов или квитанций.
Метод display() используется для отображения печатной формы.
Файлы, которые загружаются в режиме администрирования магазина Shop-Script, сохраняются в один из следующих каталогов:
data/
Защищенные файлы, которые нельзя получить напрямую по HTTP (доступ запрещен серверными методами, например, с помощью файла .htaccess), и которые отдаются на скачивание только скриптами после проверки прав доступа. Например, файлы электронных продуктов, которые можно скачать после покупки.
published/publicdata/
Файлы, доступ к которым разрешен напрямую по HTTP: CSS, изображения, используемые в дизайне витрины, фотографии продуктов.
Shop-Script поддерживает языковую локализацию не только интерфейса, но и содержимого базы данных. Список поддерживаемых языков и инструмент перевода находится режиме администрирования «Инструменты -> Языки и перевод».
При добавлении нового языка выполняются SQL-запросы, которые добавляют новые поля в таблицы основных сущностей, требующих перевода на новый язык. Список многоязычных полей таблиц содержится в файле published/SC/html/scripts/cfg/database_structure.xml. Например, при добавлении немецкого языка с идентификатором «de» в таблицу продуктов будут добавлены поля product_name_de, brief_description_de, description_de.
Локализация интерфейса редактируется в режиме администрирования и сохраняется в таблице SC_locals, где id — идентификатор строки локализации, lang_id — идентификатор языка, value — переведенная строка, group — группа строки локализации (для витрины загружаются строки локализации из групп hidden, front, general, а для административной части — back и general), subgroup — подгруппа строки локализации (published/SC/html/scripts/cfg/localgroup.xml).
Локализация строковых констант установленных модулей (например, модулей оплаты) расположена в поддиректории languages/ соответствующего модуля в виде PHP-файлов с форматом наименования %iso2%.%class_name%.php, в которых определяются строковые константы локализации. При отображении информации о модуле в администрировании магазина подключается языковой файл для текущего языка пользователя. Эта часть перевода не хранится в базе данных.
В текущей версии Shop-Script данные кешируются в отдельных файлаx: