1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - новый и перспективный форумный движок от бывших создателей vBulletin.

Пишем первый аддон для XenForo. MVC, шаблоны, стили, настройки, навигация — используем все!

Тема в разделе "Статьи по XenForo Framework", создана пользователем FractalizeR, 13 окт 2010.

Загрузка
  1. infis

    infis Местный Команда форума

    Регистрация:
    27.06.11
    Сообщения:
    5.525
    Симпатии:
    3.321
    Версия XF:
    1.5.9
    И, кстати, при использовании фраймворка с классами значительно легче потом и код повторно использовать и не путаться в "где и что делается". Хотя в любом случае это приводит к оверхеду самого кода. Его становится просто больше. Зато он замечательно раскладывается по папкам, а не превращается в кучу непонятных файлов php со сплошными инклудами :)
    Естественно, что иногда проще и быстрее писать без классов и напрямую обращаться к базе данных. В данном случае это не так. Поэтому лучше постараться понять, как писать правильно для XenForo, а не материться на "лишние" шаги.
     
    Oleg-2012 и Mirovinger нравится это.
  2. Toshax

    Toshax Новичок

    Регистрация:
    25.01.13
    Сообщения:
    2
    Симпатии:
    1
    Версия XF:
    1.1.1
    Возможно. Я же написал что возможно не полностью проникся религией.
    Может буду слишком наглым подкиньте материалов толковых по Zend и Xen в личку, что бы тут не засорять. Форум нравиться, но пока смотрю на него как баран на новые ворота. Все новое качется сложным.
    Когда-то и Drupal мне казался не логичным, а теперь строю сайты на нем с большим удовольствием.
    Все мы люди и ищем халявы и простоты.
     
    Oleg-2012 нравится это.
  3. Oleg-2012

    Oleg-2012 Местный

    Регистрация:
    21.04.12
    Сообщения:
    646
    Симпатии:
    267
    Похожая ситуация, тоже-бы не отказался от материалов толковых по Zend и Xen в личку, если есть у кого !;)
     
  4. infis

    infis Местный Команда форума

    Регистрация:
    27.06.11
    Сообщения:
    5.525
    Симпатии:
    3.321
    Версия XF:
    1.5.9
    Да я бы и тут не отказался. Если есть что-то толковое, то лучше сюда ссылки кидать.
    Кстати, тот же друпал тоже на фреймворке работает. Это не ZF, но общий принцип MVC тот же.
    Лично я изучал XenForo по туториалам на офсайте, а также через отладку чужих плагинов. Т.е., если нужна была какая-то функция (функциональность), то "подсматривал", как другие это реализовали в своих плагинах. К сожалению, по XenForo очень мало материалов. Хотя для ZF есть хорошая справочная система, но она недостаточна для понимания того, как работает XenForo. Разница в том, что в ксене используется своя надстройка над ZF, которая обеспечивает визуальные средства работы с подключением своих обработчиков событий, плюс свой шаблонизатор. Да и ксен содержит много готового функционала типа админ-панели, фраз, готовых классов обработки вводимых данных и т.д.
    Просто рекомендую использовать отладчики. Без них довольно тяжело будет разбираться. И еще очень полезным считаю использование IDE, которое умеет строить дерево классов с документацией. Код ксена хорошо документирован, поэтому в нормальных IDE классы подхватываются на ура.
    Ради интереса попробовал сделать трассировку - файл получился ну очень огромным. Зато по нему можно посмотреть все вызовы со всеми переменными. Хардкорненько, конечно, но все руки не дойдут распарсить его по-человечески, чтобы построить диаграму вызовов.
     
    Oleg-2012 нравится это.
  5. ApJIeKuHo

    ApJIeKuHo Пользователь

    Регистрация:
    08.03.13
    Сообщения:
    188
    Симпатии:
    28
    Версия XF:
    1.1.4
    Хм.. а есть где описание как с формами работать(ввод/вывод данных)?
    А то только вроде понял как оно идет, ан нет, опять не то.
    А в плагинах если лазить - не получается найти где там и что указывается.

    Интересует: форматы(числа/строки), поля(обязательные/не обязательные) и собственно сама работа с формой:
    Как создается, как заполняется, как заносится в базу(хотя тут вроде все понятно уже). В принципе конечно и сам со временем разберусь, но... думаю это будет всяко медленней чем если кто расскажет)) Да и велосипеды если честно изобретать не очень хочется(
     
    n0rt37 нравится это.
  6. RouR

    RouR Активный пользователь

    Регистрация:
    21.03.12
    Сообщения:
    61
    Симпатии:
    9
    Версия XF:
    1.2.0
    Допустим я хочу изменить XenForo_Model_Post метод recalculatePostPositionsInThread. Ну там, добавить пару полей в запрос, и вызов нового хелпера для доп. обработки данных.
    Расскажите как это сделать отдельным плагином, без изменения самого ядра.
    Если я отнаследую как MyExt_Model_Post extends XenForo_Model_Post то мне ведь и в контроллерах надо будет менять _getPostModel()
     
  7. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1.921
    Симпатии:
    1.160
    Версия XF:
    1.0.4
    Статья-пример в которой динамически расширяется класс ббкодов (модель можно сделать точно так же)
    http://www.xf-russia.ru/forum/threads/2152/
    Также реально полезная статья по архитектуре xenforo
     
  8. RouR

    RouR Активный пользователь

    Регистрация:
    21.03.12
    Сообщения:
    61
    Симпатии:
    9
    Версия XF:
    1.2.0
    Прописал обработчик события. Через дебаггер вижу что он отрабатывает на событие load_class, по идее надо вешать на load_class_model но почему-то тогда игнорит.
    Event Hint оставил пустым, кстати что в него прописывать то?

    И ещё вопрос, существует
    class XenForo_DataWriter_DiscussionMessage_Post extends XenForo_DataWriter_DiscussionMessage
    я хочу переопределить XenForo_DataWriter_DiscussionMessage котоый abstract - событие load_class вызывается с именем XenForo_DataWriter_DiscussionMessage_Post, а не XenForo_DataWriter_DiscussionMessage и как переопределить?
     
  9. RouR

    RouR Активный пользователь

    Регистрация:
    21.03.12
    Сообщения:
    61
    Симпатии:
    9
    Версия XF:
    1.2.0
    PHP:
    public function getDiscussionMessageDefinition()
        {
            return new 
    XenForo_DiscussionMessage_Definition_Post();
        }
    Не везде используется автолоадер :(
     
  10. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1.921
    Симпатии:
    1.160
    Версия XF:
    1.0.4
    Э-э-э-э... Что?
    Автолоадер или используется или нет, на то он и автолоадер, т.е. работает автоматически.

    Похоже Вы не совсем разобрались с архитектурой, поэтому проще напишите что конкретно хотите получить в итоге, а не просто сферически кони в вакууме. Тогда и подсказать проще будет.
     
  11. RouR

    RouR Активный пользователь

    Регистрация:
    21.03.12
    Сообщения:
    61
    Симпатии:
    9
    Версия XF:
    1.2.0
    Я разбираюсь, пишу плагин :)

    Я про это $this->getModelFromCache('XenForo_Model_Draft'); с последующим XenForo_Application::resolveDynamicClass($class, 'model');
    А тот кусок кода выпадает из общей архитектуры, считаю багом.

    У меня пока что два вопроса:
    - Event Hint, что в него прописывать?
    - Внесение изменений в логику js как производить?
     
  12. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1.921
    Симпатии:
    1.160
    Версия XF:
    1.0.4
    если бы модель создавалась через new - да это баг и не следование архитектуре. Но динамически наследуются только определенные типы классов (модели, контроллеры, вьюхи, датарайтеры и т.п.), т.е. те классы для которых есть отдельное событие load_class_*
    И XenForo_DiscussionMessage_Definition_Post не относится ни к одному из этих типов.
    В ивент хинт, который появился в 1.2, можно ничего не прописывать и будет поведение как в 1.1 или можно прописать имя класса для которого сработает обработчик загрузки (но если надо расширять несколько классов, это не очень удобно).
     
    infis и RouR нравится это.
  13. gunpowder

    gunpowder Активный пользователь

    Регистрация:
    17.09.13
    Сообщения:
    116
    Симпатии:
    1
    Версия XF:
    1.2.1
    Т.е. если хочешь добавить что-то в существующий шаблон , то его нужно удалять или как? Полностью заменять как бы другим? Если мне например не нравится как работает пару функций и один шаблон, связанный с ними.
     
    Последнее редактирование: 13 апр 2015
  14. FractalizeR

    FractalizeR XenForo Addicted Команда форума

    Регистрация:
    27.09.10
    Сообщения:
    1.085
    Симпатии:
    823
    Версия XF:
    1.3.2
    Создайте модификацию для шаблона. Зачем удалять-то.
     
    gunpowder нравится это.
  15. gunpowder

    gunpowder Активный пользователь

    Регистрация:
    17.09.13
    Сообщения:
    116
    Симпатии:
    1
    Версия XF:
    1.2.1
    а с функцией как быть? там всего лишь пару файлов, конечно, но хочется как-то по-человеческому сделать
     
  16. gunpowder

    gunpowder Активный пользователь

    Регистрация:
    17.09.13
    Сообщения:
    116
    Симпатии:
    1
    Версия XF:
    1.2.1
    Переформулирую вопрос. Если нужно переписать какой-то базовый функционал, то как это можно сделать используя систему эддонов?
     
  17. FractalizeR

    FractalizeR XenForo Addicted Команда форума

    Регистрация:
    27.09.10
    Сообщения:
    1.085
    Симпатии:
    823
    Версия XF:
    1.3.2
    В каком смысле - как сделать? Если функционал касается работы PHP кода, то аддоном можно расширить классы XenForo так, чтобы они делали то, что вам нужно. Если вам нужно изменить внешний вид шаблона, можно сделать модификацию шаблона (/admin.php?template-modifications/).
     
    Kolya groza morey нравится это.
  18. gunpowder

    gunpowder Активный пользователь

    Регистрация:
    17.09.13
    Сообщения:
    116
    Симпатии:
    1
    Версия XF:
    1.2.1
    Либо я неправильно задал вопрос, либо я не понимаю как это работает. Допустим, есть функция которая обращается к базе данных. Я хочу, чтобы эта функция брала параметр из $_GET и добавляла это как одно из условий в запрос. Непонятно как я могу расширением класса это сделать...
     
  19. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1.921
    Симпатии:
    1.160
    Версия XF:
    1.0.4
    Есть же мануалы от разработчиков с пошаговым созданием примитывных аддонов.
    Лично мне непонятно что тут непонятного.
    Самый простой вариант - возьмите любое дополнение изменяющее стандартный функционал ксенфоро и смотрите как оно сделано.
     
    Последнее редактирование: 14 апр 2015
  20. FractalizeR

    FractalizeR XenForo Addicted Команда форума

    Регистрация:
    27.09.10
    Сообщения:
    1.085
    Симпатии:
    823
    Версия XF:
    1.3.2
    Полистайте вот это: https://xenforo.com/community/threads/creating-an-addon.5416/
     

Поделиться этой страницей