Just Blog about nothing

22Авг/13Off

Создание виджетов для SocialEngine 4

В этом посте речь пойдет о кастомизации сайта на основе SocialEngine.
SocialEngine (http://www.socialengine.com) - CMS на PHP (с использованием Zend Framework), предназначенная для создания социальной сети или сервиса, использующего схожий функционал. Движок платный, достаточно мощный и с ужасной документацией (точнее фактически ее отсуствием).

Будем считать что вы уже знаете что такое виджеты и зачем они нужны и решили создать свой. Также считаем что у вас уже установлен движок и SDK. Вы можете создавать как виджет отдельно, так и виджет в составе собственного (а вообще говоря и чужого) модуля. Рассмотрим оба случая.

Виджет отдельно

Зайдите в административную панель своего сайта на SocialEngine, перейдите в управлением пакетами и плагинами, раздел SDK разработчика и выберите "Создать пакет".

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

Далее заполните остальные поля формы и нажмите "Создать пакет" (Create package).

Будет предложено скачать файл упакованного виджета - архив tar. Скачайте и распакуйте его. В папке находится файл package.json с описанием содержимого пакета и директория application. Далее нам потребуется содержимое это директории. Скопируйте папку application в корень сайта и перейдите в application/widgets/my-widget (будем считать что имя виджета my-widget). Теперь если ваш сайта в режиме разработки. то при переходе в редактор макетов (Layout Editor) вы уже можете увидеть свой виджет в списке.

Осталось только создать содержимое виджета. Для каждого виджета есть контроллер (Controller.php) и представление (index.tpl). В контроллере вы пишете необходимый код, например получим имя текущего пользователя (если не зарегистрирован - ничего не отображаем).

<?php

class Widget_MyWidgetController extends Engine_Content_Widget_Abstract
{
  public function indexAction()
  {
    // Don't render this if not logged in
    $viewer = Engine_Api::_()->user()->getViewer();
    if( !$viewer->getIdentity() ) {
      return $this->setNoRender();
    }

    $this->view->username = $viewer->getTitle();
  }
}

В index.tpl вы создаете html макет представления события index (которое обрабатывается методом indexAction() контроллера) и выводите необходимые данные. Поприветствуем текущего пользователя (здесь правильно выводить текст с помощью метода $this->translate('key'), для поддержки мультиязычности, но статья не об этом, поэтому опустим).

<p>Hello, <b><?php echo $this->username ?></b>!</p>

Вот что получается при добавлении виджета на страницу

Отмечу также, что виджеты можно добавлять не только с помощью редактора макетов, но и из кода в представлении, по имени:

echo $this->content()->renderWidget('my-widget');

Для переноса/распространения виджета нужно перейти в Управление пакетами и плагинами -> SDK разработчика, выбрать действие Собрать пакеты (Build packages), отметить свой виджет и нажать кнопку Собрать пакеты (Build packages). В результате вы получите готовый пакет (tar-архив) для установки.

Виджет в составе модуля

Итак, вы разработали свой модуль (далее my-module) и хотите добавить виджет внутри него. Перейдите в директорию своего модуля (application/modules/MyModule). Создайте там папку widgets и в ней папку с именем своего виджета (my-module-widget). Теперь в папке виджета надо создать знакомые нам контроллер и представление (Controller.php, index.tpl). Название класса контроллера должно включать в себя имя модуля: MyModule_Widget_MyModuleWidgetController. Теперь еще необходимо добавить описание виджета, для этого создайте в директории settings своего модуля файл content.php, который будет содержать массив данных о содержимом (в том числе виджетах).

<?php
return array(
  array(
    'title' => 'My module widget',
    'description' => 'My widget inside my module',
    'category' => 'MyModule',
    'type' => 'widget',
    'name' => 'mymodule.my-module-widget',
    'active' => true,
  ),
) ?>

Обратите внимание на name - до точки в нем указывается название категории (=названию директории) маленькими буквами, а не name модуля.

Теперь вы можете добавлять виджет из редактора макетов или из кода

echo $this->content()->renderWidget('mymodule.my-module-widget');

Заключение

Таким образом создание собственных виджетов (по крайней мере простых) для SocialEngine не должно вызывать особых затруднений даже у людей, не очень знакомых с Zend Framework и структурой самого движка, но при этом намного расширяет возможности кастомизации сайта.

Скачать исходники

My widget

Комментарии (0) Пинги (0)

Извините, комментировать здесь запрещено.

Trackbacks are disabled.

Social Widgets powered by AB-WebLog.com.