Версия: 6.x
burger close
Программирование функций режима отладки

При переключении системы в режим отладки, пользователю открывается возможность добавлять/изменять объекты прямо на действующем сайте. Это возможно благодаря функциям режима отладки, которые реализованы в классах пространства имен RS::Debug, и которые разработчик должен использовать в своем коде.

В режиме отладки есть 2 зоны, в которых можно расположить инструменты:

  • Плавающая панель блока. Отображается при наведении мыши на блок.
  • Контекстное меню зоны блока или зоны объекта. Меню отображается при нажатии правой кнопки мыши над объектом или свободной зоной блока.

Плавающая панель блока и контекстное меню зоны блока

Панель по-умолчанию располагается в верхнем левом углу блока.

debug_block.png
Плавающая панель блока

Кнопки для этой панели реализованы в классах пространства имен RS::Debug::Tool. Классы кнопок должны быть потомками RS::Debug::Tool::AbstractTool. В системе существуют классы для следующих типов кнопок:

  • RS::Debug::Tool::BlockOptions - Кнопка "Настройка блока". Добавляется автоматически ко всем блок-контроллерам в режиме отладки
  • RS::Debug::Tool::Create - Кнопка "Добавить". Имеет значек плюса.
  • RS::Debug::Tool::Edit - Кнопка "Редактировать". Имеет значек карандаша.
  • RS::Debug::Tool::Info - Кнопка "Информация". Добавляется автоматически.
  • RS::Debug::Tool::Options - Кнопка "Настройка модуля". Добавляется автоматически.

sУстанавливать кнопки в плавающую панель блока, необходимо в действии контроллера с помощью метода RS::Debug::Group::addDebugAction(). Получить экземпляр класса RS::Debug::Group для плавающего блока инструментов в контроллере можно с помощью метода RS::Controller::AbstractClient::getDebugGroup().

Пример:

namespace Catalog\Controller\Block;
class TopProducts extends \RS\Controller\StandartBlock
{
//...
function actionIndex()
{
//...
if ($debug_group = $this->getDebugGroup()) { //Если включен режим отладки
//Получаем ссылку на создание товара
$create_href = $this->router->getAdminUrl('add', array('dir' => 0), 'catalog-ctrl');
//Добавляем кнопку +(добавить товар) в плавающую панель.
$debug_group->addDebugAction(new \RS\Debug\Action\Create($create_href));
//Добавляем ссылку в контекстное меню зоны блока. Будет отображаться при нажатии правой кнопки мыши на свободной зоне блока.
$debug_group->addTool('create', new \RS\Debug\Tool\Create($create_href));
}
//...
}
}

Контекстное меню зоны объекта.

debug_object.png
Контекстное меню объекта

Елементы контекстного меню должны быть классами потомками RS::Debug::Action::AbstractAction. В системе существую следующие классы пунктов контекстного меню:

Объявлять пункты контекстного меню объекта необходимо в методе getDebugActions класса ORM Объекта. Метод должен возвращать массив потомков класса RS::Debug::Action

Пример:

namespace Catalog\Model\Orm;
class Product extends \RS\Orm\OrmObject
{
protected static
$table = 'product';
function _init()
{
//...
}
//Возвращает отладочные действия, которые можно произвести с объектом
function getDebugActions()
{
return array(
//Добавляем пункт контекстного меню - Редактировать.
new \RS\Debug\Action\Edit(\RS\Router\Manager::obj()->getAdminPattern('edit', array(':id' => '{id}'), 'catalog-ctrl')),
//Добавляем пункт контекстного меню - Удалить
new \RS\Debug\Action\Delete(\RS\Router\Manager::obj()->getAdminPattern('del', array(':chk[]' => '{id}'), 'catalog-ctrl'))
);
}
}

Далее важно подсказать браузеру границы объекта, для этого тегу HTML, обрамляющему объект необходимо добавить атрибуты с помощью метода RS::Orm::AbstractObject::getDebugAttributes(). Это делается в любом шаблоне, в котором визуализируются ORM-объекты.

{* $list - array of \Catalog\Model\Orm\Product *}
<ul class="products">
{foreach from=$list item=product}
<li {$product->getDebugAttributes()}>
{$product.title}
...
</li>
{/foreach}
</ul>