Вход • Регистрация

Создание полноценного модуля

  • 27 марта 2011 г.
  • Для создания довольно специфичного проекта, требуются довольно серьёзные доработки. Имеющиеся модули не могут решить поставленных задач, в полном объёме, даже при совсем незначительных доработках.
    Совсем не хочется коверкать рабочую часть CMS, которая постоянно дополняется и улучшается, по причине того, что над существующим функционалом работают люди, у которых есть свой чёткий план развития проекта, в рамки которого не входит максимальное соответствие моему проекту.

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

    Решение:
    Создаём 6 файлов в кодировке UTF8 (без BOM) которые организую ядро модуля.
    example.php – Главный класс модуля (контроллер)
    example.admin.php – Подключение интерфейсов управления модулем
    example.admin.config.php - Конфигурирование модуля
    example.install.php – Инструкции для правильной интеграции и удаления модуля
    example.model.php – Модель модуля
    example.view.php – Отображения модуля (шаблоны)

    модуль нормально интегрируется в систему, но в итоге при переходе а страницу сайта, за которым закреплён данный модуль, получаем пустую страницу без каких либо данных и информации об ошибках. Следовательно происходит где-то краш. Трудно писать для чёрного ящика. ;)
    В чём проблема? Прикрепляю пример. Спасибо.
  • 29 марта 2011 г.
  • Действительно всё так плачевно, что не разобраться за 5 минут? Эх
    • 29 марта 2011 г.
    • если честно, я, например, только скачал. посомтреть даже времени не было)
    • 29 марта 2011 г.
    • А у нас 4.4 горит
      • 29 марта 2011 г.
      • надеюсь завтра будет! затормозили работу над проектом, что бы поставить сразу на новую версию движка, ждем вас ))
  • 09 апреля 2011 г.
  • Хорошо, пойдём всё сначала раз уж запущена новая версия.
    У структура стала жестковата не могу написать инсталер для модуля нужна помощь.
    Таблица site осталась вполне понятной, это список установленных модулей.
    таже rewrite, таблица для переопределения путей, а вот дальше полный мрак.

    adminsite сюда идут множественные обращения как правильно заполнять данную таблицу
    adminsite_parents заполнение будет зависить от наполнения adminsite.

    Плюс добавилось несколько файликов:
    example.sitemap.php - насколько необходимо наличае этого файла?
    admin/example.admin.category.php - тоже самое, нужно ли.
    admin/example.admin.menu.php - появился в результате значительного изменения механизмов создания и управления меню (тоже не разобрался пока что и как тут)
  • 12 апреля 2011 г. , редакция: 12 апреля 2011 г.
  • Мне забить на это дело и не покупать лицензию под проект чтоли? Из за того что невозможно сделать в кустарных условиях для закрытого ядра модуль. Точнее проект 1 а лиц понадобится штук 10 может больше если попрёт.
    • 12 апреля 2011 г.
    • Ща разберемся
      • 12 апреля 2011 г.
      • обясните по подробнее про эти таблицы

        adminsite
        adminsite_parents

        дальше я соберу всё в кучу если опять будет белый экран или будет всё ок. Выложу архивчик сюда.
        И будем дальше разбираться рисовать архитектуру, которую нужно знать стороннему разработчику модулей.
        • 12 апреля 2011 г.
        • Стороннему разработчику нужно знать про "Режим разработки", который спасает от белого экрана.
          • 12 апреля 2011 г. , редакция: 12 апреля 2011 г.
          • Хоть включай хоть не включай - белый экран это 0 байт и причина такого поведения вообще не понятна. Потому, что трейсить нельзя. Вот. Может быть я что-то упустил и модуль не корректно подключается к ядру может ещё что нибудь.
            Именно по этому я начал всё сначала и пытаюсь разработать модуль, который ничего не делает но тем не менее в рабочем состоянии и имеет все возможности к дальнейшему расширению до уровня любой сложности. Для движка v. 4.4
            • 12 апреля 2011 г.
            • Режим разработки выводит ошибки. Белый экран при включенном режиме разработки может выводится по двум причинам:
              1. прерывание работы скрипта:
              Код
              exit;

              2. выводить ошибки на экран никак нельзя из-за настроек хостинга. но тут уж надо боротся с хостингом, так как отключение этой возможности совсем не есть лучшее решение в настройке сервера.
              В остальных случаях на экран выведется ошибка, по которой можно понять в каком месте Вы ошиблись.
              • 12 апреля 2011 г.
              • Хостер тут ни причём, потому что его попросту нет. Работы ведутся на собственной машине, в других проектах режим отладки включен и работает нормально. exit; не использовал, но тем не менее.
                Вопрос остаётся открытым
                На данный момент надо написать правильный инсталятор модуля для чего нужно знать и чётко себе представлять как и что с таблицами: adminsite и adminsite_parents.
    • 12 апреля 2011 г. , редакция: 12 апреля 2011 г.
    • Почему для закрытого? Документацию обновляем потихоньку. Назначение новых файлов в документации появилось в первую очередь. Вот, к примеру, у модуля "Магазин" описано для чего какие файлы нужны http://cms.diafan.ru/dokument/full-manual/modules/shop/
      Но если Вы создаете свой модуль, то зачем Вам лишние файлы? Если Вы не знаете для чего они нижны, значит Вам пока не понадобилась та функция, которую они выполняют. Новые файлы - новые возможности, а основная структура осталось той же.
      Лучше идти от минимального: стал вопрос как добавить ссылки модуля в карту сайта, прочитали о карте сайта: http://cms.diafan.ru/dokument/full-manual/modules/map/ , узнали о файле example.sitemap.php
      Инсталл модуля тоже, я считаю не нужен для одного сайта. Добавили таблицу модуля в бд, добавили пункт меню в site.ru/admin/adminsite/ и не нужно разбираться для чего нужна табилица adminsite и пр.
      В этом удобство разработки сайта под cms - вам не нужно делать универсальных решений, Вам нужно решать конкретные задачи. Поэтому у нас разработка функций в службе исполнения заказа идет гораздо быстрее, чем внедрение этих же функций в CMS. Так как написать решение для конкретного сайта гораздо проще.
      • 12 апреля 2011 г.
      • Ещё раз скажу. Подобных ресурсов будет не один - это однозначно и для каждого заниматься переливанием будет не удобно и будет отнимать много времени. Лучше сразу залезть поглубже и разбить лагерь вместо того чтобы ночевать на ветке, которая может в один прекрасный день отломиться :)
        Если я не знаю толком о новом функционале, это не значит что он мне не нужен, по этой неграмотности я могу придумывать какие нибудь новые способы изобретая велосипед. Это не есть хорошо для проекта в целом.
        • 12 апреля 2011 г. , редакция: 12 апреля 2011 г.
        • Мы планируем в ближайшее время обновить документацию, где в разделе Архитектура diafan.CMS: http://cms.diafan.ru/dokument/full-manual/architecture/ будет описаны особенности новой версии.

          Сейчас уже Вы можете почитать назначение новых файлов в разделе Модули.
  • 12 апреля 2011 г.
  • Ребята, давайте искать золотую середину, коей является документация, в том или ином виде. Это должна быть универсальная база знаний. Если кинуться в крайности, то нам тоже не удобно объяснять одному пользователю его частного случая, другому - другого частного случая, третьему - третьего. Потому что это всегда почти одно и тоже, только в разном виде. И если не понимать принцип, можно бесконечно спрашивать одно и тоже, хотя каждый будет уверен, что его случай уникальный.
    Вот у Дмитрия в принципе вопрос правильный "как создать модуль с нуля". Почему в принципе? Потому, что в документации у нас описано, как устроены модули, т.е. есть сухая строгая теория. Но сторонним пользователям, как оказалось , нужно еще и пошаговое практическое руководство. Давайте в вопросах и ответах результатом этого топика сделаем как раз пошаговое руководство, что сделать, чтобы создать простой модуль.
    И затем покумекаем, какая еще нужна информация о работе с CMS, и в каком виде.
    • 13 апреля 2011 г. , редакция: 13 апреля 2011 г.
    • Вот Витал тебе 5 баллов. Сейчас почищу основные файлики и выложу сюда дальше опишеш что делать надо для того чтобы заработало :) или могу постараться картики нарисовать для большего понимания.
      Например после мучительных подуг с Joomla! я нашёл для себя отличное решение CodeIgnitor и меня очень порадовал тот факт, что очень качественная документация к нему шла и можно было вкуриться пополной, за сравнительно небольшой промежуток времени, но к сожалению доки были на английском поэтому приходилось переводить. Вот если бы в доках были бы такие небольшие вкрапления кода чтобы можно было разобратся самому то вопросов бы у меня по крайней мере не возникало.
      Для интереса вот ссылка, например контроллер: codeigniter.com/user_guide/general/controllers.html
  • 13 апреля 2011 г.
  • Шаг 1. Необходимый минимум для создания нового модуля.
    Модель - Шаблон - Контроллер, позволяют создать блок для вывода, какой либо информации в зависимости от каких либо остоятельств.

    Теперь попробую зарегистрировать его и вывести на страничке сформированные в нём данные.
  • 13 апреля 2011 г. , редакция: 13 апреля 2011 г.
  • Давайте тогда пошаговое руководство создавать.
    1. Первым делом любой разработчик должен знать и помнить, что при любых манипуляциях с кодом надо включать режим разработчика и отключать кэш. Это
    define("MOD_DEVELOPER", TRUE);
    define("MOD_DEVELOPER_CACHE", TRUE);
    в файле config.php
    Или две соответствущие галки в административной части сайта "Параметры сайта" - "Режим разработки" site.ru/admin/config/
    Режим разработки будет выводить все возникащие ошибки, а отключеный кэш сразу все актуальные данные из БД.

    2. Опираемся на документацию видим, что нужны три минимальных файла example.php example.modelphp и example.view.php. (Дмитрий, у Вас все правильно в архиве.) Создавайте папку /modules/example/ и кладите туда эти три файла. Затем можно идти в админку, создавать страницу и на нее вешать этот модуль. Создавайте "Страница пример" и в "Дополнительно" - "Прикрепить модуль" уже будет Ваш example. Движок сканирует папку /modules/ и выуживает оттуда подпапки модулей.
    В выпадающем списке модуль будет называться "example". Чтобы там было написано "Супер-модуль" или иное Ваше русское название, надо определить переменную _LANG_EXAMPLE в языковом файле /language/ru.php

    //Пример
    define('_LANG_EXAMPLE', 'Супер-модуль');

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

    После этого открываете на сайте страницу - на ней исполнится Ваш модуль

    Пробуйте, отписывайтесь что получилось.

    Далее:

    3. Если используется БД, таблицу надо создать. По умолчанию называйте ее как модуль. Если модуль example, то и таблица должна быть prefix_example, если есть несколько таблиц для модуля, то prefix_example_category и т.д. В дальнейшем рассмотрим как создавать инсталлы, но по сути в файле инсталла те же самые команды для SQL по созданию/удалению таблиц.

    4. Административная часть модуля...
    • 14 апреля 2011 г.
    • Залил. добавил страницу. Ура example появилось. Выбрал. Сохранил. Перешёл на сайте на страницу. Замечательно модуль отработал. Добавил в ru.php запись на русском. Захожу в редактирование страницы в ожидании что example поменяется на то что я в языковой пакет написал. Упс ни того ни другого. прикрепил другой подуль, думал может из за того что прикреплён не показывается. А нет. Пропал совсем. Теперь что делать? Удаление записи из языкового пакета тоже не помогло. Добавление удаление страницы тоже не помогло.
      • 14 апреля 2011 г.
      • Так. Т.е. модуль залили, папка называется /modules/example/ и там сидят три файла example.*.php
        Подключили модуль к странице - вывелся, отработал. В выпадающем списке подключения модуля было написано example, правильно? Вы пошли в /language/ru.php и добавили строку
        define('_LANG_EXAMPLE', 'Название модуля');
        и все сломалось?
        Добавили для верности в середину файла, где-нибудь рядом с другим модулем, например с новостями, запятые и скобки не перепутали и не перемешали с другими? _LANG_EXAMPLE - называется так же как модуль буква в букву, но заглавными?
        • 14 апреля 2011 г. , редакция: 14 апреля 2011 г.
        • Совершенно верно.
          Строка добавлена перед разделом описывающим администраторскую часть перед строкой

          Код
          define('_LANG_FORUM_NEW_MESSAGE', 'Непрочитанные сообщения');

          define('_LANG_EXAMPLE', 'Болванка');

          //Администрирование
          • 14 апреля 2011 г.
          • Ну если не дадите доступ к этому проекту или еще хоть какую-нибудь информацию кроме "не работает", мне сказать нечего тогда. Это простейшие движения и я параллельно делаю их же у себя. Пытался нарочно переименовать и поломать названия и файлы - ничего не исчезает. Не могу представить, как может не работать. То же самое, что сказать <?php echo "Мир"; ?> - не работает!
            • 14 апреля 2011 г. , редакция: 14 апреля 2011 г.
            • Ну это я понимаю на моей машинке это всё добро на столе стоит. Попробую ещё раз. Всё убить поставить и сделать. Но с другой последовательностью. Сначала в пакете русскую подпись пропишу, а потом запустить попробую.
              • 14 апреля 2011 г.
              • Да никак не может строка в языковом файле убить модуль!
                Нет её - выводится имя латиницей. Добавили перевод - он подхватился. Неправильно перевод сделали - не подхватился, продожит выводить латиницу. Была латиницей, сделали перевод, обновили страницу - все перевелось.
  • 16 апреля 2011 г.
  • Цитата
    Давайте сделаем общий тестовый демо-сайт что-ли, на нормальном хостинге, с общим доступом на FTP для просмотра файлов...


    давайте, целиком за!
    • 02 августа 2011 г.
    • Потребовалось добавить настраиваемые поля (дополнительные параметры) для различных типов объектов.
      Столкнулся вот с какой штукой:
      Разобрал 3 базовые таблицы - (param:список параметров, param_element: значения параметров, param_select: списки выбора параметров для селекта и мультиплов)

      ВОПРОС: Для чего используется поле value в param_select ?
      интересуюсь с целью того чтобы сохранить поведение работы (типовую схему обработки).
      • 04 августа 2011 г.
      • Судя по коду feeedback.admin.param.php строка 157-189. value в таблице param_select отвечает за значение checkbox-а в списке из нескольких элементов.
  • 03 августа 2011 г. , редакция: 03 августа 2011 г.
  • Начал делать админку для модуля.
    Полагаю необходимо 2 файла.
    module.admin.php - непосредственно часть которая ответственна за работу с модулем из админки.
    module.admin.config.php - если необходимы средства настройки.
    Как я понимаю - этого недостаточно, чтобы в админке появилась ещё одна строчка скажем в разделе контент. Что-то надо написать в базе скорее всего.

    ВОПРОС: Какие манипуляции ещё нужно произвести для того чтобы добавит управление модулем из админки?
  • 03 августа 2011 г.
  • Что записывать в поле numrow таблицы adminsite?
    • 04 августа 2011 г.
    • Я думаю ничего не нужно - для этого существует специальный интерфейс, доступный по адресу: http://site.ru/admin/adminsite/.
      • 04 августа 2011 г. , редакция: 04 августа 2011 г.
      • Плросто я руками в табицу {adminsite} добавил строку а в этом поле какие-то цифры. А у меня 0 остался. Вот теперь и думаю каких траблов мне ожидать.
        Впрочем добавил автоматом - картина такая же numrow = 0.
  • 13 декабря 2011 г.
  • Такая штука.
    Есть таблица с Терминалами соответственно поле name в этой таблице отсутствует в виду того, что Какую информацию сюда писать? Просто слово терминал? Както по моему не очень правильно.
    При выводе списка терминалов в админке через метод $this->list_row();
    Вылазит ошибка следующего плана Unknown column 'e.name' in 'field list' query ...
    Что делать? добавлять пустое поле не очень хочется и писать собственный метод для модуля тем более.
    • 15 декабря 2011 г.
    • Решил проблему просто переименовал поле месторасположения на 'name'.
      • 15 декабря 2011 г.
      • А можно было просто прописать $this->name='text'; // где text имя вашего основного поля
  • 15 декабря 2011 г. , редакция: 15 декабря 2011 г.
  • Есть модуль банк там информация о банках: название адрес телефон... и есть у модуля банк подмодуль Банкомат(терминал) в админке это выглядит как подраздел со списком терминалов банков держателей.
    Физически выполнено в виде файла /banks/admin/banks.admin.cashpoints.php
    Хочу добавить в главное меню ссылку на этот подмодуль. Вот хочу спросить как это делать.
    надо создавать файлы /banks/banks.cashpoints.php, /banks/banks.cashpoints.model.php, /banks/banks.cashpoints.view.php для фронт енда или зашивать функционал в /banks/banks.php, /banks/banks.model.php, /banks/banks.view.php или я зря решил такой под модуль вcтроить внутрь модуля банк?
    Вот что-то както должно походить на вкладку категории в шопе и выбираться при формировании меню на чегото както я пока не могу допетрить как это работает.
    • 15 декабря 2011 г.
    • Проще будет /banks/banks.php, /banks/banks.model.php, /banks/banks.view.php - добавить новый функционал (или вынести его в файлы и подключать через include), потому что к странице прикреплен модуль Банк - он и будет отображаться.
      • 15 декабря 2011 г. , редакция: 15 декабря 2011 г.
      • Понятно - значит лучше переделать и банкоматы отдельным модулем сделать прилепив потом это в виде доп модуля к банкам - так же как корзина к шопу прикручена.
        Ну вот блин - решил всё в одном попробовать сделать - получается не очень юзабельно :)
        • 16 декабря 2011 г.
        • Можно сделать и отдельно так например сделан модуль order.payment.php доступный по адресу http://site.ru/order/payment/

Новости

  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 
  • 15 декабря 2023 г.
  • Подводим итоги 2023 года. Выпустили новую сборку DIAFAN.CMS 7.1.1, вводим новые тарифы на аренду сайта и коммерческую поддержку и автообновления с января 2024 г., строим планы на будущий год.
  • 25 июля 2023 г.
  • Выпустили очередную сборку DIAFAN.CMS 7.0.1. Она уже доступна к установке.

Блоги

  • 15.12.2023
  • В новой сборке DIAFAN.CMS 7.1.1 мы расширили функциональность баннеров, уделили внимание YML-фиду для Яндекс.Маркет, улучшили “Настройки шаблона”, оформили модуль лога действий и разработали “Заметки” для пользователей административной части сайта. Также проработали замечания и предложения наших пользователей, исправили несколько ошибок.

Форум