Создание собственной вкладки в системном модуле — различия между версиями
Velross (обсуждение | вклад)  | 
				Dmitry (обсуждение | вклад)   | 
				||
| (не показано 16 промежуточных версий 3 участников) | |||
| Строка 7: | Строка 7: | ||
Имплементятся все классы, находящиеся в файлах с двойным подчеркиванием, среди собранных будет и класс ''__emarket_custom_admin'', находящийся в файле ''__custom_adm.php''.  | Имплементятся все классы, находящиеся в файлах с двойным подчеркиванием, среди собранных будет и класс ''__emarket_custom_admin'', находящийся в файле ''__custom_adm.php''.  | ||
Далее, при помощи php-функции ''get_class_methods'' из собранных классов получаем массив всех методов из всех классов.  | Далее, при помощи php-функции ''get_class_methods'' из собранных классов получаем массив всех методов из всех классов.  | ||
| − | Далее, в переменную ''fn'' помещается название функции ''  | + | Далее, в переменную ''fn'' помещается название функции ''onImplement'' и при помощи функции ''in_array'' мы ищем, имеется ли данное значение среди объявленных методов. Если такое значение есть, то система исполняет код описанный в функции ''onImplement''.  | 
| − | Таким образом, если мы хотим получить доступ к системным методам, нам необходимо их задействовать в классе ''__emarket_custom_admin'' и в методе ''  | + | Таким образом, если мы хотим получить доступ к системным методам, нам необходимо их задействовать в классе ''__emarket_custom_admin'' и в методе ''onImplement()''.<p></p>  | 
Теперь добавим новую вкладку в модуль Интернет-магазина.<br/>  | Теперь добавим новую вкладку в модуль Интернет-магазина.<br/>  | ||
| − | Для этого откроем файл ''/classes/modules/emarket/__custom_adm.php'' и в классе ''__emarket_custom_admin'' напишем метод ''  | + | Для этого откроем файл ''/classes/modules/emarket/__custom_adm.php'' и в классе ''__emarket_custom_admin'' напишем метод ''onImplement()'':  | 
<source lang="php">  | <source lang="php">  | ||
| − | public function   | + | public function onImplement() {  | 
	$commonTabs = $this->getCommonTabs();  | 	$commonTabs = $this->getCommonTabs();  | ||
	$commonTabs->add('mytab');  | 	$commonTabs->add('mytab');  | ||
| Строка 20: | Строка 20: | ||
}  | }  | ||
</source>  | </source>  | ||
| + | |||
| + | '''Для версии 16 и Выше'''  | ||
| + | |||
| + | «d-groups.ru 08:02, 2 ноября 2018 (UTC)»  | ||
| + | |||
| + | 1. Создать папку /classes/modules/emarket/ext/admin_tabs.php  | ||
| + | |||
| + | 2. Создать класс  | ||
| + | |||
| + | <source lang="php">  | ||
| + | class admin_tabs{  | ||
| + | |||
| + |    public function __construct($module) {  | ||
| + | |||
| + |         $this->module = $module;  | ||
| + | |||
| + |         if (cmsController::getInstance()->getCurrentMode() == "admin") {  | ||
| + |             $commonTabs = $this->module->getCommonTabs();  | ||
| + |             $commonTabs->add('mytab');  | ||
| + | |||
| + |              $configTabs = $this->module->getConfigTabs();  | ||
| + | 	    $configTabs->add('mytabconfig');  | ||
| + |         }  | ||
| + | |||
| + |     }  | ||
| + | }  | ||
| + | </source>  | ||
| + | |||
Для создания вкладки мы воспользовались системным методом ''getCommonTabs'', который описывается в классе ''def_module''.  | Для создания вкладки мы воспользовались системным методом ''getCommonTabs'', который описывается в классе ''def_module''.  | ||
<br>  | <br>  | ||
Вкладка создана, как в самом модуле, так и в его настройках, но вкладки имеют системные имена:<br>  | Вкладка создана, как в самом модуле, так и в его настройках, но вкладки имеют системные имена:<br>  | ||
| − | ''header-emarket-mytab  | + | ''header-emarket-mytab'' <br/>  | 
| − | header-emarket-mytabconfig''<br>  | + | ''header-emarket-mytabconfig''<br>  | 
Чтобы вкладки получили нужные нам имена, нам необходимо их описать в языковых файлах ''i18n.{язык}.php''.<br>    | Чтобы вкладки получили нужные нам имена, нам необходимо их описать в языковых файлах ''i18n.{язык}.php''.<br>    | ||
Создадим файл ''i18n.ru.php'' с таким содержанием:  | Создадим файл ''i18n.ru.php'' с таким содержанием:  | ||
| Строка 49: | Строка 77: | ||
  }  |   }  | ||
