Создание собственной вкладки в системном модуле — различия между версиями
Velross (обсуждение | вклад)  | 
				Velross (обсуждение | вклад)   | 
				||
| Строка 8: | Строка 8: | ||
Далее, при помощи php-функции ''get_class_methods'' из собранных классов получаем массив всех методов из всех классов.  | Далее, при помощи php-функции ''get_class_methods'' из собранных классов получаем массив всех методов из всех классов.  | ||
Далее, в переменную ''fn'' помещается название функции ''onInit'' и при помощи функции ''in_array'' мы ищем, имеется ли данное значение среди объявленных методов. Если такое значение есть, то система исполняет код описанный в функции ''onInit''.  | Далее, в переменную ''fn'' помещается название функции ''onInit'' и при помощи функции ''in_array'' мы ищем, имеется ли данное значение среди объявленных методов. Если такое значение есть, то система исполняет код описанный в функции ''onInit''.  | ||
| − | Таким образом, если мы хотим получить доступ к системным методам, нам необходимо их задействовать в классе ''__emarket_custom_admin'' и в методе ''onInit()''.<p>  | + | Таким образом, если мы хотим получить доступ к системным методам, нам необходимо их задействовать в классе ''__emarket_custom_admin'' и в методе ''onInit()''.<p></p>  | 
Теперь добавим новую вкладку в модуль Интернет-магазина.<br/>  | Теперь добавим новую вкладку в модуль Интернет-магазина.<br/>  | ||
| Строка 22: | Строка 22: | ||
Для создания вкладки мы воспользовались системным методом ''getCommonTabs'', который описывается в классе ''def_module''.  | Для создания вкладки мы воспользовались системным методом ''getCommonTabs'', который описывается в классе ''def_module''.  | ||
| − | + | <br>  | |
Вкладка создана, как в самом модуле, так и в его настройках, но вкладки имеют системные имена:<br>  | Вкладка создана, как в самом модуле, так и в его настройках, но вкладки имеют системные имена:<br>  | ||
''header-emarket-mytab  | ''header-emarket-mytab  | ||
| Строка 30: | Строка 30: | ||
<source lang="php">  | <source lang="php">  | ||
<?php  | <?php  | ||
| − | |||
$i18n = array(  | $i18n = array(  | ||
| − | |||
'header-emarket-mytab'		=> 'Моя кастомная вкладка',  | 'header-emarket-mytab'		=> 'Моя кастомная вкладка',  | ||
| − | |||
'header-emarket-mytabconfig'	=> 'Моя вкладка настроек',  | 'header-emarket-mytabconfig'	=> 'Моя вкладка настроек',  | ||
);  | );  | ||
| − | |||
?>  | ?>  | ||
</source>  | </source>  | ||
| − | В результате вкладки получат нормальные имена.<p>  | + | В результате вкладки получат нормальные имена.<p></p>  | 
При переходе на созданную вкладку мы получим сообщение об ошибке:  | При переходе на созданную вкладку мы получим сообщение об ошибке:  | ||
| − |      Запрашиваемый ресурс не существует<p>  | + |      Запрашиваемый ресурс не существует<p></p>  | 
Чтобы ошибка исчезла, нам необходимо описать наши созданные вкладки в виде функций (в том же файле __custom_adm.php):  | Чтобы ошибка исчезла, нам необходимо описать наши созданные вкладки в виде функций (в том же файле __custom_adm.php):  | ||
| Строка 54: | Строка 50: | ||
</source>  | </source>  | ||
Более подробно в [[http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/razrabotka_sobstvennyh_makrosov_i_modulej/]документации по созданию своего модуля]  | Более подробно в [[http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/razrabotka_sobstvennyh_makrosov_i_modulej/]документации по созданию своего модуля]  | ||
| − | <p>  | + | <p></p>  | 
Для отображением данных на вкладке, необходимо создать файл ''/styles/skins/mac/data/modules/emarket/list.view.cusom.xsl'', где описать шаблон для вкладки:  | Для отображением данных на вкладке, необходимо создать файл ''/styles/skins/mac/data/modules/emarket/list.view.cusom.xsl'', где описать шаблон для вкладки:  | ||
<source lang="xml">  | <source lang="xml">  | ||
Версия 06:30, 28 июля 2013
Задача: не затрагивая системный код кастомизировать системный модуль через добавление собственной вкладки.
Решение.
Пояснения:
В классе def_module находится метод __implement в задачи которого входит собрать все необходимые для работы модуля классы вместе. Имплементятся все классы, находящиеся в файлах с двойным подчеркиванием, среди собранных будет и класс __emarket_custom_admin, находящийся в файле __custom_adm.php. Далее, при помощи php-функции get_class_methods из собранных классов получаем массив всех методов из всех классов. Далее, в переменную fn помещается название функции onInit и при помощи функции in_array мы ищем, имеется ли данное значение среди объявленных методов. Если такое значение есть, то система исполняет код описанный в функции onInit.
Таким образом, если мы хотим получить доступ к системным методам, нам необходимо их задействовать в классе __emarket_custom_admin и в методе onInit().
Теперь добавим новую вкладку в модуль Интернет-магазина.
Для этого откроем файл /classes/modules/emarket/__custom_adm.php и в классе __emarket_custom_admin напишем метод onInit():
public function onInit() {
	$commonTabs = $this->getCommonTabs();
	$commonTabs->add('mytab');
	$configTabs = $this->getConfigTabs();
	$configTabs->add('mytabconfig');
}
Для создания вкладки мы воспользовались системным методом getCommonTabs, который описывается в классе def_module.
Вкладка создана, как в самом модуле, так и в его настройках, но вкладки имеют системные имена:
header-emarket-mytab
header-emarket-mytabconfig
Чтобы вкладки получили нужные нам имена, нам необходимо их описать в языковых файлах i18n.{язык}.php.
 
Создадим файл i18n.ru.php с таким содержанием:
<?php
$i18n = array(
'header-emarket-mytab'		=> 'Моя кастомная вкладка',
'header-emarket-mytabconfig'	=> 'Моя вкладка настроек',
);
?>
В результате вкладки получат нормальные имена.
При переходе на созданную вкладку мы получим сообщение об ошибке:
Запрашиваемый ресурс не существует
Чтобы ошибка исчезла, нам необходимо описать наши созданные вкладки в виде функций (в том же файле __custom_adm.php):
public function mytab() {
  	$this->setDataType("list");
	$this->setActionType("view");
	if($this->ifNotXmlMode()) return $this->doData();
 }
Более подробно в [[1]документации по созданию своего модуля]
Для отображением данных на вкладке, необходимо создать файл /styles/skins/mac/data/modules/emarket/list.view.cusom.xsl, где описать шаблон для вкладки:
<xsl:template match="/result[@method = 'mytab']/data[@type = 'list' and @action = 'view']">
...
</xsl:template>
Более подробно в [[2]документации по кодированию административного интерфейса]