Fi1osof 07 августа 2013 0 0
Продолжая предыдущую тему, анонсирую публикацию новой версии пакетов modBlog и modSociety для построения блого-социальных сайтов на MODX Revolution.

Опять-таки, для начала видео-демка.


Что нового? В прошлой версии еще только блоги создавались без всяких топиков.
В новой версии добавлены топики, то есть уже какой-то намек на структуру. Уже можно создавать блоги и топики. Но это все еще заготовка, так как редактировать блоги и топики пока можно только в админке, и нет еще главного — комментариев и голосов.

Тем не менее уже есть немало фишек, о которых я хочу поведать.

1. Блоги и топики как бы не связаны между собой, то есть Блог — это один тип документов, а Топик — другой. При этом топик не обязан быть дочерним ресурсом именно для блога, он может находиться где угодно в структуре. То есть такая модель позволит легко встраиваться в любой готовый сайт со своей особенной структурой.

2. Связи Блог-Топик содержатся в отдельном объекте SocietyBlogTopic. При этом топик может быть привязан сразу к нескольким блогам (как на Хабре). Если топик не привязан ни к одному блогу, то он считается топиком из личного блога автора.

3. Весь код написан на 100% MODX-технологиях с использованием xPDO. В результате код получается очень сжатый, и гарантируется совместимость с любыми компонентами, использующими xPDO-методы.
К примеру, чтобы получить все блога сайта, можно выполнить вот такой запрос:$q = $modx->newQuery('modResource');
$q = $modx->newQuery('modResource');
$q->where(array(
    'published' => true,
    'class_key' => 'SocietyBlog',   
));
$blogs = $modx->getCollection('modResource', $q);


А теперь получим все топики этих блогов
foreach($blogs as $blog){
    // Получаем связки Блог-Топик
    $blogTopics = $blog->getMany('BlogTopics');
    // Проходим по каждой связке
    foreach($blogTopics  as  $blogTopic){
        // Получаем топик
        $topic = $blogTopic->getOne('Topic');
        // Выводим информацию о топике в массив
        print_r($topic->toArray());
        // Получаем ссылку на топик
        $url = $topic->makeUrl();
    }
}


Для удобства разработчиков (чтобы не путались), я ввел специальные методы:
$modx->modblog->getBlog();
$modx->modblog->getBlogs();
$modx->modblog->getTopic();
$modx->modblog->getTopics();


Это как $modx->getObject() и $modx->getCollection(), только сразу подставляет критерии class_key, чтобы точно получить именно блоги или топики.
В качестве параметра можно передавать $criteria. К примеру:
$blogs = $modx->modblog->getBlogs(array(
    'published'    => true,
    'parent'       => 12,
));


Вернет только опубликованные блоги, и только те, для которых родительский раздел имеет ID=12.

Или вот так:
$q = $modx->newQuery('modResource');
$q->where(array(
    'published' => true, 
));
$blogs = $modx->modblog->getBlogs( $q);

foreach($blogs as $blog){
    $author = $blog->getOne('CreatedBy');
    print "<br />Блог создал: ". $author->get('username');
}


Таким образом, учитывая формат Хабра и Livestreet, что не взирая на структуру, выводятся просто топики в обратном хронологическом порядке, можно не парясь о структуре выводить все топики, получив через метод
$q = $modx->newQuery('modResource');
// Сортируем по дате публикации в обратном порядке
$q->sortby('publishedon', 'DESC');
$topics = $modx->modblog->getTopics( $q);


4. Вывести все топики, или топики из определенного блога, или определенного пользователя, или определенного пользователя в определенном блоге, можно используя сниппет BLOG_topicsList.
К примеру [[!BLOG_topicsList?user_id=2&blog_id=7]]

В общем, MODX действительно себя показывает как очень мощная платформа для разработок. У меня код установщика (который сразу создает все политики, группы пользователей, настройки, структуру и т.п.), наверно больше, чем весь код работающего компонента (в сумме в modBlog и modSociety кода строк так 1000 всего). Я вам точно говорю, что для той логики, которая уже сейчас есть, 1000 строк — это очень-очень мало. Так что кто для себя выбрал MODX как средство разработки — тот вообще не ошибся :-)

UPD: Проекты на Гитхабе:
github.com/Fi1osof/modSociety
github.com/Fi1osof/modBlog

Установочные пакеты можно скачать из моего репозитория rest.modxstore.ru/extras/
0 комментариев
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.