Центр документации
Карта сайта

Создай визитку сам!


Самоучитель по интеграции дизайна и настройке Amiro.CMS на примере демонстрационной версии пакета Визитка »


Список - действия

В список можно добавлять действия над элементами. Действия разделяются по типу отображения и требованию к окружению (действия, модифицирующие данные моделей должны требовать полное окружение).

  1. Действия в столбце действий (последний в списке); 
  2. Действия в существующем столбце с данными; 
  3. Действия в отдельных столбцах;
  4. Действия в отдельных столбцах, иконка, всплывающая подсказка и параметры, передаваемые серверу которых зависят от значения поля типа «флаг».

Действия добавляются следующим образом: 

  1. В контроллере списка (наследнике Hyper_AmiClean_ListAdm) вызываются методы добавления действий; 
  2. Описываются обработчики действий в контроллере действий списка (наследнике Hyper_AmiClean_ListActionsAdm); 
  3. Заполняются данные для локализации в файле «_local/_admin/templates/60/inst_sample_module_list.lng»; 

Пример модификации стандартных действий и добавления собственных действий

class AmiClean_AmiSample_ListAdm extends Hyper_AmiClean_ListAdm{
    public function init(){
        $this->addActions(array(self::REQUIRE_FULL_ENV . 'edit', self::REQUIRE_FULL_ENV . 'delete', self::REQUIRE_FULL_ENV . 'copy', 'show'));
        $this->addColActions(array(self::REQUIRE_FULL_ENV . 'public'), true);
        $this->addColActions(array(self::REQUIRE_FULL_ENV . 'rename'));
 
        $this->listActionsResId = $this->getModId() . '/list_actions/controller/adm';
 
        parent::init();
 
        return $this;
    }
}
 
class AmiClean_AmiSample_ListActionsAdm extends Hyper_AmiClean_ListActionsAdm{
 
    public function dispatchDelete($name, array $aEvent, $handlerModId, $srcModId){
        $oItem = $this->getItem($this->getRequestId());
        if($oItem->getId() == 1){
            $aEvent['oResponse']->addStatusMessage('status_del_forbidden', array(), AMI_Response::STATUS_MESSAGE_ERROR);
            $this->refreshView();
        }else{
            parent::dispatchDelete($name, $aEvent, $handlerModId, $srcModId);
        }
        return $aEvent;
    }
 
    public function dispatchRename($name, array $aEvent, $handlerModId, $srcModId){
        $oItem = $this->getItem($this->getRequestId());
        $nickname = $oItem->nickname;
        $oItem->nickname = '[' . $nickname . ']';
        $oItem->save();
        $aEvent['oResponse']->addStatusMessage(
            'status_renamed',
            array(
                'source'      => $nickname,
                'destination' => $oItem->nickname
            )
        );
        $this->refreshView();
        return $aEvent;
    }
 
 
    public function dispatchCopy($name, array $aEvent, $handlerModId, $srcModId){
        $oItem = $this->getItem($this->getRequestId());
        $nickname = $oItem->nickname;
        $newNickname = '- ' . $nickname;
        $oItem->nickname = $newNickname;
        $oItem->resetId();
        $oItem->save();
        $aEvent['oResponse']->addStatusMessage(
            'status_copied',
            array(
                'source'      => $nickname,
                'destination' => $newNickname
            )
        );
        $this->refreshView();
        return $aEvent;
    }
}

Объяснение кода

Добавляем в столбец действий действия edit, delete, copy, show.

$this->addActions(array(self::REQUIRE_FULL_ENV . 'edit', self::REQUIRE_FULL_ENV . 'delete', self::REQUIRE_FULL_ENV . 'copy', 'show'));

При этом действия edit, delete и copy должны выполняться в полном окружении (для них указан префикс self::REQUIRE_FULL_ENV).

Добавляем отдельные колонки с действиями public и rename. 

$this->addColActions(array(self::REQUIRE_FULL_ENV . 'public'), true);
$this->addColActions(array(self::REQUIRE_FULL_ENV . 'rename'));

Оба действия будут выполняться в полном окружении. Иконка и подсказка действия public может иметь несколько состояний в зависимости от текущего значения.

Указываем имя ресурса контроллера действий списка.

$this->listActionsResId = $this->getModId() . '/list_actions/controller/adm';

Модифицируется стандартное действие удаления элемента, запретив удаление элемента с id = 1.

public function dispatchDelete($name, array $aEvent, $handlerModId, $srcModId){
    $oItem = $this->getItem($this->getRequestId());
    if($oItem->getId() == 1){
        $aEvent['oResponse']->addStatusMessage('status_del_forbidden', array(), AMI_Response::STATUS_MESSAGE_ERROR);
        $this->refreshView();
    }else{
        parent::dispatchDelete($name, $aEvent, $handlerModId, $srcModId);
    }
    return $aEvent;
}

Обработчик действия rename - изменяет значение поле nickname модели элемента, обрамляя в квадратные скобки.

public function dispatchRename($name, array $aEvent, $handlerModId, $srcModId){
    $oItem = $this->getItem($this->getRequestId());
    $nickname = $oItem->nickname;
    $oItem->nickname = '[' . $nickname . ']';
    $oItem->save();
    $aEvent['oResponse']->addStatusMessage(
        'status_renamed',
        array(
            'source'      => $nickname,
            'destination' => $oItem->nickname
        )
    );
    $this->refreshView();
    return $aEvent;
}

Обработчик действия copy - создает копию записи с измененным значением поля nickname и выводом статусного сообщения.

public function dispatchCopy($name, array $aEvent, $handlerModId, $srcModId){
    $oItem = $this->getItem($this->getRequestId());
    $nickname = $oItem->nickname;
    $newNickname = '- ' . $nickname;
    $oItem->nickname = $newNickname;
    $oItem->resetId();
    $oItem->save();
    $aEvent['oResponse']->addStatusMessage(
        'status_copied',
        array(
            'source'      => $nickname,
            'destination' => $newNickname
        )
    );
    $this->refreshView();
    return $aEvent;
}

Для отображения графического файла иконки действия $action в списке модуля $modId, нужно в папку «_local/_admin/images/{$modId}/» добавить png-файл с названиям «icon-{$action}.png».

Описание языковых переменных

Языковые переменные действий именуются в формате «list_action_{$action}»

%%list_action_edit%en%%
Edit
%%list_action_edit%ru%%
Редактировать
 
%%list_action_delete%en%%
Delete
%%list_action_delete%ru%%
Удалить
 
%%list_action_rename%en%%
Rename
%%list_action_rename%ru%%
Переименовать
 
%%list_action_copy%en%%
Copy
%%list_action_copy%ru%%
Копировать
Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API)
 2000 – 2021 © Amiro.CMS Все права защищены.