Создание собственной вкладки в системном модуле — различия между версиями
Velross (обсуждение | вклад) |
Alexei (обсуждение | вклад) |
||
Строка 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'); |
Версия 06:28, 28 октября 2015
Задача: не затрагивая системный код кастомизировать системный модуль через добавление собственной вкладки.
Решение.
Пояснения:
В классе 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');
}
Для создания вкладки мы воспользовались системным методом 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>
Более подробно в документации по кодированию административного интерфейса
По материалам отдела разработки