Центр документации
Карта сайта

Создай визитку сам!


Самоучитель по интеграции дизайна и настройке Amiro.CMS на примере демонстрационной версии пакета Визитка »


Дистрибутив модуля Hello World (расширенный вариант)

Задача

Создать модуль "Hello World", который будет выводить текстовую строку "Hello World!". Текст можно изменить в настройках модуля.

Модуль должен работать как в панели управления, так и на публичной части сайта.

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

Суть решения

Поскольку модуль обеспечивает простейший функционал и не требует наличия модели данных, для его реализации подойдет базовый гипермодуль ami_clean.

С помощью генератора решений будет создана конфигурация базового гипермодуля будет называться hello_world.

Для вывода текстовой строки будет использована пользовательская компонента типа "informer".

Создание основы модуля

Используя расширение Генератор решений, создадим дистрибутив со следующими параметрами:

После добавления, файлы дистрибутива будут размещены в каталоге "_local/modules/data/ami_devtool/my.hello_world/".

Cостав дистрибутива

Для реализации расширения нам потребуется следующее:

1) Код модуля для панели администратора

  • контроллер модуля
  • контроллер компоненты
  • отображение компоненты

 2) Код модуля для публичной части сайта

  • контроллер модуля
  • контроллер компоненты
  • отображение компоненты

3) Мета-файл модуля

4) Конфигурация модуля (скелет экземпляра)

  • заготовки кода экземпляра модуля
  • заготовки настроек и объявления экземпляра модуля
  • заготовки шаблонов и файлов языковых переменных панели администратора
  • заготовки шаблонов и файлов языковых переменных публичной части сайта
  • заготовки языковых переменных диалога настройки экземпляра модуля

5) Манифест

Все файлы расширения уже созданы Генератором дистрибутивов, и размещены в каталоге "_local/modules/data/ami_devtool/my.hello_world/":

/code/

AmiClean_HelloWorld_Adm.php
AmiClean_HelloWorld_Frn.php
AmiClean_HelloWorld_Meta.php  

/distrib/configs/ami_clean/hello_world/code/

--modId--_Adm.php
--modId--_Frn.php

/distrib/configs/ami_clean/hello_world/declaration/

declaration.php
options.php
properties.php
rules.php 

/distrib/configs/ami_clean/hello_world/templates/

--modId--_informer.tpl

/distrib/configs/ami_clean/hello_world/templates_frn/

--modId--.tpl
--modId–_messages.tpl

/distrib/configs/ami_clean/hello_world/locales/

--modId--_informer.lng

/distrib/configs/ami_clean/hello_world/locales_frn/

--modId--.lng

 /manifest.xml

Более подробно структура файлов дистрибутива рассмотрена в разделах "Состав дистрибутива" и "Конфигурация модуля"

 

Код модуля для панели администратора

/code/AmiClean_HelloWorld_Adm.php

<?php
/**
 * Контроллер модуля
 */
class AmiClean_HelloWorld_Adm extends Hyper_AmiClean_Adm{
    public function __construct(AMI_Request $oRequest, AMI_Response $oResponse){
        parent::__construct($oRequest, $oResponse);
        // Добавление компоненты типа "informer"
        $this->addComponents(array('informer'));
    }
}
 
/**
 * Контроллер компоненты типа "Informer"
 */
class AmiClean_HelloWorld_InformerAdm extends Hyper_AmiClean_ComponentAdm{
    protected $useModel = false;
    // Возвращает тип компоненты
    public function getType(){
        return 'informer';
    }
}
/**
 * Отображение компоненты типа "Informer"
 */
class AmiClean_HelloWorld_InformerViewAdm extends Hyper_AmiClean_ComponentViewAdm{
    // Получение результата
    public function get(){
        // Возвращает результат обработки сета informer текущего шаблона компоненты
        return $this->parse(
            'informer'// имя сета
            array(
                // передаем в сет текст из настройки informer_text экземпляра модуля в переменную ##text##
                'text' => AMI::getOption(
                    $this->getModId(),
                    'informer_text'
                )
            )
        );
    }
}

