Пример административного шаблона для объектов

Материал из Umicms
Перейти к:навигация, поиск

В данной статье мы приведем пример административного шаблона, для модуля, который оперирует объектами, не страницами. К объектам относятся пользователи, баннеры, скидки и т.п. Практически для каждого модуля должен быть определен шаблон list.view.xsl, который отвечает за отображение данных в виде списка в административной части. В случае, если системное название вашего кастомного модуля cache, то в папку \styles\skins\mac\data\modules\cache\ необходимо добавить файл list.view.xsl, примерно следующего содержания:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://cache" [ 
<!ENTITY sys-module 'cache'>
]>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:template match="data[@type = 'list' and @action = 'view']">
      <div class="imgButtonWrapper">
        <xsl:choose>
          <xsl:when test="$method = 'udata_lists'">
            <a id="addAddress" href="{$lang-prefix}/admin/&sys-module;/add_udata/">&label-add-udata;</a>
          </xsl:when>
          <xsl:when test="$method = 'upage_lists'">
            <a id="addAddress" href="{$lang-prefix}/admin/&sys-module;/add_upage/">&label-add-upage;</a>
          </xsl:when>
          <xsl:otherwise />
        </xsl:choose>
      </div>

      <xsl:call-template name="ui-smc-table">
        <xsl:with-param name="control-params" select="$method" />
        <xsl:with-param name="content-type">objects</xsl:with-param>
        <xsl:with-param name="enable-objects-activity">1</xsl:with-param>
        <xsl:with-param name="domains-show">1</xsl:with-param>
        <xsl:with-param name="search-show">0</xsl:with-param>
        <xsl:with-param name="disable-csv-buttons">1</xsl:with-param>
      </xsl:call-template>

    </xsl:template>

</xsl:stylesheet>

Строки:

<!DOCTYPE xsl:stylesheet SYSTEM "ulang://cache" [
	<!ENTITY sys-module	'cache'>
]>


отвечают за подключение дополнительных XSLT сущностей. Данный вызов ulang://cache, в котором использует протокол upage, сформирует список сущностей из файла \classes\modules\cache\i18n.php, если не был найден фал с текущим языковым префиксом: i18n.ru.php, i18n.en.php, i18n.fr.php и т.п.. Просмотреть весь список полученных сущностей модуля cache можно вызовом:

http://ваш_домен/ulang/cache

Данные условия узла data:

<xsl:template match="data[@type = 'list' and @action = 'view']">
...
<xsl:template>

выбраны из-за того, что в php-методе, который осуществляет выборку из базы данных нужных объектов, прописано:

$this->setDataType("list");
$this->setActionType("view");

в данном примере используется метод udata_lists, файла \classes\modules\cache\__admin.php, сам пример метода:

public function udata_lists() {
  $this->setDataType("list");
  $this->setActionType("view");
  if($this->ifNotXmlMode()) return $this->doData();
  
  $limit = 20;
  $curr_page = getRequest('p');
  $offset = $limit * $curr_page;
  
  $sel = new selector('objects');
  $sel->types('object-type')->name('cache', 'udata');
  $sel->order('name')->asc();
  $sel->limit($offset, $limit);
  selectorHelper::detectFilters($sel);
  
  $domains = getRequest('domain_id');
  if(is_array($domains) && sizeof($domains)) {
    $domainsCollection = domainsCollection::getInstance();
    if(sizeof($domainsCollection->getList()) > 1) {
      $sel->where('domain_id')->equals($domains[0]);
    }
  }
  
  $this->setDataRange($limit, $offset);
  $data = $this->prepareData($sel->result, "objects");
  $this->setData($data, $sel->length);
  return $this->doData();
}


Вернемся к шаблону xsl:template. Блок:

<div class="imgButtonWrapper">
...
<div>


отвечает за отображение кнопок, которые активирует переход на страницу добавления объекта. Переменная method определена в основном шаблоне \styles\skins\mac\main.xsl:

<xsl:variable name="method"	select="/result/@method"/>

&label-add-udata; и &label-add-upage; - сущности сформированные из файла \classes\modules\cache\i18n.php, они были подключены запросом "ulang://cache"

Именованный вызов шаблона:

<xsl:call-template name="ui-smc-table">
...
</xsl:call-template>

отвечает за формирование списка данных. Сам шаблон обработчик с name="ui-smc-table" находится в файле \styles\skins\mac\interface\ui\controls.xsl

В шаблон ui-smc-table мы передаем различные параметры, рассмотрим каждый из них.

control-params – название текущего метода, которое будет передано в метод getDatasetConfiguration(), файл \classes\modules\cache\admin.php, будет выполнен подобный ajax запрос:

http://ваш_домен/admin/cache/udata_lists.xml?domain_id[]=1&lang_id[]=1

для подгрузки необходимых данных в xml-формате. О методе getDatasetConfiguration более подробно рассказано в данной статье Назначение метода getDatasetConfiguration в модуле системы

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

content-type – данный параметр со значением = objects, указывает на то, что данные необходимо визуально отобразить по правилам Объектов. Если данный параметр не передать, система будет считать что вы работает со страницами (pages) и выведет контролы для отображения родительских и дочерних страниц.

enable-objects-activity – данный параметр включает отображение в контролах управления такую функцию как значок смены активности объекта. Сам метод для смены активности также должен присутствовать в модуле, как и поле is_active в объекте у которого меняется активность.

domains-show – этот параметр включает отображение выпадающего списка с доменами, в случае если их больше одного. По умолчанию, этот выпадающий список отображается только для Страниц.

search-show – указав значение для этого параметра =0, мы отключили форму поиска данных в модуле. По умолчанию форма поиска отображается.

disable-csv-buttons – данный параметр скрывает функции экспорта и импорта данных в формате CSV, которые располагаются под списком объектов.