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


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

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

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

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

Дистрибутивы, не имеющие экземпляров модулей

Некоторые компоненты системы не имеют экземпляров модулей как таковых, например:

  • платежные драйверы;
  • драйверы авторизации в сторонних приложениях (социальных сетях);
  • гаджеты визуального редактора;
  • драйверы модуля импорта данных.

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

Пусть условная конфигурация идентифицируется как "ami_fake/ami_spoiler_gadget".

Минимально необходимая структура дистрибутива:

  • "code/AmiFake_AmiSpoilerGadget_Meta.php" - метаданные дистрибутива;
  • "distrib/configs/ami_fake/ami_spoiler_gadget/install.php" - код, исполняемый при инсталляции дистрибутива;
  • "distrib/configs/ami_fake/ami_spoiler_gadget/uninstall.php" - код, исполняемый при деинсталляции дистрибутива в режиме сохранения данных и локального PHP-кода;
  • "distrib/configs/ami_fake/ami_spoiler_gadget/uninstall_all.php" - код, исполняемый при деинсталляции дистрибутива в режиме удаления данных и локального PHP-кода;
  • "manifest.xml" - манифест.

Остальные файлы:

  • "distrib/configs/ami_fake/gadget_ami_spoiler.jpg" - иконка гаджета;
  • "distrib/configs/ami_fake/ami_spoiler.tpl" - шаблон гаджета;
  • "distrib/configs/ami_fake/ami_spoiler_parameters.tpl" - шаблон параметров гаджета;
  • "distrib/configs/ami_fake/gadgets.lng" - локализация.

 

  1. Файл с манифестом

    "manifest.xml"
    <?xml version="1.0" encoding="utf-8"?>
    <package id="amiro.ami_spoiler_gadget" version="1.0" manifestVersion="1.0">
        <information lang="en">
            <title>Visual Editor "Spoiler" gadget</title>
            <description>Visual Editor "Spoiler" gadget</description>
            <author>Amiro.CMS</author>
            <source>http://www.amirocms.com</source>
        </information>
        <information lang="ru">
            <title>Гаджет "Спойлер" для визуального редактора</title>
            <description>Гаджет "Спойлер" для визуального редактора</description>
            <author>Amiro.CMS</author>
            <source>http://www.amiro.ru</source>
        </information>
        <installation>
            <install hypermodule="ami_fake" configuration="ami_spoiler_gadget" version="1.0" />
        </installation>
        <dependencies>
            <dependency hypermodule="ami_fake" version="1.0" />
        </dependencies>
    </package>

    Манифест дистрибутива, не имеющего экземпляров модулей, не содержит тегов <contents>...</contents>.

  2. Файл с метаданными конфигурации

    "code/AmiFake_AmiSpoilerGadget_Meta.php"
    <?php
    /**
     * AmiFake/AmiSpoilerGadget configuration.
     *
     * @copyright Amiro.CMS. All rights reserved.
     * @package   Config_AmiFake_AmiSpoilerGadget
     * @since     5.14.10
     */
     
    /**
     * AmiFake/AmiSpoilerGadget configuration metadata.
     *
     * @package    Config_AmiFake_AmiSpoilerGadget
     * @subpackage Model
     * @since      5.14.10
     */
    class AmiFake_AmiSpoilerGadget_Meta extends AMI_HyperConfig_Meta{
        /**
         * Version
         *
         * @var string
         */
        protected $version = '1.0';
     
        /**
         * Flag specifying that hypermodule configs can have only one instance per config
         *
         * @var bool
         */
        protected $isSingleInstance = TRUE;
     
       /**
         * Array having locales as keys and captions as values
         *
         * @var array
         */
        protected $aTitle = array(
            'en' => 'Visual Editor "Spoiler" gadget',
            'ru' => 'Гаджет "Спойлер" для визуального редактора'
        );
     
        /**
         * Array having locales as keys and meta data as values
         *
         * @var array
         */
        protected $aInfo = array(
            'en' => array(
                'description' => 'Visual Editor "Spoiler" gadget',
                'author'      => '<a href="http://www.amirocms.com" target="_blank">Amiro.CMS</a>'
            ),
            'ru' => array(
                'description' => 'Гаджет "Спойлер" для визуального редактора',
                'author'      => '<a href="http://www.amiro.ru" target="_blank">Amiro.CMS</a>'
            )
        );
     
        /**
         * Retrurns allowed installation/uninstallation modes.
         *
         * @param  string $type  Possible values: 'install' / 'uninstall' / '' (all)
         * @return array
         */
        public function getAllowedModes($type = ''){
             $aModes = parent::getAllowedModes();
             unset($aModes['uninstall']['soft']);
             return
                 $type === '' ? $aModes : $aModes[$type];
        }
    }

    Все описанные свойства класса, за исключением $isSingleInstance, для нашего случая являются обязательными.

  3. PHP-скрипт, исполняемый при инсталляции дистрибутива

    "install.php"
    <?php
    /**
     * @copyright Amiro.CMS. All rights reserved.
     * @package   Config_AmiFake_AmiSpoilerGadget
     */
     
    $oStorage = AMI::getResource('storage/fs');
    $oTplStorage = AMI::getResource('storage/tpl');
     
    $srcPath = dirname(__FILE__) . '/';
    $destPath = AMI_Registry::get('path/root') . '_local/';
     
    // Copy icon
    // Копируем иконку гаджета из дистрибутива в нужное место
     
    $file = 'gadget_ami_spoiler.jpg';
    $this->aTx['storage']->addCommand(
        'storage/copy',
        new AMI_Tx_Cmd_Args(
            array(
                'mode'     => AMI_iTxCmd::MODE_APPEND,
                'source'   => $srcPath . $file,
                'target'   => AMI_Registry::get('path/root') . '_mod_files/ce_images/gadgets/' . $file,
                'oStorage' => $oStorage
            )
        )
    );
     
    // Patch "_local/_admin/templates/lang/gadgets.lng" locale (in fs and db)
    // Дописываем в файл локализацию гаджета (в файловую систему и БД)
     
    $file = 'gadgets.lng';
    foreach(
        array(
            AMI_Registry::get('path/root') => $oStorage,
            ''                             => $oTplStorage
        ) as $dest => $oTmpStorage
    ){
        $this->aTx['storage']->addCommand(
            'tpl/install',
            new AMI_Tx_Cmd_Args(
                array(
                    'mode'      => $this->mode,
                    'modId'     => $this->modId,
                    'target'    => $dest . AMI_iTemplate::LOCAL_LNG_PATH . '/' . $file,
                    'content'   => $oStorage->load($srcPath . $file),
                    'oStorage'  => $oTmpStorage,
                )
            )
        );
    }
    unset($oTmpStorage);
     
    // Copy templates to disk storage
    // Копируем шаблоны гаджета из дистрибутива в нужное место
     
    foreach(
        array(
            'ami_spoiler.tpl',
            'ami_spoiler_parameters.tpl'
        ) as $file
    ){
        $this->aTx['storage']->addCommand(
            'storage/copy',
     new AMI_Tx_Cmd_Args(
                array(
                    'mode'     => AMI_iTxCmd::MODE_APPEND,
                    'source'   => $srcPath . $file,
                    'target'   => AMI_Registry::get('path/root') . AMI_iTemplate::LOCAL_TPL_PATH . '/gadgets/' . $file,
                    'oStorage' => $oStorage
                )
            )
        );
    }
  4. PHP-скрипт, исполняемый при деинсталляции дистрибутива

    "uninstall_all.php"
     <?php
    /**
     * Script executing on hard uninstalling.
     *
     * @copyright Amiro.CMS. All rights reserved.
     * @package   Config_AmiFake_AmiSpoilerGadget
     */
     
    $oStorage = AMI::getResource('storage/fs');
    $oTplStorage = AMI::getResource('storage/tpl');
     
    $srcPath = dirname(__FILE__) . '/';
    $destPath = AMI_Registry::get('path/root') . '_local/';
     
    // Delete templates from disk storage
    // Удаляем шаблоны гаджета
     
    $path = AMI_Registry::get('path/root') . AMI_iTemplate::LOCAL_TPL_PATH . '/gadgets/';
    $oStorage->delete($path . 'ami_spoiler_parameters.tpl');
    $oStorage->delete($path . 'ami_spoiler.tpl');
     
    // Patch "_local/_admin/templates/lang/gadgets.lng" locale (in fs and db)
    // Удаляем локализацию гаджета (из файловой системы и БД)
     
    $file = 'gadgets.lng';
    foreach(
        array(
            AMI_Registry::get('path/root') => $oStorage,
            ''                             => $oTplStorage
        ) as $dest => $oTmpStorage
    ){
        $this->aTx['storage']->addCommand(
            'tpl/uninstall',
     new AMI_Tx_Cmd_Args(
                array(
                    'mode'      => $this->mode,
                    'modId'     => $this->modId,
                    'target'    => $dest . AMI_iTemplate::LOCAL_LNG_PATH . '/' . $file,
                    'oStorage'  => $oTplStorage,
                )
            )
        );
    }
    unset($oTmpStorage);
     
    // Delete icon
    // Удаляем иконку
     
    $oStorage->delete(
        AMI_Registry::get('path/root') . '_mod_files/ce_images/gadgets/gadget_ami_spoiler.jpg'
    );
  5. Файл с локализацией

    "gadgets.lng"
    %%ami_spoiler%en%%
    Spoiler
    %%ami_spoiler%ru%%
    Спойлер
    %%ami_spoiler_author%en%%
    Amiro.CMS
    %%ami_spoiler_author%ru%%
    Amiro.CMS
    %%ami_spoiler_url%en%%
    http://www.amirocms.com
    %%ami_spoiler_url%ru%%
    http://www.amiro.ru
     
    %%ami_spoiler_description%en%%
    Visual Editor &quot;Spoiler&quot; gadget
    %%ami_spoiler_description%ru%%
    Гаджет &quot;Спойлер&quot; для визуального редактора
     
    %%ami_spoiler_content%en%%
    Content
    %%ami_spoiler_content%ru%%
    Содержимое
     
    %%ami_spoiler_header%en%%
    Spoiler
    %%ami_spoiler_header%ru%%
    Спойлер
  6.  Шаблон гаджета

    "ami_spoiler.tpl"
    <div class="amiSpoilerConatiner" style="border: 1px dotted #000;">
    <div class="amiSpoilerHeader" style="cursor: pointer; font-weight: bold; padding: 2px;" onclick="top.AMI.$(this).next().toggle();">%%ami_spoiler_header%%</div>
    <div class="amiSpoilerContent" style="display: none; background-color: #eee; padding: 2px;">##ami_spoiler_content##</div>
    </div>
  7. Шаблон параметров гаджета

    "ami_spoiler_parameters.tpl"
    %%ami_spoiler_content%%:<br />
    <textarea name="ami_spoiler_content" style="width: 550px; height: 300px;"></textarea>

API транзакционных команд, используемых при инсталляции/деинсталляции: http://manual.amiro.ru/docs/api6/li_TxCommand.html

API для инсталляции/деинсталляции модулей из кода: http://manual.amiro.ru/docs/api6/li_TxService.html

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