Код модуля для публичной части сайта

/code/AmiClean_HelloWorld_Frn.php

<?php
/**
 * Контроллер модуля
 */
class AmiClean_HelloWorld_Frn extends Hyper_AmiClean_Frn{
    public function __construct(AMI_Request $oRequest, AMI_Response $oResponse){
        $this->setDefaultBodyType('informer');
        parent::__construct($oRequest, $oResponse);
        // Добавление компонеты типа "informer"
        $this->addComponents(array('informer'));
    }
}
 
/**
 * Контроллер компоненты типа "Informer"
 */
class AmiClean_HelloWorld_InformerFrn extends Hyper_AmiClean_ComponentFrn{
    protected $useModel = false;
    // Возвращает тип компоненты
    public function getType(){
        return 'informer';
    }
}
 
/**
 * Отображение компоненты типа "informer"
 */
class AmiClean_HelloWorld_InformerViewFrn extends Hyper_AmiClean_ComponentViewFrn{
    // Получение результата
    public function get(){
        // Возвращает результат обработки сета informer текущего шаблона компоненты
        return $this->parse(
            'informer'// имя сета
            array(
                // передаем в сет текст из настройки informer_text экземпляра модуля в переменную ##text##
                'text' => AMI::getOption(
                    $this->getModId(),
                    'informer_text'
                )
            )
        );
    }
}
 
/**
 * Контроллер спецблока
 */
class AmiClean_HelloWorld_SpecblockFrn extends Hyper_AmiClean_ComponentFrn{
    protected $useModel = false;
    // Возвращает тип компоненты
    public function getType(){
        return 'specblock';
    }
}
 
/**
 * Отображение спецблока
 */
class AmiClean_HelloWorld_SpecblockViewFrn extends Hyper_AmiClean_ComponentViewFrn{
    // Получение результата
    public function get(){
        // Возвращает результат обработки сета informer текущего шаблона компоненты
        return $this->parse(
            'informer'// имя сета
            array(
                // передаем в сет текст из настройки informer_text экземпляра модуля в переменную ##text##
                'text' => AMI::getOption(
                    $this->getModId(),
                    'informer_text'
                )
            )
        );
    }
}

Мета-файл модуля

/code/AmiClean_HelloWorld_Meta.php 

 

<?php
/**
 * Мета-файл модуля "Hello World"
 */
class AmiClean_HelloWorld_Meta extends AMI_HyperConfig_Meta{
    /**
     * Версия кода модуля
     */
    protected $version = '1.0';
    /**
     * Можно устанавливать несколько экземпляров (FALSE)
     */
    protected $isSingleInstance = FALSE;
    /**
     * Название модуля
     */
    protected $aTitle = array(
        'ru' => 'Hello World'
    );
    /**
     * Информация о модуле
     */
    protected $aInfo = array(
        'ru' => array(
            'description' => 'Описание модуля',
            'author'      => 'Разработчик'
        )
    );
    /**
     * Дополнительные поля в диалоге установки экземпляра модуля
     */
     protected $aCaptions = array(
        '' => array(
            'header' => array(
                'obligatory' => TRUE,
                'type' => self::CAPTION_TYPE_STRING,
                'locales' => array(
                    'ru' => array(
                        'name' => 'Заголовок',
                        'caption' => 'HELLO WORLD',
                    )
                )
            ),
            'menu' => array(
                'obligatory' => TRUE,
                'type' => self::CAPTION_TYPE_STRING,
                'locales' => array(
                    'ru' => array(
                        'name' => 'Заголовок для меню',
                        'caption' => 'Hello World',
                    )
                )
            ),
            'description' => array(
                'obligatory' => FALSE,
                'type' => self::CAPTION_TYPE_TEXT,
                'locales' => array(
                    'ru' => array(
                       'name' => 'Описание модуля для стартовой страницы интерфейса администратора',
                       'caption' => 'Описание модуля Hello World',
                    )
                )
            ),
            'specblock' => array(
                'obligatory' => FALSE,
                'type' => self::CAPTION_TYPE_TEXT,
                'locales' => array(
                    'ru' => array(
                        'name' => 'Название спецблока для менеджера сайта',
                        'caption' => 'Спецблок Hello World',
                    )
                )
            )
        )
    );
}

