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


Новая документация

Настройка платежных систем
Настройка способа оплаты КупиВкредит
Настройка способа оплаты Acquiro
Настройка способа оплаты AvisoSMS

Обновленная документация 

Разработчикам (API)
Руководство пользователя

Дистрибутив модуля 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 – 2011 © Amiro.CMS Все права защищены.