За последние 24 часа нас посетили 19052 программиста и 1148 роботов. Сейчас ищут 654 программиста ...

Установочные модули в своей cms

Тема в разделе "PHP для новичков", создана пользователем Mamonts_cms, 25 фев 2019.

  1. Mamonts_cms

    Mamonts_cms Новичок

    С нами с:
    25 фев 2019
    Сообщения:
    3
    Симпатии:
    2
    Всем привет прошу помочь с реализацией модульности в cms
    Что было сделано

    Во-первых cms я пишу используя ООП

    В индексной странице я подключаю необходимый класс и работаю с ним cms состоит из ядра в папке core лежат все файлы классов каждый из них отвечает за какую либо инфу на сайте например файл cotalogs имеет в себе функции запросов в бд есть так же скажем для админки свои классы которые строят массивы данных для запроса и после передают их в класс ядра в итоге класс ядра возвращает результат запроса


    Что то я ушел от темы )))

    Так вот

    Ядро состоит из файла general.php в нем в приватную переменную я загоняю массив всех имён файлов классов ядра затем читаю пост запрос какое имя модуля я передал и подругам необходимый класс далее в каталоге админки тоже есть как я говорил свои классы но здесь я сделал все имена классов не в переменной а в самой бд в таблицу загнал все имена классов а в другую таблицу загнал ид юзера ид модуля и значение колонки access либо 1 значит юзеру можно пользоваться этим модулем и значение 0 значит нет

    Ох не умею я объяснят (

    В общем таким образом я получаю возможность сделать так что бы модули можно было устанавливать но есть одна проблема

    Имена колонок любых таблиц и запросы находятся в классе ядра cms вопрос выходит мне нужно передавать в класс ядра имена колонок что бы была возможность сделать модули установочными или можно это как то решить по-другому? Просто если передавать имена колонок то это немного сложнее так как например для запроса товаров я передаю массив данных в них могут быть идентификаторы определенных категорий товаров ид бренда ид значения характеристики минимальную и максимальное значение цены итд в итоге для построения запроса я соедняю кучу таблиц и получаю данные а тут выходит что я сразу должен построит .запрос в модуле админке а затем текст запроса передать в ядро тогда возникает другой вопрос зачем мне вообще тогда ядро до и смысл ООП падает в таком случае (

    Так же я не понимаю как сделать следующее

    Например я хочу что бы можно было устанавливать дополнения например дополнение будет дополнять запрос товаров ещё одним каким либо фильтром но для этого нужно же ещё кроме подключения класса внести изменения в шаблон админки и сайта для шаблонов я юзаю смарти выходит что бы была возможность дополнять шаблоны при установке я придумал такую вещь но не знаю насколько это будет правильно что придумал

    Некую разметку страниц

    У нас есть определенные участки блоков на с разницей хидер, футер, контентная часть , часть для соли , часть для менюшек, часть для фильтров, часть для самой какой либо инфы я вот о чем подумал а что если я через условие (если не пусто ) буду передавать в шаблон так же массив нового кода от дополнения где то так например в хидере будет код вывода менюшки далее в цикле я сперва перебирают все страницы которые без дополнений а затем запускаю цикл по дополнению но и тут вопрос а что если дополнение должно отключить стандартную менюшек и полностью заменить ее слабой? И как в этом случае быть со стилями?

    В общем вопрос в том как сделать возможность установки дополнений я уже читал Гугл но везде пишут что есть куча методов но нигде не нашел толково расписанного метода не могли бы поделиться ссылками на мат часть?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.564
    Симпатии:
    1.757
    Можно хуки расставить. Или какие-нибудь области, с каким-нибудь особым синтаксисом, в которые можно через админку вешать модули. При выводе шаблона ловишь эти штуки и заменяешь на вывод реальных модулей. В принципе, проблема 200 раз решённая, посмотри какую-нибудь CMS, как сделано. К примеру, подход Joomla (да, в принципе, он везде примерно такой). В Open Cart посмотри, как это в коде сделано. Там, конечно, код страшненький, но зато легко понимаемый.

    А ты в курсе, для чего запятые, точки нужны?
     
  3. Mamonts_cms

    Mamonts_cms Новичок

    С нами с:
    25 фев 2019
    Сообщения:
    3
    Симпатии:
    2
    О запятых извините я не знаю правописания :-(
    Что касаемо посмотреть как сделано у других cms спасибо посмотрю

    Так же Вы мне не написали о том что делать с наименованиями колонок?
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.564
    Симпатии:
    1.757
    Каждый модуль делает запросы перед тем как вывести. Вполне можно уложить это и в ООП, и в MVC.
    Русский - не твой родной язык? Тогда вопросов меньше. Но всё равно. Ты не можешь освоить синтаксис обычного языка, а берёшься за язык программирования.
     
  5. Mamonts_cms

    Mamonts_cms Новичок

    С нами с:
    25 фев 2019
    Сообщения:
    3
    Симпатии:
    2
    Хотя по наименованиям я так же вроде и сам догнал думаю можно передавать в ядро ещё один массив с дополнительными именами и дополнительными фильтрами (думаю что вряд ли кто-то будет удалять колонки из таблиц бд ) а только дополнять
    --- Добавлено ---
    Русский мой язык! Просто я в школе не учился ( детство было такое) что касаемо программирования для меня это интересно а изучать правописание не интересно ( понимаю сейчас начнется что то типа пожалей людей им же читать) но такой вот я !
    --- Добавлено ---
    Матери не было отец бухал я в школу не ходил а ходил собирал бутылки и метал сдавал их и покупал нам с сестрёнкой поесть, в 13 лет пошел работать шкерщиком на рыболовное судно в общем в на школу времени не было (от социальных служб прятались в подвале) нам не хотелось идти в детстве дом щас встаю на ноги имею две организации обе занимаются программированием 1с и созданием сайтов в 2013 я написал свою cms и продаю ее но надоело постоянно при доработках вручную ставить модули вот и решил что неплохо было бы сделать установочные дополнения, что касаемо того как я пришел к программированию , я устроился работать в автосервис менеджером там меня научили работать с 1с мне было неудобно работать с тем функционалом что был в ней и я начал интересоваться о том как ее переделать в итоге написал им новую конфигу а далее устроился работать в фрагч там проработал и уже начинал изучать c++ потом c# затем php сночало написал свою программу на c# бух учёт, торговля и склад работает шустро и очень удобная в место 1с стал продавать затем написал cms и начал продавать затем соединил мою прогу с cms прога работает с ней напрямую готовит запросы к бд сразу в c# а затем отправляет их на api сайта в итоге таким образом производится работа с контекстом сайта. В общем думаю я неплохо преуспел даже неучтвшись в школе


    Что касаемо моего вопроса о модулях вы подумаете что я такой умный и такие вопросы задаю отвечу для меня этот вопрос сложный
     
    AlexProg и romach нравится это.
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.797
    Симпатии:
    647
    Как определяется необходимый класс? По внутреннему (техническому) адресу?

    Если модули фронта отвечают за контент определенных страниц сайта, сделайте примерно так же, как в админке, т.е. заведите поле module и т.п. в специальной таблице сайта. Простейший пример: беру за основу эту модель, расширяю ее осн. таблицу полем module, расширяю поле mode доп. флагами. Тогда сама интеграция сводится к запросу вроде
    Код (Text):
    1.  
    2. INSERT INTO `site_categories` (`id`, `name`, `bits`, `module`) VALUES
    3. ('files', 'File Browser', 61, 'files');
    Ну или дописывайте список роутов в соотв. файле. При установке, естественно, анализируете все уже установленное.
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    ПМСМ задачу надо разбить на
    - систему подключаемых дополнений (плагинов)
    - события, в момент которых можно что-то добавить и
    - расширение/замену шаблонов вывода.
    Подобное уже решается в "коробочных" CMS типа WordPress. Так что рекомендую ознакомиться.

    Попробую сформулировать:

    Пусть каждый плагин хранится в отдельной под-папке в project/plugins/ например. На этапе первоначальной загрузки CMS читает записи из таблицы активированных планигов и для каждой из них инклудит соответствующий файл из project/plugins/plugin_name/listener.php В этом файле происходит инициализация плагина — он регистрирует свои обработчики событий. Например так
    PHP:
    1. listen_event('after.load_topic_items', function(&$payload) {
    2.     ... что-то делаем при наступлении события с указанным именем ...
    3. })
    Где угодно в коде могут встретиться вызовы событий. Это может быть просто вызов функции как-то так:
    PHP:
    1. raise_event('after.load_topic_items', $data)
    Если на такое событие зарегистрированы фунции-обработчики, они все будут последовательно вызваны с указанным аргументом.

    Можно завести правило по которому любой плагин может подставить свой шаблон вместо стандартного, если по определенному пути в нём есть файл шаблона. Это может быть как шаблон целой страницы, так и отдельный подключаемый блок.

    По быстрому нагуглил чего почитать НЕ про ВордПресс, а в более широком контексте :)
    https://stackoverflow.com/questions/42/best-way-to-allow-plugins-for-a-php-application
    https://stackoverflow.com/questions/4471183/php-event-listener-best-practice-implementation
    https://stackoverflow.com/questions/37585776/how-to-implement-theming-in-laravel-5
    --- Добавлено ---
    P.S. Где-то, то ли в Joomla то ли в Magento "модулями" называют блоки для вывода в шаблоне. Суть та же, что в имени события:
    если плагин зарегистировал свой обработчик на это имя, он будет использован, когда такое имя встретится в шаблоне.