PHPShop
  • 🟠PHPShoр: прибыльные магазины для малого бизнеса
  • С чего начать?
    • Быстрый старт
    • ✨Помощь AI
    • SEO возможности
    • Ведение склада
    • Pro модули
    • Виды скидок
    • Конфигурации
    • Цифровые товары
  • Установка, обновление
    • Установка на хостинг
    • Установка на компьютер
    • После покупки Лицензии
    • Техническая поддержка
    • Обновление PHPShop
    • 📦Коробочная версия
    • 🖥️Аренда на своем хостинге
    • ☁️Аренда в облаке
  • ⤵️Наполнение базы
    • Переезд и миграция
    • Импорт / Экспорт:
      • Excel
      • YML
      • RSS
      • CommerceML
      • Сторонние XML
      • Сторонние парсеры
        • Пример загрузки товаров с сайта Sima-land.ru
      • Парсер PriceLoader
    • Импорт по расписанию
    • Интерактивный .xls прайс с корзиной
    • Пакетная загрузка фото
    • Пакетное редактирование базы
    • Бекап и очистка базы
  • 🌟Синхронизация Pro
    • 🟠1С
      • Версии и конфигурации 1С
      • Встроенный типовой обмен CommerceML (для новых версий 1С)
      • Тестирование связи с 1С на демо-версии
      • Установка и активация внешнего обработчика 1С (для старых версий 1С)
      • Инструкции по внешнему обработчику 1С (для старых версий 1С)
      • Видео-уроки по внешнему обработчику 1С (для старых версий 1С)
      • Дополнительные обработчики (для старых версий 1С)
        • Редактор описаний в 1С
        • Импорт прайс-листов в 1С
        • Загрузка изображений в 1С
    • 🔵МойСклад
    • 🔵OZON
    • 🟣Wildberries
    • 🟢Мегамаркет
    • ⚫Яндекс.Маркет
    • 🟢Avito
    • 🔵Вконтакте
  • ⤴️Выгрузка товаров
    • Яндекс и Google
  • 📦Товары
    • Ручное добавление каталогов, товаров
    • Работа с изображениями
    • Характеристики, фильтры
    • Подтипы
    • Мультисклад
    • Витрины
    • Поиск
  • 📈Заказы
    • Работа с заказами
    • Способы оплаты
      • Наличная оплата
      • Счет в банк
      • Платежные системы
      • Скидки от вида оплаты
    • Настройка доставок
    • Telegram, VK, SMS, PUSH
    • Ценообразование
  • 🌟Бесплатные модули
    • 100+ бесплатных модулей:
    • ⭐Pro модули
    • Дизайн
      • Stiker - стикер
      • Кнопки
      • Count Cat
      • Filemanager
      • Пакетная обработка фото на сервере (Генератор превью картинок)
      • Mobile
      • Панорама 360°
      • Snow
    • SEO
      • SeoUrl
      • Seo Meta Новости
      • Карта сайта SiteMap
      • Карта сайта SiteMap Pro
    • Доставки
      • Почта России
      • Saferoute Widget
      • Boxberry Widget
      • Яндекс Доставка
      • CDEK Widget
      • Калькулятор доставки
      • Нова пошта
      • Бланки Почты России
      • Виджет доставок
    • Чаты и звонки
      • Cleversite
      • Мультиязычность Google Translate
      • Envybox
      • JivoSite
      • Pozvonim
      • Обратный звонок
      • Verbox
    • CRM
      • МойСклад
      • 📊Bitrix24
      • 📈retailCRM
      • 🔊Рекламные кампании
      • Unisender
    • Маркетплейсы
      • 🟣WB Partners
      • 🔵OZON Seller
      • ⚫Яндекс.Маркет
      • 🟢Мегамаркет
      • 🟢Авито
      • 🔵VK
      • Модуль Маркетплейсы: Яндекс.Маркет, СберМегаМаркет AliExpress, Google Merchant
    • Платежные системы
      • Банки
        • Альфа-банк
        • ВТБ
        • Банк Авангард
        • МодульБанк
        • Т-Банк
      • Кассы
        • Онлайн касса Атол
        • Печка54
        • CloudKassir
        • Robokassa
        • Модулькасса
      • Платежные системы агрегаторы
        • ЮKassa
        • ЮMoney
        • IntellectMoney
        • Mandarin
        • 2can&ibox
        • NovaPay
        • AcquiroPay
        • Idram
        • Assist
        • CloudPayments
        • Easypay
        • PayKeeper
        • Fondy
        • LiqPay
        • PayOnline
        • PayPal
        • Uniteller
      • Платежные шлюзы
        • PayAnyWay (Монета) платежный шлюз
        • PayMaster
        • Interkassa
        • Platron
        • Webmoney
        • Счет в банк
    • Кредитование
      • Купи в рассрочку Долями
      • Покупка в кредит от Alfabank Credit
      • Купить в кредит Почта Банк
      • Купи в кредит Т-Банк
    • Яндекс
      • Яндекс.Маркет
      • Яндекс.Карта
    • Продажи
      • Подарок - товар с 0₽ в корзине
      • Оптовые акции - скидки от количества товара в заказе
      • Хиты продаж
      • Свойства товаров
      • Комплектующие
      • Заказ в 1 клик
      • Sort Selection - сквозной фильтр на главной
      • Товар дня
      • Группы товаров - продажа комплектов
      • Промокоды
      • Услуги сборки, монтажа в карточке товара
      • Product Similar похожие товары по характеристикам
      • Product List похожие товары из каталога
      • Product Last View - просмотренные товары
      • Sort Brand - подборки по характеристикам
      • Sort Product - товары по характеристикам
      • Visual Cart - брошенные корзины
      • Партнерская программа
    • Разработчикам
      • Умный поиск
      • Adm Log
      • WebHooks
      • Form Generator
      • История заказов
      • GeoIP
      • Замок
      • Product Option
      • Debug
      • Задачи
      • Защитник файлов Guard
  • 👫Пользователи
    • Покупатели
    • Статусы и скидки
    • Бонусы
    • Авторизация и регистрация
  • 👤Администраторы
    • Администраторы
    • Восстановление пароля
    • Журнал авторизации
  • 🎯Маркетинг
    • Канбан доска
    • Промоакции
    • Почтовые рассылки
    • Баннеры и pop-up
  • 💻Веб-сайт
    • Страницы
    • Отзывы
    • Новости
    • Пиксель, счетчики
  • ⚒️Настройки
    • Основные настройки
    • Реквизиты
    • Обмен данными
    • SEO настройки
    • Валюты
    • Изображения
    • Витрины
    • Склады
    • Диалоги и чаты
    • Интеграция с сервисами
    • Быстродействие (кеширование)
    • Интеграция с Yandex Cloud
    • Локализация
    • Обслуживание
  • 🎨Дизайн
    • Настройка шаблона
    • HTML Верстальщику
    • 🔦Шпаргалка по шаблонам
  • 👨‍💻API
    • PHP API
    • JSON API
    • Создание модулей - правка API через файлы модулей
    • Создание хуков - правка API через функции
    • Создание дизайн-хуков - правка API через файлы дизайна
    • База дизайн-хуков
      • Характеристики и новости
      • Заказы и личный кабинет
      • Каталоги и прайс-лист
      • Поиск и товары
      • Корзина и элементы
    • Создание 1С-хуков
      • API синхронизации интернет-магазина с 1С
      • Изменение API синхронизации с 1С
  • EasyControl
    • Установка
    • PriceLoader
    • Monitor
    • Updater
