После первого плагина на вордпресс решили написать такой же плагин для joomla, вроде как вторая по популярности система.

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

Тема в общем-то новая, требует на ПК пользователя вторую программу сервер, которая может уже напрямую общаться с оборудованием, подключенным к ПК.

Общение плагина joomla с сервером стандартно через http post json запросы на localhost к серверу.

Что в результате происходит

По сути к вашей облачной программе добавляются возможности обычной товароучетки.

Когда эти возможности могут быть полезны.

Есть например необходимость в админке принимать оплату по заказу наличными или по карте. Для этого требуется использовать у продавца кассовый аппарат и/или банковский терминал.

Теперь о joomla

Скачали joomla 4.4.8 наугад, чтобы не самую последнюю и не старую.

Первое ощущение, что разработчики не парятся с документацией. Русскоязычный форум есть, помогают, но все равно складывается впечатление, что joomla это для тех, кто не ищет помощь на стороне, а предпочитает изучать код php так сказать вживую изнутри (отладчиком имеется ввиду).

Нужен магазин

Итак нам нужен так называемый компонент типа магазин, где реализован механизм заказов. В joomla таких магазинов несколько JoomShopping, VirtureMart, вроде joomKassa и возможно ещё есть несколько. Это отличает джумлу от вордпресс, где только один WooCommerce.

Выбираем первое, что попалось под руку это JoomShopping.

Модуль, компонент, плагин, аддон, контейнер, расширение,...

Первое, что пришлось понять, это то, что магазин JoomShopping, как и любой магазин в joomle, это компонента и код этой компоненты (приложения) нам править нельзя, так как мы хотим сделать универсальное расширение, которое будет работать на всех сайтах после установки без доработок самого магазина.

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

Третье, что пришлось понять, это то, что только плагин может подписаться на события. А значит нам по любому нужен плагин.

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

И тут получается, что похоже нам нужен системный плагин, то есть плагин, у которого в манифесте group="system".

Модуль

Пятое, что пришлось понять это то, что похоже только модуль может отобразить в окне содержание нашего функционала.

Допустим надо в модуле отобразить пару кнопок и пару лэйблов, то есть небольшой по содержанию.

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

При этом заказ магазина визуально будет сразу под нашим модулем.

Шестое, что пришлось понять то, что плагин, получая содержание заказа в событии, должен у себя (в переменной класса) сохранить заказ, чтобы потом модуль, когда его начнут подгружать в систему смог забрать состав заказа из плагина и сформировать интерфейс для управления оборудованием.

Я могу ошибаться и скорее всего точно где-то ошибаюсь и есть более простой способ, но у нас заработало пока только в таком варианте.

То есть в результате есть модуль и системный плагин.

Примечание: надо отметить, что joomla работает пошустрее чем вордпресс в той же ОС и в том же железе на локалхост.

addScript

Странный нюанс в админке наблюдается при добавлении своего js или css файла через вызов addScript, а именно addScript добавляет в начале пути к файлу /administrator/..., что точно не приведет к месту хранения media ресурсов, таких как js и css.

Приходится предварять путь к файлу js переходом на более верхний уровень каталога, то есть добавлять вначале пути ../ .

Не знаю можно ли здесь выложить видео (небольшое), где показан процесс установки и настройки плагина, так как хоть он и бесплатный, но вторая часть - программа БИТ драйвер ККТ (сервер) платный. Не хочется, чтобы опять забанили.

