PHPShop Modules

Матеріал із PHPShop

Зміст

Нова модульна архітектура дозволяє створювати незалежні модулі, що працюють у зв'язці з основною логікою. Новий стандарт модулів реалізує можливість розширення функціоналу PHPShop без будь-яких обмежень для сторонніх розробників та постачати додаткові модулі як незалежні продукти.

Принцип роботи

Логіка підключення модулів базується на принципі незалежності коду модуля від загального коду системи, тим самим забезпечуючи стабільність роботи модуля окремо та у зв'язці із загальною логікою.

Основні принципи модульності:

  • Незалежність коду від загальної логіки
  • Перехоплення глобальних змінних
  • Перехоплення та створення нового ЧПУ
  • Легка установка та видалення
  • Підключення персонального меню керування
  • Додавання нових можливостей до стандартних графічних інтерфейсів управління

Опис файлової системи модуля

Усі модулі знаходяться в папці phpshop/modules/ім'я модуля.

  • templates - шаблони
  • core - файли для створення ЧПУ(site.ru/catalog/ і т.д.)
  • install - інсталяційні файли
  • install/module.sql - SQL файл для встановлення таблиць
  • install/module.xml - опис модуля та меню навігації керування для адміністрування
  • install/icon.gif - іконка модуля
  • inc – файли основної логіки
  • inc/config.ini -конфігураційний файл
  • class – файли з класами основної логіки
  • admpanel - файли адміністративних інтерфейсів
  • updates - доступні оновлення
  • default - оновлення без прив'язки до версії модуля, якщо не вказана версія при встановленні модуля
  • 1.0 – оновлення для версії модуля 1.0
  • 1.1 – оновлення для версії модуля 1.0
  • Підключення ЧПУ

    Для створення нового віртуального розділу (site.ru/catalog/ і т.д.) потрібно внести в конфігуратор модуля config.ini запис про новий розділ форматуунікальне ім'я нового розділу = "шлях до файлу логіки", приклад :

    Якщо унікальне ім'я нового розділу збігається з існуючим розділом, то головним вважається файл модуля, а основна логіка з папки phpshop/core/ не враховується. Цей спосіб дозволяє повністю замінювати основну логіку платформи. Для полегшення та скорочення коду можна створювати core-файли модуля, що підтримується спадщина від основної логіки phpshop/core/, вносячи лише точкові зміни до файлу, не торкаючись інших сторін роботи розділу.

    Змінити та дописати логіку вже існуючого розділу можна через Хукі.

    Підключення таблиць БД

    Якщо модуль використовує таблиці БД, потрібно внести в конфігуратор модуля запис про таблиці форматуунікальне ім'я скороченої назви = "ім'я таблиці", приклад:

    При установці модуля таблиці модулів буде створено з образу БД module.sql і видалено при видаленні модуля зі списку модулів. Для доступу до імен БД можна скористатися класом PHPShopModules:

    Автозавантаження

    Для включення логіки в автозавантаження потрібно внести в конфігуратор модуля записпапка модуля = "шлях до файлу завантаження", приклад:

    Зазначений файл phpshop/modules/catalog/inc/catalog.inc.php має існувати. Т.к. блок активної логіки модулів знаходиться нижче основного блоку, то цим прийомом можна перехоплювати та переписувати глобальні змінні.

    Доступні для перехоплення змінні:

    • @leftMenu@
    • @rightMenu@
    • @banersDisp@
    • @miniNews@
    • @oprosDisp@
    • @topMenu@
    • @mainMenuPage@
    • @mainMenuPhoto@
    • @mainContent@
    • @mainContentTitle@

    Якщо модуль використовує шаблони дизайну, потрібно внести в конфігуратор модуля запис про шаблони форматуунікальне скорочене ім'я шаблону = "шлях до файлу шаблону", приклад:

    Для доступу до шаблонів можна скористатися класом PHPShopModules:

    Конфігурація установки

    Конфігурація установки модуля описана у файлі install/module.xml

    • Опція меню podmenu в адміністративній панелі. За такої конфігурації меню буде доступно з розділу "Модулі" -> "SoftСatalog"
    • Опція _action описує _GET посилання

    Кількість вкладених блоків podmenu не обмежується, що даємо можливість створення великої кількості адміністративних інтерфейсів для налаштування та управління модулем. Блоки podmenu відображаються в меню "Модулі".

    Адміністративні інтерфейси

    Якщо модуль додає нові можливості (нові поля та функції) в штатні адміністративні інтерфейси платформи, то потрібно внести в конфігуратор модуля запис форматуім'я файлу адміністративного інтерфейсу, що перехоплюється, = "шлях до файлу доданих функцій", приклад:

    Інтерфейс налаштування модуля

    Якщо модуль містить опції налаштування або параметри реєстрації, то обов'язково наявність інтерфейсу, що записується в phpshop/modules/ім'я модуля/admpanel/adm_module.php. Для цього використовується адміністративний інтерфейс модуля.

    Для активації налаштування модуля в загальному меню та посилання на додаткові опції служить файл налаштувань module.xml

    Формат виведення меню посилання налаштувань модуля в загальне меню розділ "Модулі":

    Доповнення адміністративних інтерфейсів (Hook)

    Для додавання нових полів служитьопціяfieldконфігурації модуля. Файл обробника повинен знаходитися в папці phpshop/modules/ім'я модуля/admpanel і мати назву, що й файл для перехоплення, приклад файлу seourl/admpanel/adm_catalogID.php:

    Цей приклад малює нове поле SEO у картці генерації каталогу. Масив addHandler описує, які функції вихідного файлу буде впроваджено код модуля. У нашому прикладі до функції actionStart додається логіка виведення нової закладки SEO.

    Перехоплення адміністративних інтерфейсів (Hook)

    Для перехоплення логіки (оновлення, видалення) використовується параметр actionUpdate і actionDelete масиву addHandler. Наприклад перехопимо виконання функції оновлення картки каталогу з файлу adm_catalogID.php

    Перехоплення зовнішніх функцій (Hook)

    Підтримує впровадження хуків в основну логіку зовнішньої частини (користувацька частина сайту) API для перехоплення з наступними змінами результату виконання методів класів PHPShopCore, PHPShopElements та всіх класів, що успадковуються від них.

    Виклик хука відбувається через використання блоку, проставленого у всіх значущих місцях, теоретично можливих до перехоплення та зміни на льоту.

    Для використання хука потрібно внести в конфігуратор модуля config.ini запис про перехоплення методу в класіім'я класу = "шлях до логіки", приклад:

    Файл опису логіки, вказаний у конфізі, повинен містити список функцій для перехоплення та самі функції, що змінюють стандартне виконання коду. Приклад:

    Формат опису $addHandler такий:ім'я функції для перехоплення = "нова функція в цьому файлі". Результатом цього хука буде перехоплення результату виконання $PHPShopPage->index();

    Оновлення

    Налагодження відбувається через налагоджувальну панель, що реалізується черезPHPShopDebug, що виконує роль виведення системної інформації, корисної для розробника та використовувана при налагодженні скрипту. Налагоджувальна панель вмикається у конфігураційному файлі в опції [my].

    Адаптація модулів для PHPShop 5

    PHPShop 5 має трохи відмінний формат адміністративних інтерфейсів, порівняно з попередніми версіями. Нова панель відкриває форми редагування в загальному оформленні, а не окремих вікнах (як було в попередніх версіях). Тому для міграції модулів у всіх адміністративних файлах (приклад: returncall/admpanel/adm_module.php, returncall/admpanel/adm_returncallID), які відкривалися в окремому вікні, потрібно прибрати кілька рядків (підключення до БД та підключення бібліотек, оскільки вони вже підключені загалом) admin.php).

    Порівняння коду модулів

    Стара версія запису

    Нова версія запису

    Виведення модуля у меню

    Для запобігання можливим помилкам при використанні саморобних модулів або модулів, видалених у новій версії PHPShop 5 (stat, iconcat, tester та ін.) введено налаштуванняcapabilityу файл /install/module.xml. За відсутності тегаcapabilityмодуль не з'явиться у загальному меню доступних модулів після увімкнення. Можливість увімкнути/вимкнути модуль залишається для можливості відключення застарілих модулів з панелі керування.

    Змінилися посилання додаткових підменю модулів з?plugin=returncallнаdir.returncall. Тег podmenu_icon більше не використовується.;

    Стара версія запису

    Нова версія запису

    Робота з БД

    Для підтримки ядра останнього PHP 7 довелося відмовитися від застарілої функції з'єднання з БД MySQLmysql_connectі замінити її mysqli_connect. При наявності в модулі нативнихфункцій роботи з БД MySQL з префіксомmysql_необхідно замінити їх на однойменні функції з префіксомmysqli_. Як посилання на з'єднання з БД використовується змінна $GLOBALS['link_db'] або $PHPShopBase->link_db або $PHPShopOrm->link_db;

    При використанні штатного PHPShopOrm зміни в код вносити не треба, тому що в ньому вже реалізована підтримка mysqli_connect. Для підтримки нових версій PHP рекомендується використовувати тільки PHPShopOrm для роботи з SQL запитами.