Powered by GitBook
On this page
  • Принцип работы
  • Подключение ЧПУ
  • Подключение таблиц БД
  • Автозагрузка
  • Шаблоны
  • Конфигурация установки
  • Административные интерфейсы
  • Перехват внешних функций (Hook)
  • Обновление
  • Отладка
  • Адаптация модулей для PHPShop 6

Was this helpful?

  1. API

Создание модулей - правка API через файлы модулей

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

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

Логика подключения модулей базируется на принципе независимости кода модуля от общего кода системы, тем самым обеспечивая стабильность работы модуля в отдельности и в связке с общей логикой.

Основные принципы модульности

  1. Независимость кода от общей логики

  2. Перехват глобальных переменных

  3. Перехват и создание нового ЧПУ

  4. Легкая установка и удаление

  5. Подключение персонального меню управления

  6. Добавления новых возможностей в стандартные графические интерфейсы управления

  7. Обновление модулей

Образно говоря, создав модуль, можно перехватывать общие глобальные переменные для главных шаблонов index.tpl и shop.tpl, создавать новые виртуальные категории или менять существующие (/page/, /catalog/ и т.д.), и внедрять интерфейсы управления модулем в общий стиль административной панели через простой стандарт подключения модуля, описанный на языке XML.

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

Все модули находятся в папке /phpshop/modules/имя_модуля.

  1. templates - шаблоны

  2. core - файлы для создания ЧПУ( site.ru/catalog/ и т.д.)

  3. install - установочные файлы

    1. install/module.sql - SQL файл для установки таблиц

    2. install/module.xml - описание модуля и меню навигации управления для администрирования

  4. inc - файлы основной логики

    1. inc/config.ini - файл конфигурации

  5. class - файлы с классами основной логики

  6. admpanel - файлы административных интерфейсов

  7. updates - доступные обновления

    1. default - обновления без привязки к версии модуля если не указана версия при установке модуля

    2. 1.0 - обновления для версии модуля 1.0

    3. 1.1 - обновления для версии модуля 1.1

