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

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

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

Загрузка
  1. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Что-то на шаге создания свойства стиля после выбора "Скаляр" невозможно выбрать параметр "Цвет" (впрочем, как и любой другой). Что может быть?
     
  2. CyberAP

    CyberAP Местный

    Регистрация:
    05.10.10
    Сообщения:
    2 604
    Симпатии:
    1 660
    Версия XF:
    1.5.10
    Попробуйте текущее значение удалить, сохранить, затем попробовать изменить. Хотя проще будет просто удалить это свойство и создать такое же, только другого типа.
     
  3. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Все. Разобрался. Это у меня Firefox так себя ведет. В опере все норм. Значит, скорее всего, какое-то дополнение в нем "косячит".
     
  4. Yoskaldyr

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

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Очень похоже на adblock plus
     
  5. cyberdaemon

    cyberdaemon Местный

    Регистрация:
    08.10.10
    Сообщения:
    41
    Симпатии:
    23
    У меня такое чувство, что я этот "велосипед" вообще никогда не освою, чисто глаза разбегаются на этих иероглифах и нифига не могу уловить алгоритм всей этой писанины (может мозги пересадить надо, не знаю:)).
     
  6. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Не. У меня он не стоит. Да и фиг с ним. Потом как-нибудь разберусь. Главное, что причина найдена.
     
  7. snark

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

    Регистрация:
    21.12.11
    Сообщения:
    11
    Симпатии:
    2
    Версия XF:
    1.1.1
    Сейчас загрузил какой-то плагин, посмотрел его.

    По статье допустим я разберусь, фрэймворк тоже покурю. Но я никогда еще не упаковывал код в XML. Надеюсь это не ручками делается? Поделитесь секретом.
     
  8. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    XML плагина делается путем экспорта его непосредственно из админки ксена. Языковый XML также делается через экспорт прямо из админки. Поэтому можете не беспокоиться о том, как этот файл нужно делать. Руками его делать не придется.
     
  9. snark

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

    Регистрация:
    21.12.11
    Сообщения:
    11
    Симпатии:
    2
    Версия XF:
    1.1.1
    это значит, что в файлы ядра лезть не придется. радует. а то извращение наподобие модулей ipb мне совсем не нравится.
     
  10. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Лезть придется, но не для изменения, а для исследования :)
     
  11. Kronger

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

    Регистрация:
    18.01.12
    Сообщения:
    31
    Симпатии:
    16
    Версия XF:
    1.1.3
    Всем привет.​
    Долго выбирал движек и остановился на XenForo - даже купил уже.​
    Теперь сижу разбираюсь в сём произведении искусства :)
    Уважаемые Гуру форума подскажите начинающему Ксенаводу:​
    1) тут разве не пропущено в самом конце $routePath может должно быть так:
    PHP:
    return $router->getRouteMatch('LikeReviewRus_ControllerPublic_Index''index''likes-review'$routePath);
    2) мне во всём примере не понятен принцип указания адреса по которому создается страница и по которому она будет доступна. Если это задается в контроллере, то переменные
    'index', 'likes-review' зададут адрес 'index?likes-review' - правильно я понял или адрес задается гдето в другом месте?

    3) Откуда взялась переменная LikeReviewRus_ViewPublic_Index - она нигде на фигурирует и каталога ViewPublic нет.
    PHP:
    return $this->responseView('LikeReviewRus_ViewPublic_Index''likereviewrus_index'$viewParams);
    4) Обязательно ли называть файл контроллера Index.php или XenForo вообще не смотрит на названия файлов, главное чтобы в нужном каталоге лежали файлы т.к. она лезет во все файлы - компилит их и классы хранит в базе и от туда их вызывает?

    5) посидел помедитировал и кажись понял что ответ на 4) вопрос.
    к примеру LikeReviewRus_ControllerPublic_Index - это фактически путь к файлу контроллера, правильно понял?

    Но на 3) вопрос все равно ответа нет ведь каталога ViewPublic нет.
     
  12. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Вовсе нет. Последний параметр опциональный и тут не нужен. Либо в данном случае должен быть пустой.
    По идее должно быть index/likes-review.
    Похоже на ошибку. Действительно при таком указании должен быть каталог ViewPublic с файлом Index.php внутри.
    Имя класса и ссылки на их имена обычно задаются через library/ИмяПлагина/ИмяКласса/ИмяКласса/ИмяФайлаСОписаниемКласса.php, которое преобразуется в ИмяПлагина_ИмяКласса_ИмяКласса_ИмяФайлаСОписаниемКласса. Таким образом символ подчеркивания по факту заменяется на слеш, и фреймворк именно по этому принципу пытается обнаружить описание класса и загрузить его.
    Так работает автолодер. Если что-то не до конца понятно, то посмотрите документацию по Zend Framework. Ксен сделан на нем.
    Ответ на 5-й пункт - Вы правильно поняли :)
     
  13. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361

    Не должен. папка ViewPublic и конкретные классы в ней создаются только в случае, если надо провести дополнительные манипуляции с параметрами шаблона перед выводом. Или, если нужно выводить разное содержимое (обычный html или json) в зависимости от типа запроса.
     
    RouR и Kronger нравится это.
  14. Kronger

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

    Регистрация:
    18.01.12
    Сообщения:
    31
    Симпатии:
    16
    Версия XF:
    1.1.3
    Ага.
    Значит первый параметр: LikeReviewRus_ViewPublic_Index - это предобработчик вывода шаблона.
    PHP:
    return $this->responseView('LikeReviewRus_ViewPublic_Index''likereviewrus_index'$viewParams);
    Значит если нам не надо проводить хитрых манипуляций при выводе шаблона.
    То мы умышленно даем название НЕ существующего Класса и пути.
    Но чтобы никого не путать, соблюдаем структуру названия :
    ИмяПлагина_ViewPublic_ИмяPHPфайла

    так?
    P/S/ я смотрю радко кто внимательно разбарается в коде всё по верхам особо не вдаваясь в смысл. Ведь вопрос лежал на поверхности при внимательном рассмотрении.
    Посмотрел другие скачанные хаки. Там такой же прикол - ссылка на не существующий файл (класс).
     
  15. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    Именно так.

    А про внимательность и прочее — исходные коды XenForo достаточно хорошо документированы и если посмотреть в описания методов, то все становится ясно.

    ЗЫ. Ссылки на несуществующий класс есть и в самом форуме. Таков механизм работы данного движка. не могу только понять, что вас смущает.
     
  16. Finelai

    Finelai Местный

    Регистрация:
    22.06.12
    Сообщения:
    100
    Симпатии:
    11
    Версия XF:
    1.1.3
    Создаю обработчик событий, задаю следующее:

    Обрабатывать событие:
    navigation_tabs

    Выполнить обработчик:
    LikeReviewRus_Tabs_MainTab :: addTab

    получаю:
    Метод "addTab" не корректный?
     
  17. Zum07

    Zum07 Местный

    Регистрация:
    01.07.11
    Сообщения:
    55
    Симпатии:
    12
    Версия XF:
    1.5.11
    Создайте library/LikeReviewRus/Tabs/MainTab.php потом обработчик
     
    Finelai нравится это.
  18. Toshax

    Toshax Новичок

    Регистрация:
    25.01.13
    Сообщения:
    2
    Симпатии:
    1
    Версия XF:
    1.1.1
    Я может не до конца проникся религией движка. Но что тут хорошего когда для создания так сказать модуля надо сделать столько телодвижений по админки форума создав при этом кучку почти одинаковых идентификаторов? Насчитал как минимум от пяти переходов.
    Почему бы не сделать отдельный режим под разработку?
     
  19. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Причина проста. Плагин (аддон) должен быть максимально абстрагирован от прямых правок оригинального кода, шаблонов и т.д. Это нужно для обеспечения совместимости между плагинами и версиями движка. Правильно написанный плагин как правило вообще не требует каких-то правок при апгрейде движка. Хотя в некоторых случаях все равно требуется вносить правки, но они минимальные. В результате имеем достаточно надежную систему плагинов, которая достаточно легко отлаживается (в различных IDE с дебагерами), а также хорошую безопасность функционирования.
    Например, простейший плагин, включающий в код страницы какой-то свой код, должен иметь класс Listener, обеспечивающий вызов своих классов. Для этого требуется повесить свой обработчик на нужное событие. Ну и также должен быть класс для обработки хуков. Ничего сложного. Зато мы можем не беспокоиться, что какой-то плагин нарушит работу нашего плагина. Ведь обработчики вызываются последовательно, при этом вставая в очередь обработки. Единственное, где может произойти накладка - изменение вывода. Если мы его меняем, то должны убедиться, что мы его корректно меняем. При этом, в случае необходимости можно скорректировать последовательность вызовов. Ну и т.д. и т.п. В общем для программиста это не является сложной задачей.
    В более сложных плагинах используется техника перегрузки оригинальных классов, используют фразы и т.д.

    Естественно, таким образом достигается упорядоченность кода и его использования. Те же фразы легче редактировать через фразы, а не непосредственно в шаблонах. Ведь так? Да еще и добавляется возможность использования сразу нескольких языков. Все прозрачно и достаточно просто. Ну и главное - функционально.

    Уже много программистов оценили удобство разработки под XenForo. Главное при этом - обеспечивается хорошая безопасность и совместимость кода и вводимых данных. Да и доступ к базе данных через движок также с одной стороны усложняет работу программиста (приходиться писать вроде как лишний код типа моделей), но с другой стороны снижает вероятность ошибки программиста, которая может привести к деградации безопасности. Да и предусмотреть с нуля безопасность и корректность действительно крайне сложно. Проще использовать уже отлаженные и предусматривающие многие нюансы использования классы и методы движка.

    Короче - читайте статьи по тому же Zend Framework. На нем основан XenForo. Поэтому почти полностью наследует и всю его идеологию. Плюс добавляет хороший визуальный инструмент разработки, шаблоны и т.д.
     
    edka, Mirovinger, artmouse и ещё 1-му нравится это.
  20. artmouse

    artmouse Местный

    Регистрация:
    17.10.10
    Сообщения:
    23
    Симпатии:
    17
    Версия XF:
    1.2.3
    magento страшным скриптом казался, а ведь тоже основан на Zend Framework))) А все оказывается лежит на своих местах! И очень даже удобно потом, когда знаешь что и с какой полки брать! MVC рулит! Просто все привыкли к другому подходу...
     
    Yoskaldyr нравится это.

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