+38(073) 413-59-71  info@binliz.org.ua

Создаем форум на MODx REVO часть 1

 29.06.2014
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/

Пространство имен MODx

Добавил в настройках системы в своем пространстве имен параметр forum_document_id назначил ему значение ID документа с форумами у меня это 2.

Системные настройки modx

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

<?php
/**
 * Forums_SEF Plugin
 *
 * Events: OnPageNotFound
 *
 * @author Aleksey Husarov <binliz@binliz.org.ua>
 *
 * @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;
}

В общем вот такая получиласть статья, плагин сделали, старт дан. Сажусь за обдумывание базы данных, работы много думаю это материал для следующей статьи.


 

 
Ruslan

Желаю удачи. Модекс очень классный и удобный дыижок и форум на нём был бы как нельзя к стати!

  • 1