Подключение ЧПУ

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

[core]
catalog="./phpshop/modules/catalog/core/catalog.php";
......

Если уникальное имя нового раздела совпадает с уже существующим разделом, то главным считается файл модуля, а основная логика из папки /phpshop/core/ не учитывается. Данный способ позволяет полностью заменять основную логику платформы. Для облегчения и сокращения кода можно создавать core-файлы модуля, поддерживаемое наследие от основной логики /phpshop/core/, внося только точечные изменения в файл, не затрагивая другие стороны работы раздела.+

Подключение таблиц БД

Если модуль использует таблицы БД, то требуется внести в конфигуратор модуля запись о таблицах формата уникальное имя сокращенного названия = "имя таблицы", пример:

[base]
catalog_load="phpshop_modules_catalog_loads";
catalog_system="phpshop_modules_catalog_system";

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

$PHPShopModules = new PHPShopModules();
$PHPShopModules->getParam("base.catalog.catalog_load");

или

$GLOBALS['SysValue']['base']['catalog']['catalog_system'];

Автозагрузка

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

[autoload]
catalog="./phpshop/modules/catalog/inc/catalog.inc.php";

Указанный файл /phpshop/modules/catalog/inc/catalog.inc.php должен существовать. Т.к. блок активной логики модулей находится ниже основного блока, то этим приемом можно перехватывать и переписывать глобальные переменные.

Шаблоны

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

[templates]
catalog_menu_forma="./phpshop/modules/catalog/templates/catalog_menu_forma.tpl";
catalog_page_forma="./phpshop/modules/catalog/templates/catalog_page_forma.tpl";
catalog_page_list="./phpshop/modules/catalog/templates/catalog_page_list.tpl";

Для доступа к шаблонам можно воспользоваться классом PHPShopModules:

$PHPShopModules = new PHPShopModules();
$PHPShopModules->getParam("templates.catalog_page_list");

или

$GLOBALS['SysValue']['templates']['catalog']['catalog_page_list'];

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

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

  1. adminmenu - меню в административной панели. При такой конфигурации меню будет доступна из раздела "Модули" -> "Калькулятор Почты"

  2. faqlink - ссылка на инструкцию

  3. capability - флаг работы модуля в версии PHPShop 5 и выше

  4. version - версия модуля

  5. category - код категории модуля для навигации в списке модулей

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

Если модуль добавляет новые возможности (новые поля и функции) в штатные административные интерфейсы платформы, то требуется внести в конфигуратор модуля запись формата имя перехватываемого файлы административного интерфейса = "путь до файла добавляемых функций" пример:

[admpanel]
adm_catalogID="seourl/admpanel/adm_catalogID.php";
adm_catalog_new="seourl/admpanel/adm_catalog_new.php";

Интерфейс настройки модуля

Если модуль содержит опции настройки или параметры регистрации то обязательно наличие интерфейса, записываемый в /phpshop/modules/имя модуля/admpanel/adm_module.php. Для этих целей используется административный интерфейс модуля. Для активации настройки модуля в общем меню и ссылки на дополнительные опции служит файл настроек module.xml.

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

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

// Добавляем значения в функцию actionStart
function addTab(){
   global $PHPShopGUI;
   return $PHPShopGUI->setField("SEO ссылка:",$PHPShopGUI->setInput("text","seoname_new","catalog","left",300),"none");
}

$addHandler=array(
    'actionStart'=>'addTab',
    'actionDelete'=>false,
    'actionUpdate'=>false
);

Данный пример рисует новое поле SEO в карточке генерации каталога. Массив addHandler описывает в какие функции исходного файла будет внедрен код модуля. В нашем примере в функцию actionStart добавляется логика вывода новой закладки SEO.

Перехват административных интерфейсов (Hook)

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

