Создание собственной вкладки в системном модуле — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 13 промежуточных версий 3 участников)
Строка 7: Строка 7:
 
Имплементятся все классы, находящиеся в файлах с двойным подчеркиванием, среди собранных будет и класс ''__emarket_custom_admin'', находящийся в файле ''__custom_adm.php''.
 
Имплементятся все классы, находящиеся в файлах с двойным подчеркиванием, среди собранных будет и класс ''__emarket_custom_admin'', находящийся в файле ''__custom_adm.php''.
 
Далее, при помощи php-функции ''get_class_methods'' из собранных классов получаем массив всех методов из всех классов.
 
Далее, при помощи php-функции ''get_class_methods'' из собранных классов получаем массив всех методов из всех классов.
Далее, в переменную ''fn'' помещается название функции ''onInit'' и при помощи функции ''in_array'' мы ищем, имеется ли данное значение среди объявленных методов. Если такое значение есть, то система исполняет код описанный в функции ''onInit''.
+
Далее, в переменную ''fn'' помещается название функции ''onImplement'' и при помощи функции ''in_array'' мы ищем, имеется ли данное значение среди объявленных методов. Если такое значение есть, то система исполняет код описанный в функции ''onImplement''.
Таким образом, если мы хотим получить доступ к системным методам, нам необходимо их задействовать в классе ''__emarket_custom_admin'' и в методе ''onInit()''.<p></p>
+
Таким образом, если мы хотим получить доступ к системным методам, нам необходимо их задействовать в классе ''__emarket_custom_admin'' и в методе ''onImplement()''.<p></p>
  
 
Теперь добавим новую вкладку в модуль Интернет-магазина.<br/>
 
Теперь добавим новую вкладку в модуль Интернет-магазина.<br/>
Для этого откроем файл ''/classes/modules/emarket/__custom_adm.php'' и в классе ''__emarket_custom_admin'' напишем метод ''onInit()'':
+
Для этого откроем файл ''/classes/modules/emarket/__custom_adm.php'' и в классе ''__emarket_custom_admin'' напишем метод ''onImplement()'':
 
<source lang="php">
 
<source lang="php">
public function onInit() {
+
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''.
Строка 51: Строка 79:
 
Более подробно в [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></p>
Для отображением данных на вкладке, необходимо создать файл ''/styles/skins/mac/data/modules/emarket/list.view.cusom.xsl'', где описать шаблон для вкладки:
+
Для отображением данных на вкладке, необходимо создать файл ''/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/ документации по кодированию административного интерфейса]
 
Более подробно в [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>

Более подробно в документации по кодированию административного интерфейса

По материалам отдела разработки