Комментарии (15)


  1. sergeytolkachyov
    05.09.2024 15:59
    +2

    Кхм... На Хабре в хабе Joomla есть статьи, углубившись в которые можно получить картину по разработке в общем и в деталях. Если вы используете PHP Storm или другую IDE, то скорость и качество разработки на Joomla вырастает в разы. Тот же PHP Storm прекрасно показывает подсказки по методам ядра Joomla, что устаревает, а что нет, количество и имена аргументов функций и т.д. По Joomla заполняется новый портал документации: manual.joomla.org. Так же ссылки можно найти на портале русскоязычного сообщества Joomla - https://joomlaportal.ru/documentation.

    У Joomshopping развитая система событий плагинов. Использовать можно как его события, так и Joomla. Все зависит от контекста и задачи. С помощью плагинов можно внедряться в большинство мест и типов данных в Joomshopping, добавлять элементы интерфейса, отправлять данные в сторонние системы и т.д.

    Точно так же возможно вам не нужен был модуль, так как судя по описанию в статье, вы понимаете роль модулей в Joomla несколько иначе, чем оно есть на самом деле.

    По выполнению внешних запросов из Joomla на Хабре была статья - об HTTP Factory.

    Добавление своих js и CSS в Joomla происходит с помощью Web Assets Manager. Здесь на Хабре есть статьи со списками литературы, в документации Joomla тоже есть описания как работать с этим. Не говоря о том, что да, код ядра Joomla сам по себе документация и жто не редкость во фреймворках. Опять-таки PHP Storm читает PHP Doc blocks и подсказывает как работать с кодом...

    После прочтения вашего текста возникает ощущение, что вы прошли нелегкое испытание... Неужели это действительно так?


    1. kkmspb Автор
      05.09.2024 15:59

      Спасибо за ответ.

      Если вы используете PHP Storm

      VS Code подвернулся под руку

      По Joomla заполняется новый портал документации

      Я хотел сказать, что открытый исходный код меня вполне устраивает (документацию придумали лентяи).

      вы понимаете роль модулей в Joomla несколько иначе, чем оно есть на самом деле.

      Как я понял модуль для вывода визуальной части в какую-то позицию интерфейса. Но вот как например объединить плагин с модулем, то есть все в один модуль запихнуть не понял. А в принципе хотелось бы все из одного zip файла устанавливать.

      Добавление своих js и CSS в Joomla происходит с помощью Web Assets Manager

      addScript устарел, так надо понимать?

      PHP Storm

      Он платный? А то я платное не люблю с детства.

       ощущение, что вы прошли нелегкое испытание...

      Напротив, удовольствие не покидало эти дни. Это не С++ со статической сборкой из исходников.


      1. sergeytolkachyov
        05.09.2024 15:59

        Пробегитесь по статье https://habr.com/ru/articles/760850/, особенно раздел "Если б Хабр был сделан на Joomla". Получите общее представление что и зачем.

        Установить несколько расширений за 1 раз - легко. Для этого их собирают в пакеты. При установке можно ещё и зависимости установить, если они являются расширениями Joomla.


  1. progreccor
    05.09.2024 15:59

    а еще у joomla есть дружелюбный чат в телеграм где можно получить оперативную помощь по вашим вопросам - https://t.me/projoomla


    1. kkmspb Автор
      05.09.2024 15:59
      +1

      https://t.me/projoomla

      спс


  1. kkmspb Автор
    05.09.2024 15:59

    У меня все-таки вопрос висит в голове, никто не делал похожие расширения для джумлы, неужели потребности нет у пользователей? Я только в Вебассист встретил похожий вариант с kkmserver.


    1. sergeytolkachyov
      05.09.2024 15:59

      Конечно делали. Вот для Битрикс 24 https://web-tolk.ru/dev/joomla-plugins/wt-joomshopping-bitrix24-pro

      Вот для Amo CRM https://web-tolk.ru/dev/biblioteki/wt-amo-crm-library и внизу плагин для Joomshopping


      1. kkmspb Автор
        05.09.2024 15:59

        sergeytolkachyov54 минуты назад

        Конечно делали. Вот для Битрикс 24 https://web-tolk.ru/dev/joomla-plugins/wt-joomshopping-bitrix24-pro

        Вот для Amo CRM https://web-tolk.ru/dev/biblioteki/wt-amo-crm-library и внизу плагин для Joomshopping

        Посмотрел ссылки. Я имел ввиду возможность работать с оборудованием, подключенным к ПК пользователя админки - на эту тему разработки не нашел.


        1. sergeytolkachyov
          05.09.2024 15:59
          +1

          Можно посмотреть примеры в компоненте интернет-магазина Phoca Cart. Пример организации Point of sale - точки продаж. К компу подключен принтер для чеков, а интернет магазин используется в качестве ПО для ресторана кажется.

          Но смысл же тот же самый: Joomla в нужный момент времени отправляет JSON на нужный адрес и/или получает. Что там по этому адресу: чья-то CRM или свой компьютер/сервер - уже не так важно.


          1. kkmspb Автор
            05.09.2024 15:59

            в компоненте интернет-магазина Phoca Cart

            Спасибо изучим. Но похоже принтер для чеков это будет не кассовый аппарат.


            1. sergeytolkachyov
              05.09.2024 15:59
              +2

              Задача в целом та же самая: собрать JSON нужной структуры (или XML или еще что-то) и отослать на нужный endpoint.


              1. kkmspb Автор
                05.09.2024 15:59
                +1

                Задача в целом та же самая : собрать JSON нужной структуры (или XML или еще что-то) и отослать на нужный endpoint.

                Я с этим не спорю, я имел ввиду функционал для пользователя. Чего ему (пользователю) еще может не хватать, какие возможности...


                1. progreccor
                  05.09.2024 15:59

                  у каждого кто связывается с физическим оборудованием всегда потребности очень специфические. Поэтому получить "универсальное" решение очень сложно. Его можно получить только в рамках комплекса, который будет предлагаться с каким то готовым оборудованием.


                  1. kkmspb Автор
                    05.09.2024 15:59
                    +1

                    у каждого кто связывается с физическим оборудованием всегда потребности очень специфические. Поэтому получить "универсальное" решение очень сложно. Его можно получить только в рамках комплекса, который будет предлагаться с каким то готовым оборудованием

                    Я про это и говорю, что есть сервер под виндоус (типа БИТ драйвер ККТ), есть единый протокол для однотипного оборудования разных производителей (которые никогда не могут договорится между собой о стандарте). Мы изолируем разработчиков от проблем с поддержкой разных моделей разных производителей. Идея хорошая, но сложная. Но надо попробовать начать... кому-то


                    1. progreccor
                      05.09.2024 15:59

                      У нас есть интернет магазин radicalmart под Joomla. Может быть нам будет интересно по сотрудничать в этом направлении. Более подробно можно обсудить в телеграмм чате https://t.me/projoomla