// Добавляем значения в функцию actionUpdate
function writeContent(){
   $_POST['content_new'] = $_POST['name_new'].' Дефолтный контент для описания каталога';
}

$addHandler=array(
   'actionStart'=>false,
   'actionDelete'=>false,
   'actionUpdate'=>'writeContent'
);

Перехват внешних функций (Hook)

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

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

$this->setHook(__CLASS__,__FUNCTION__,$row,'РОУТЕР');

В новую функцию передается ссылка на объект (родительский класс) и переменная $row - в основном содержащая выборку из БД основной функции. Данная запись позволяет использовать методы исходного класса и массив данных из БД (повторная выборка не требуется). Роутер позволяет координировать место активации хука.

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

[hook]
phpshoppage="./phpshop/modules/users/core/page.core.php";

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

function index_security_hook($obj,$row) {
    if(!empty($row['user_security']) and empty($_SESSION['userName'])) {
        $obj->set('pageContent',ParseTemplateReturn($GLOBALS['SysValue']['templates']['users']['users_forma'],true));
        $obj->set('pageTitle','Только для авторизованных пользователей');
    }
}

$addHandler=array(
    'index'=>'index_security_hook'
);

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

Обновление

Модули поддерживают возможность обновления своей БД. При установке версия модуля пишется в таблицу "phpshop_modules_имя модуля_system" в поле "version" (1.0, 1.1 и т.д.). Версия файлов модуля указывается в install/module.xml тег version. Если версия файлов отличается от версии базы данных (БД), то в закладки информации по модулю будет соответствующая запись о расхождении версий БД с кнопкой "Обновить".

Отладка

Адаптация модулей для PHPShop 6

PHPShop 6 имеет немного отличный формат административных интерфейсов по сравнению с предыдущими версиями 4 и ниже. Новая панель открывает формы редактирования в общем оформлении, а не в отдельных окнах (как было в предыдущих версиях). Поэтому для миграции модулей во всех административных файлах (пример: returncall/admpanel/adm_module.php, returncall/admpanel/adm_returncallID), которые открывались в отдельном окне нужно убрать несколько строк (подключение к БД и подключение библиотек, так как они уже подключены в общем admin.php).

Сравнение кода модулей

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

$_classPath="../../../";
include($_classPath."class/obj.class.php");
PHPShopObj::loadClass("base");
PHPShopObj::loadClass("system");
PHPShopObj::loadClass("security");
PHPShopObj::loadClass("orm");

$PHPShopBase = new PHPShopBase($_classPath."inc/config.ini");
include($_classPath."admpanel/enter_to_admin.php");

// Настройки модуля
PHPShopObj::loadClass("modules");
$PHPShopModules = new PHPShopModules($_classPath."modules/");


// Редактор
PHPShopObj::loadClass("admgui");
$PHPShopGUI = new PHPShopGUI();

// SQL
$PHPShopOrm = new PHPShopOrm($PHPShopModules->getParam("base.returncall.returncall_system"));

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

// SQL
$PHPShopOrm = new PHPShopOrm($PHPShopModules->getParam("base.returncall.returncall_system"));

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

Для предотвращения возможных ошибок при использование самодельных модулей или модулей, удаленных в новой версии PHPShop (stat, iconcat, tester и др.) введена настройка capability в файл /install/module.xml. При отсутствии тега capability модуль не появится в общем меню доступных модулей после включения. Возможность включить/выключить модуль при этом остается для возможности отключения устарелых модулей из панели управления.

Изменились ссылки дополнительных подменю модулей с ?plugin=returncall на dir.returncall. Тег podmenu_icon больше не используется.+

Работа с БД

Для поддержки ядра самого последнего PHP 7 пришлось отказаться от устаревшей функции соединения с БД MySQL mysql_connect() и заменить ее mysqli_connect. При наличие в модуле нативных функций работы с БД MySQL с префиксом mysql_ необходимо заменить их на одноименные функции с префиксом mysqli_. В качестве ссылки на соединение с БД используется переменная $GLOBALS['link_db'] или $PHPShopBase->link_db или $PHPShopOrm->link_db;

Last updated 1 year ago

Was this helpful?

Изменить и дописать логику уже существующего раздела можно через .

Отладка происходит через отладочную панель, реализуемую черезPHPShopDebug, выполняющая роль вывода системной информации, полезной для разработчика и используемая при отладке скрипта. Отладочная панель включается модулем .

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

👨‍💻
Хуки
Debug
PHPShopOrm