OXID eShop , официально известный как OXID eSales , является мощной и масштабируемой стандартной платформой электронной коммерции, оптимизированной для каждого сегмента онлайн-бизнеса. Как разработчик, проводящий большинство моих задач «9–5» с OXID, я обнаружил, что эту систему электронной коммерции чрезвычайно легко настраивать и расширять.
Если вы новичок в OXID или ищете простую, но эффективную платформу для собственного онлайн-бизнеса, я рекомендую вам прочитать серию статей Мэтью Сеттера о OXID eSales , в которой предлагается стандартная реализация для начала работы с системой OXID.
В этом уроке, состоящем из двух частей, мы создадим новое расширение модуля OXID, которое реализует бесконечную прокрутку списка статей вместо традиционной нумерации страниц. В этой статье я попытаюсь поделиться своим личным опытом, который может помочь вам ускорить рабочий процесс, если вы позже столкнетесь с разработкой OXID.
Вот чего вы добьетесь.
Весь исходный код будет доступен в конце серии.
Обучающие программы будут охватывать следующие области:
Часть 1:
- Создание правильной структуры папок для нового расширения модуля.
- Работа с
metadata.php
для:- Расширьте необходимый контроллер.
- Замените существующий шаблон новым шаблоном.
- Добавьте новый параметр конфигурации модуля.
- Как работать с внутренними языковыми файлами для создания отображаемого имени и текста справки для настроек модуля.
- Работа с новым модулем контроллера.
Часть 2:
- Работа с новым шаблоном:
- Как правильно получить URL модуля.
- Перейдем к работе с механизмом шаблонов OXID.
- Добавление контента для нового шаблона.
- Добавление JavaScript для обработки бесконечной прокрутки в списке статей.
- Обновление представлений базы данных и активация модуля.
Примечание : я предполагаю, что у вас есть некоторый опыт работы с OXID eShop (если нет, см. Статью Мэтью, приведенную выше). Таким образом, не будет большого объяснения основных понятий OXID.
Структура папки модуля OXID
Самая важная задача, которую вы должны сделать в первую очередь, — создать стандартную структуру папок.
- Пожалуйста, перейдите в {your_web_root} / Oxid / modules /
- Создайте новую папку с именем aho_infinitescroll, за которой следуют ее последующие папки / файлы.
aho_infinitescroll/ | |--- controllers/ | |-- aho_infinite_alist.php # A new controller that extends alist.php | |--- out/ | |--admin/ | |--en/ | |-- aho_infinitescroll_lang.php # Back-end English text. | |--de/ | |-- aho_infinitescroll_lang.php # Back-end Deustch text. | | |--css/ | |--> infinitescroll.css # Style for infinite scrolling elements. | | |--img/ | |--> ajax-loader.gif # image indicates the loading status. | |--js/ | |--- translations/ | |--de/ | |--> aho_infinitescroll_lang.php # Front-end Deustch text. | |--en/ | |--> aho_infinitescroll_lang.php # Front-end English text. | |--- views/ | |-- page/ | |-- list/ | |--> aho_infinitescroll_list.tpl # new template file. | |--- metadata.php # Define extension name, classes and other infos. |--- picture.jpg # A thumbnail for the module's functionality.
НОТА:
Наилучшая практика присвоения имени новому модулю — объединение имени поставщика / разработчика / группы и функциональности модуля. Это помогает мгновенно выявить поставщика и функциональность нового модуля для совместной работы команды.
Таким образом, формула может быть следующей:название поставщика + подчеркивание + функциональность
- то есть: sitepoint_infinitescroll
Имя поставщика может быть заменено либо
developer name
либоdeveloper name
group name
. Тебе решать.
Работа с Metadata.php
Metadata.php
необходим для разработки любого модуля. В этом файле содержатся основные сведения о модуле, классах, которые необходимо расширить, о блоках, подлежащих переопределению, шаблонах, подлежащих замене, настройках как внешнего, так и внутреннего интерфейса и т. Д.
Пожалуйста, откройте файл metadata.php
и добавьте в него следующие строки кода:
<?php $sMetadataVersion = '1.0'; # Define version of this file
-
Мы только что вставили базовую информацию для нашего нового модуля, и все элементы являются информативными по своим терминам.
-
Обратите внимание, что
id
иtitle
являются обязательными переменными. В частности, значениеid
должно совпадать с именем папки модуля. -
thumbnail
— это необязательный элемент, который визуально описывает ваш модуль. Я обычно готовлю красивый эскиз, потому что считаю, что картинка стоит тысячи слов. Иногда вы намереваетесь продать некоторые из ваших любимых модулей собственной разработки через рынок OXID, и улучшенный эскиз привлекает больше покупателей.
Далее, мы собираемся определить еще несколько элементов, сразу после email
.
'extend' => array( 'alist' => 'aho_infinitescroll/controllers/aho_infinitescroll_alist' ), 'templates' => array( 'aho_infinitescroll_list.tpl' => 'aho_infinitescroll/views/page/list/aho_infinitescroll_list.tpl' )
-
Значение
extend
указывает конкретный класс ядра / контроллера, из которого будет расширяться новый модуль. В этом случае это будетalist.php
, расположенный по адресу/oxid/application/controllers/
. -
Значения
templates
— это массив, в котором хранятся все зарегистрированные шаблоны нового модуля. Рекомендуется создать ту же структуру папок шаблона, который необходимо заменить, для облегчения совместной работы команды. Обратите внимание, что элементы и значенияtemplates
должны включать расширение имени файла.tpl
ПРИМЕЧАНИЕ :
- Правильный способ назвать новый шаблон «
module name
+_
+the old template name
» - то есть: aho_infinitescroll_list.tpl
- Правильный способ назвать новый шаблон «
В данный момент мы оставляем новый файл шаблона пустым и продолжаем работу с файлом metadata.php
. Пожалуйста, вставьте массив под названием settings
сразу после templates
элементов:
'settings' => array( array( 'group' => 'aho_infinitescroll', 'name' => 'sInfiniteScrollListType', 'type' => 'str', 'value' => 'line' ) )
-
Значение
settings
— это место для регистрации всех параметров конфигурации нового модуля.group
всегда имеет значение, идентичное идентификатору модуля. -
Значение: этот новый параметр помогает управлять типом представления списка. В рамках этого урока я установлю значение по умолчанию в виде
line
и буду использовать его до конца. -
Когда мы активируем модуль в первый раз, этот параметр вставляется в две таблицы
oxconfig
иoxconfigdisplay
. OXID автоматически вставитmodule:aho_infinitescroll
значенияmodule:aho_infinitescroll
в столбцыOXMODULE
(таблицаoxconfig
) иOXCFGMODULE
(таблица oxconfigdisplay) сmodule:aho_infinitescroll
значенияmodule:aho_infinitescroll
. Это очень удобно, так как это происходит автоматически.
Вы можете следить за этим онлайн-документом расширенных метаданных, чтобы узнать больше о других возможных аргументах.
Далее мы смотрим на внутренние переводы.
Добавление внутренних переводов
В последнем разделе мы добавили настройки для нового модуля. Теперь пришло время поработать с его переводом.
Пожалуйста, откройте файл aho_infinitescroll/out/admin/en/aho_infinitescroll_lang.php
и добавьте в него следующие строки.
<?php $sLangName = 'English'; // English or Deustch $aLang = array( 'charset' => 'UTF-8', 'SHOP_MODULE_GROUP_aho_infinitescroll' => 'Settings', 'SHOP_MODULE_sInfiniteScrollListType' => 'Select the type of list that will be applied for infinite scrolling.', 'HELP_SHOP_MODULE_sInfiniteScrollListType' => 'OXID supports 3 default view types as `line`,`grid` and `infogrid`. If you define an extra view type, make sure it has been created in your shop directory.' );
-
Синтаксис для добавления перевода для опции конфигурации
SHOP_MODULE
+_
+setting_column_name
. -
Синтаксис для добавления текста справки для параметра конфигурации
HELP_SHOP_MODULE
+_
+setting_colum_name
.
Вышеуказанные строки кодов приведут к выводу, как на рисунке ниже. Позже, когда вы активируете модуль, введите line
в текстовое поле:
Пожалуйста, сделайте то же самое для файла aho_infinitescroll/out/admin/de/aho_infinitescroll_lang.php
. Присвойте переменную $sLangName
значению Deustch
и попросите кого-нибудь, специализирующегося на языке, перевести весь текст на немецкий язык или просто добавить туда тарабарщину, если она отличается от английского, чтобы вы могли увидеть разницу.
Работа с новым контроллером
Пожалуйста, откройте aho_infinitescroll/controllers/aho_infinite_alist.php
и добавьте в него следующие строки:
<?php class aho_infinitescroll_alist extends aho_infinitescroll_alist_parent { protected $_sThisTemplate = 'aho_infinitescroll_list.tpl'; /** * @Todo: Change the template view * @return string */ public function render(){ parent::render(); return $this->_sThisTemplate; } /** @Todo: Get the module option of view type * @return string */ public function getViewTypeList(){ return $this->getConfig()->getConfigParam('sInfiniteScrollListType'); } }
Этот новый контроллер делает всего несколько вещей:
-
Измените значение
$_sThisTemplate
наaho_infinitescroll.tpl
, которое мы определили вmetadata.php
: Обратите внимание, что нам нужно только указать здесь имя шаблона. Таким образом, имя шаблона должно быть уникальным. Это помогает системе быстро найти правильный шаблон. -
Функция
render
ничего не делает, а просто возвращает имя нового шаблона. -
Функция
getViewTypeList
будет возвращать значение столбца данныхsInfiniteScrollListType
, определенного вmetadata.php
. Шаблонaho_infinitescroll.tpl
будет использовать это значение, чтобы определить, какой тип представления будет применен для списка статей. -
Вы можете заметить, что имя расширенного класса —
aho_infinitescroll_alist_parent
. Формула этоmodule controller name
+_
+parent
.
Советы, чтобы найти необходимый класс для расширения
- Обычно вам нужно знать, какие классы необходимо расширить. Существует простой способ узнать, какой класс запущен в текущем представлении. Вы просто просматриваете файл
/application/views/{theme_name}/tpl/layout/page.tpl
и вставляете следующую строку в верхней части файла:
[{$oViewConf->getActiveClassName()}]
Приведенная выше строка помогает распечатать, какой базовый класс используется в текущем представлении. Если вы хотите определить основной класс, который выполняет запросы Ajax, вам потребуется немного больше усилий для работы с ChromeDev Tools .
Вывод
До сих пор мы прошли пошаговую внутреннюю реализацию, чтобы разработать новое расширение модуля. На данный момент мы можем активировать модуль, чтобы увидеть, что у нас будет на панели администрирования. Если возникнут какие-либо проблемы, пожалуйста, оставьте свой комментарий здесь. Я сделаю все возможное, чтобы помочь вам.
В следующей части будет подробно рассказано о существенной реализации интерфейса, которая состоит из настройки шаблона и добавления JavaScript для управления рабочим процессом для бесконечной прокрутки.