UMIhelp

Разработка дополнительного функционала => Разработка модулей => Тема начата: atach от 13 Февраля 2014, 14:37:59

Название: Подскажите про вкладки в админке (при разработке модуля)
Отправлено: atach от 13 Февраля 2014, 14:37:59
Вообщем ситуация такая. У меня почему то созданные вкладке не обрабатываются указанным листингом, а идет обработка по коду первой (дофолтной) вкладки ....

/* в class.php  объявляю вкладки в __construct */
$commonTabs = $this->getCommonTabs();
if($commonTabs) {
$commonTabs->add('lists');
$commonTabs->add('arrival');
}


/* Далее в __admin.php прописываю для каждой вкладки свой код */

        public function lists() {
$this->setDataType("list");
$this->setActionType("view");

if($this->ifNotXmlMode()) return $this->doData();

$limit = 20;
$curr_page = getRequest('p');
$offset = $curr_page * $limit;

$sel = new selector('pages');
$sel->types('hierarchy-type')->name('comtrade', 'basestorrage');
$sel->types('hierarchy-type')->name('comtrade', 'ordercat');
$sel->types('hierarchy-type')->name('comtrade', 'orderitem');
$sel->limit($offset, $limit);

selectorHelper::detectFilters($sel);

$data = $this->prepareData($sel->result, "pages");

$this->setData($data, $sel->length);
$this->setDataRangeByPerPage($limit, $curr_page);
return $this->doData();
}

public function arrival() {
$this->setDataType("list");
$this->setActionType("view");

if($this->ifNotXmlMode()) return $this->doData();

$limit = 20;
$curr_page = getRequest('p');
$offset = $curr_page * $limit;

$sel = new selector('pages');
$sel->types('hierarchy-type')->name('comtrade', 'basestorrage');
//$sel->types('hierarchy-type')->name('comtrade', 'ordercat');
//$sel->types('hierarchy-type')->name('comtrade', 'orderitem');
$sel->limit($offset, $limit);

selectorHelper::detectFilters($sel);

$data = $this->prepareData($sel->result, "pages");

$this->setData($data, $sel->length);
$this->setDataRangeByPerPage($limit, $curr_page);
return $this->doData();
}

в итоге всеравно всё обрабатывается как lists, если же удалить там код, то ошибка перехватывается :
"Произошли следующие ошибки: Запрашиваемый ресурс не существует"

Не могу понять почему обрабатывается всё по одному листингу кода
Название: Re:Подскажите про вкладки в админке (при разработке модуля)
Отправлено: Aisamiery от 18 Апреля 2014, 12:38:03
А можно увидеть код метода?
public function getDatasetConfiguration($param = '')
из админ класса
Название: Re:Подскажите про вкладки в админке (при разработке модуля)
Отправлено: Vladimir от 20 Апреля 2014, 16:55:27
Увидеть можно в любом модуле ЮМИ, например, форум имеет вкладки.
Помимо создания метода в классе нужно еще указать юми, что его следует вызывать. Для этого все их следует перечислить в getDatasetConfiguration. Фрагмент из работающего кастомного модуля:


public function getDatasetConfiguration($param = '') {


if ($param == 'authors') {//параметр передается из xslt-шаблона админки
$loadMethod = "authors";//метод, который надо вызвать
$type = 'author';//тип данных
$default = 'family[99px]|name[81px]|email[96px]|is_activated[100px]';//ширина колонок таблицы

//далее описывается формат отображения
//имя модуля и имя вызываемого метода
//возможные действия (у меня -  удалить и сменить активность)
//перечень свойств, которые не нужно отображать в таблице
return array(
'methods' => array(
array('title'=>getLabel('smc-load'), 'forload'=>true, 'module'=>'faq20', '#__name'=>$loadMethod),
array('title'=>getLabel('smc-delete'), 'module'=>'faq20', 'aliases'=>'tree_delete_element,author_del', '#__name'=>'author_del'),
array('title'=>getLabel('smc-activity'),'module'=>'faq20', '#__name'=>'author_activity', 'aliases' => 'tree_set_activity,author_activity')
),
'types' => array(
array('common' => 'true', 'id' => $type)
),
'stoplist' => array('title', 'h1', 'meta_keywords', 'meta_descriptions', 'menu_pic_ua', 'menu_pic_a', 'header_pic', 'more_params', 'robots_deny', 'is_unindexed', 'store_amounts', 'locktime', 'lockuser', 'anons', 'content', 'answer', 'rate_voters', 'rate_sum'),
'default' => $default
);
}
elseif ($param == 'experts') {
$loadMethod = "experts";
$type = 'author';
$default = 'family[99px]|name[81px]|email[96px]|is_activated[100px]';
..... то же, что и выше
}
elseif ($param == 'messages') {
....
}else {
.....
}
}
experts, authors -  это названия методов, отвечающих за вывод данных в конкртеную вкладку.
Плюс к этому в административных xslt-шаблонах нужно создать блок, отвечающий за отображение вкладки с указанием имени метода, например

<xsl:template match="result[@method = 'authors']/data">
<xsl:call-template name="ui-smc-table">
<xsl:with-param name="control-params">authors</xsl:with-param>
<xsl:with-param name="content-type">objects</xsl:with-param>
<xsl:with-param name="enable-objects-activity">1</xsl:with-param>
</xsl:call-template>
</xsl:template>