</source>  | </source>  | ||
| − | Более подробно в   | + | Более подробно в [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/razrabotka_sobstvennyh_makrosov_i_modulej/ документации по созданию своего модуля]  | 
<p></p>  | <p></p>  | ||
| − | Для отображением данных на вкладке, необходимо создать файл ''/styles/skins/mac/data/modules/emarket/list.view.  | + | Для отображением данных на вкладке, необходимо создать файл ''/styles/skins/mac/data/modules/emarket/list.view.custom.xsl'', где описать шаблон для вкладки:  | 
<source lang="xml">  | <source lang="xml">  | ||
| − | <xsl:template match="/result[@method = 'mytab']/data[@type = 'list' and @action = 'view']">  | + | <?xml version="1.0" encoding="UTF-8"?>  | 
| − | + | <!DOCTYPE xsl:stylesheet SYSTEM "ulang://common" [  | |
| − | </xsl:template>  | + | ]>  | 
| + | |||
| + | |||
| + | <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/TR/xlink">  | ||
| + | |||
| + | 	<xsl:template match="/result[@method = 'mytab']/data[@type = 'list' and @action = 'view']">  | ||
| + | 		Test  | ||
| + | 	</xsl:template>	  | ||
| + | |||
| + | </xsl:stylesheet>  | ||
</source>  | </source>  | ||
| − | Более подробно в   | + | Более подробно в [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/kodirovanie_administrativnogo_interfejsa/ документации по кодированию административного интерфейса]  | 
| + | |||
| + | '''По материалам отдела разработки'''  | ||
| + | [[Категория:Написание кастомных макросов]][[Категория:API]]  | ||
Текущая версия на 08:02, 2 ноября 2018
Задача: не затрагивая системный код кастомизировать системный модуль через добавление собственной вкладки.
Решение.
Пояснения:
В классе def_module находится метод __implement в задачи которого входит собрать все необходимые для работы модуля классы вместе. Имплементятся все классы, находящиеся в файлах с двойным подчеркиванием, среди собранных будет и класс __emarket_custom_admin, находящийся в файле __custom_adm.php. Далее, при помощи php-функции get_class_methods из собранных классов получаем массив всех методов из всех классов. Далее, в переменную fn помещается название функции onImplement и при помощи функции in_array мы ищем, имеется ли данное значение среди объявленных методов. Если такое значение есть, то система исполняет код описанный в функции onImplement.
Таким образом, если мы хотим получить доступ к системным методам, нам необходимо их задействовать в классе __emarket_custom_admin и в методе onImplement().
Теперь добавим новую вкладку в модуль Интернет-магазина.
Для этого откроем файл /classes/modules/emarket/__custom_adm.php и в классе __emarket_custom_admin напишем метод onImplement():
public function onImplement() {
	$commonTabs = $this->getCommonTabs();
	$commonTabs->add('mytab');
	$configTabs = $this->getConfigTabs();
	$configTabs->add('mytabconfig');
}
Для версии 16 и Выше
«d-groups.ru 08:02, 2 ноября 2018 (UTC)»
1. Создать папку /classes/modules/emarket/ext/admin_tabs.php
2. Создать класс
class admin_tabs{
   public function __construct($module) {
        $this->module = $module;
        if (cmsController::getInstance()->getCurrentMode() == "admin") {
            $commonTabs = $this->module->getCommonTabs();
            $commonTabs->add('mytab');
             $configTabs = $this->module->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();
 }
Более подробно в документации по созданию своего модуля
Для отображением данных на вкладке, необходимо создать файл /styles/skins/mac/data/modules/emarket/list.view.custom.xsl, где описать шаблон для вкладки:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://common" [
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/TR/xlink">
	<xsl:template match="/result[@method = 'mytab']/data[@type = 'list' and @action = 'view']">
		Test
	</xsl:template>	
</xsl:stylesheet>
Более подробно в документации по кодированию административного интерфейса
По материалам отдела разработки