Настройки экземпляра модуля доступные для изменения через диалог настроек.

/distrib/configs/ami_clean/hello_world/declaration/options.php

<?php
// {{}}
if($oDeclarator->isRegistered('##modId##')){
    $oMod = $oDeclarator->getModule('##modId##');
    $oMod->setOption('informer_text', 'Hello World!');
}

Описание параметров настройки.

/distrib/configs/ami_clean/hello_world/declaration/rules.php

<?php
// {{}}if($oDeclarator->isRegistered('##modId##')){
    $oMod = $oDeclarator->getModule('##modId##');
    $oMod->addRule('informer_text', AMI_Module::RLT_STRING, array(), 'Hello World!');
    $oMod->finalize();
}

Заготовки языковых переменных диалога настройки экземпляра модуля

Из этих заготовок будут читаться языковые переменные соответствующих настроек в диалоге настройки экземпляра модуля.

/distrib/configs/ami_clean/hello_world/rules/--modId–_rules_captions.lng

##--system info: module_owner="##section##" module="##modId##" system="1"--##
  
%%informer_text%en%%
Message text
%%informer_text%ru%%
Текст сообщения

Заготовки шаблонов и файлов языковых переменных панели администратора

Поскольку компонента типа "informer" не является системной, для нее не были автоматически созданы шаблоны и языковые файлы. Их придется создать вручную.

Шаблон компоненты типа informer содержит управляющую строку и единственный сет "informer".

 /distrib/configs/ami_clean/hello_world/templates/--modId--_informer.tpl

##--system info: module_owner="##section##" module="##modId##" system="1"--##
 
<!--#set var="informer" value="<div>##text##</div>"-->

 Файлы языковых переменных компоненты и справочной информации содержат только управляющую строку, поскольку ни то ни другое в данном модуле не используется.

/distrib/configs/ami_clean/hello_world/locales/--modId--_informer.lng

##--system info: module_owner="##section##" module="##modId##" system="1"--#

Заготовки шаблонов и файлов языковых переменных публичной части сайта

На публичной части сайта для вывода и тела модуля и спецблоков используется единый шаблон - шаблон модуля.

 /distrib/configs/ami_clean/hello_world/templates_frn/--modId--.tpl

##--system info: module_owner="##section##" module="##modId##" system="1"--##
 
<!--#set var="informer" value="<div class="informer_front">##text##</div>"-->

Манифест

Последний, но самый необходимый элемент дистрибутива - манифест. Без манифеста установка дистрибутива невозможна.

<?xml version="1.0" encoding="utf-8"?>
<package id="my.hello_world" version="1.0" manifestVersion="1.0">
    <information lang="en">
        <!-- Информация о дистрибутиве на английском языке -->
        <title>My Hello World module</title>
        <description>Amiro.CMS sample module</description>
        <author>Author</author>
        <source>http://author's site</source>
    </information>
    <information lang="ru">
        <!-- Информация о дистрибутиве на русском языке -->
        <title>Мой модуль Hello World</title>
        <description>Демонстрационный модуль Amiro.CMS</description>
        <author>Автор</author>
        <source>http://сайт автора</source>
    </information>
    <installation>
        <!-- Гипермодуль, имя конфигурации гипермодуля, и версия конфигурации -->
        <install hypermodule="ami_clean" configuration="hello_world" version="1.0" />
    </installation>
    <dependencies>
        <!-- Данный модуль для установки требует наличия гипермодуля ami_clean версии 1.0 -->
        <dependency hypermodule="ami_clean" version="1.0" />
    </dependencies>
</package>

 

На этом разработку модуля "Hello World" и его дистрибутива можно считать завершенной.

Расширение может быть установлено через действие модуля Генератор расширений. Там же можно скачать tar.gz файл дистрибутива.

Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API)
 2000 – 2019 © Amiro.CMS Все права защищены.