Базовый каркас модуля

Базовый каркас модуля

В этой главе мы создадим простейший модуль, которым можно управлять из адмики.

Класс Module

Как и базовый класс ObjectModel, все модули в Prestashop являются потомками общего базового класса используется для реализации базовой функциональности модулей. Класс «Module» обеспечивает интерфейс администрирования вашего модуля, а также обеспечивает интернационализацию и механизм хуков.

Структура директории

В Prestashop, модули должны быть расположены в пределах директории /modules в подпапках, соответсвующих названию модуля. Каталог и файла класса модуля должны иметь названия в нижнем регистре и иметь то же имя, что и класс модуля. Обратите внимание, что имя класса модуля само по себе не обязано быть в нижнем регистре.

Директория, создаваемого нами модуля будет иметь следующую структуру:

  • tutorial - корневая директория модуля
    • img - директория изображений модуля
      • hello.jpg
    • css - директория стилей модуля
      • tutorial.css
    • js - директория скриптов модуля
      • tutorial.js
    • config.xml - файл описания
    • tutorial.php - файл базового класса модуля
    • tutorial.tpl - шаблон
    • logo.gif - логотип в формате gif размерами 16×16px
    • ru.php - файл перевода

Файл описания был добавлен в PrestaShop 1.4. Его использование не обязательно, но снижает нагрузку на сервер при обращении в админке к странице модулей. Файл описания имеет следующую структуру:

<?xml version="1.0" encoding="UTF-8" ?>
<module>
	<name>tutorial</name>
	<displayName>Название модуля tutorial</displayName>
	<version>0.1</version>
	<description>Описание модуля tutorial.</description>
	<author>PrestaLab</author>
	<tab>front_office_features</tab>
	<confirmUninstall>Действительно хотите удалить модуль?</confirmUninstall>
	<is_configurable>1</is_configurable>
	<need_instance>0</need_instance>
</module>

Предназначение большинства полей понятно из их названия. Поле tab должно содержать название одной из присутствующих на вкладке модулей категории, если вписать туда произвольную фразу, то модуль будет расположен на вкладке «Другие модули». В поле confirmUninstall содержится фраза, которая будет отображена при запросе на удаление модуль. Поле is_configurable содержит флаг возможности настройки модуля. Если в нем будет 0, то ссылка настройки не будет отображена рядом с модулем. Флаг need_instance указывает на необходимость загрузки класса модуля при показе страницы «модули» в админке. Если 0, то модуль загружен не будет, и следовательно будет затрачено меньше ресурсов на генерацию страницы модулей.

Пустой модуль

Для создания модуля необходимо написать его базовый класс. Для этого в файл tutorial.php вставим следующий код:

<?php
//Предотвращаем загрузку модуля при прямом обращении к файлу
if (!defined('_CAN_LOAD_FILES_'))
	exit;
//Класс нашего модуля "Tutorial" является потомком базового класса для модулей "Module"
class Tutorial extends Module
{
//Конструктор класса __construct () позволяет идентифицировать модуль
//и отобразить его в списке модулей
	public function __construct()
	{
//Свойства класса, заполняемые в методе __construct, соответсвуют тем,
//что были определены в файле config.xml
		$this->name = 'tutorial';
		$this->tab = 'front_office_features';
		$this->version = '0.1';
		$this->author = 'PrestaLab';
 
		parent::__construct();
//После вызова конструктора родительского класса мы можем использовать
//предоставляемые им методы, а именно l(), который отвечает за локализацию строки
		$this->displayName = $this->l('Название модуля tutorial');
		$this->description = $this->l('Описание модуля tutorial.');
		$this->confirmUninstall = $this->l('Действительно хотите удалить модуль?');
	}
}

Функция l() позволяет использовать многоязычность в модуле. Каждая строка, которая требует локализации должна быть обернута в эту фунцию. Перевод модуля можно осуществить через админку «Инструменты/Перевод/Перевод модулей».

Созданный нами каркас модуля пока ничего не делает, однако он отображается в списке модулей и его можно установить.

~~DISCUSSION~~

bazovyj-karkas-modulja.txt · Последние изменения: 2015/12/27 16:22 (внешнее изменение)