Донецкий техникум промышленной автоматики

Блог - Створюємо форум на MODx REVO частина 1 - binliz.org.ua


MODX , php

Форуми досить складна тема, яка швидше за все займе не один тиждень з моєї завантаженістю але почнемо.

Так, позначити.

Форуми повинні:

  1. Працювати з коробки
  2. Відмінно інтегріроватся в шаблон
  3. Мати ЧПУ посилання
  4. Мати свої настройки в адмінці
  5. Давати можливість працювати користувачам, модераторам та адісністраторам з ними.
  6. Вести статистику і бути захищені.
  7. Мати набір фрагментів для інтеграції в різні блоки сайтів
  8. Давати можливість чітко управляти всіма можливостями і шаблонами
  9. Стати потужним, затребуваним компонентом для порталів розроблених на MODx
  10. І швидше за все платним. Але тут подивимося.

Форуми не повинні:

  1. Всіляко модифікувати ядро і системні файли аж до .htaccess
  2. СПИСОК БУДУ розширювати.

В результаті у мене вийде цикл статей. Як я розробляв форум.

Перше, що я зробив це створив рессурса в дереві документів символічно назвав його форуми створив йому алиас forums, створив порожній сниппет forums і вставив його в створений документ.

Склоніровал modExtra і назвавши свій компонент modForums додав простір імен modforums з параметрами

{Core_path} components / modforums /

{Assets_path} components / modforums /

Додав в настройках системи в своєму просторі імен параметр forum_document_id призначив йому значення ID документа з форумами у мене це 2.

Далі я почав виконувати пункт 1 чого не повинен робити форум і створив плагін для роботи з документом який символічно у нас називається форуми. Назвав плагін Forums_SEF

<? Php / ** * Forums_SEF Plugin * * Events: OnPageNotFound * * @author Aleksey Husarov <[email protected]> * * @package modForums ** / $ event = $ modx-> event-> name; switch ($ event) {case 'OnPageNotFound': // Загалом тут буде наш обробник подій // отримуємо назва параметра для аліаса і якщо він не заданий виходимо (будемо використовувати тільки ЧПУ $ alias = $ modx-> context-> getOption ( 'request_param_alias', 'q'); if (! isset ($ _ REQUEST [$ alias])) {return false;} // Загалом наш запит $ request = $ _REQUEST [$ alias]; // розкладемо запит на складові ( дуже потім знадобиться в принципі і зараз без нього обходиться не будемо). $ tmp = explode ( '/', $ request); // отримаємо ВД рессурса і сравінм його з нашим системним ВД рессурса і якщо вони співпадуть, // то робимо наше злісне справу в сенсі передаємо управління сніпетів, правда може потім ще додамо перевірок. $ id = $ modx-> findResource ($ tmp [0]. '/'); $ forum_sef_id = $ modx-> getOption ( 'forum_document_id'); if ($ id == $ forum_sef_id) { $ modx-> sendForward ($ id);} else return false; break;}

Загалом ось така получіласть стаття, плагін зробили, старт дан. Сідаю за обдумування бази даних, роботи багато думаю це матеріал для наступної статті.