itgro/extensions

1С-Битри克斯工作助手

安装: 189

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 3

类型:itgro-module

1.6.3 2019-06-07 11:31 UTC

This package is auto-updated.

Last update: 2024-09-10 21:41:19 UTC


README

模块包含多种类,旨在简化1С-Битри克斯网站开发者的工作。

安装

  1. composer require itgro/extensions

  2. 为了正确使用twig模板,需要按照 maximaster/tools.twig 的设置说明进行操作。

  3. 为了使用ajax路由器,需要在 urlrewrite.php 文件中添加(建议放置较高位置)。

    array(
        'CONDITION' => '#^\/ajax\/([^\/]*)#',
        'RULE' => 'handler=$1',
        'ID' => '',
        'PATH' => '/ajax/index.php',
    ),
  4. 为了使用动态代理,需要通过 (new \Itgro\Cron\Kernel)->register(); 添加代理核心的初始化。注意!必须在创建代理处理器后执行此操作。

有哪些功能

辅助类

  • \Itgro\BufferView - 与 $APPLICATION->ShowViewContent() 一起工作,但范围更窄、更易于理解;

  • \Itgro\Log - 对 CEventLog::Log() 的小型包装;

  • \Itgro\Mail - 可以通过模板或普通发送发送邮件;

  • \Itgro\Router - 一个类,可以存储项目中的所有(相对简单的)链接到一个数组中,并通过简短的助手获取它们。默认情况下,所有别名都存储在网站的根目录中的 routes.php 文件中。可以通过声明常量 EXTENSIONS_ROUTES_PATH 来改变此文件的路径(从网站根目录开始)。routes.php 文件中的数组结构非常简单

    return [
        'auth' => '/personal/auth/',
        'register' => '/personal/registration/',
    ];

因此,可以通过 \Itgro\Router::getByCode('auth')(或助手 route('auth'))获取所需的路径;

  • \Itgro\Session - 对会话的包装(所有数据都存储在 $_SESSION 的子数组中);

  • \Itgro\Bitrx\* 命名空间下有大量不同的类,允许简单地获取值(类似于“根据代码获取id”)。
    所有数据都进行缓存。因此,如果您通过 \Itgro\Bitrix\IBlock\Iblock::getByCode() 一次获取到IB的id,则后续所有调用都将调用已缓存的值。

  • \Itgro\Sharing - 一个用于在社交媒体中创建分享链接的类(和相关处理器);

用于处理比特里克斯实体的类

  • \Itgro\Entity\IBlock\Base - 一个抽象类,用于更方便地处理 CIBlockElement

  • \Itgro\Entity\IBlock\Entity - 一个抽象类(以前者为父类),允许将返回数组的每个元素都用作对象;

  • \Itgro\Entity\IBlock\Base(以及相应地,在 \Itgro\Entity\IBlock\Entity)中有一个名为 \Bitrix\Entity\IBlock\WithEvents 的特质(您当然也可以在其他比特里克斯实体类型中使用它)。
    它允许将处理器(更新、添加、删除元素)附加到特定的您的实体上,以便处理器仅对特定IB执行。
    当然,您可以扩展您的实体以添加新的处理器(例如,"激活时",它扩展 \Bitrix\Entity\IBlock\WithEvents::afterUpdate());

  • \Itgro\Entity\HighloadIBlock\Base - 一个用于方便处理Highload-IB的抽象类;

  • \Itgro\Entity\DataManager\Base - 一个用于方便处理有自己ORM类的单独表的抽象类;

类扩展器

  • 通过在 \Itgro\Ajax\Distributor::EXPAND_HANDLERS_EVENT 上附加处理器,可以添加自己的ajax处理器;

    /**
     * В этом примере будут доступны запросы вида `/ajax/feedback/%method%/`,
     * каждый из которых будет делигироваться в соответствующий класс на соответствующий метод
     */
    event_manager()->addEventHandler('extensions', \Itgro\Ajax\Distributor::EXPAND_HANDLERS_EVENT, function (\Bitrix\Main\Event $event) {
        return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, [
            'feedback' => \Namespace\Some\Class::class,
        ]);
    })

    甚至更简单

    \Itgro\Ajax\Distributor::setHandlers([
        'feedback' =>\Namespace\Some\Class::class,
    ]);

    为了通用ajax请求的数据,有以 \Itgro\Ajax\Result\* 命名空间为类的类。可以返回它们作为ajax方法的响应,并按返回对象类型处理。

  • 通过在 \Itgro\Twig\Extension\Functions::EXPAND_HANDLERS_EVENT 上附加处理器,可以添加自己的Twig函数;

    event_manager()->addEventHandler('extensions', \Itgro\Twig\Extension\Functions::CREATE_HANDLERS_LIST_EVENT, function (\Bitrix\Main\Event $event) {
        return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, [
            'foo_func' => [\Namespace\Some\Class::class, 'fooFunc'],
            'bar_func' => [\Namespace\Some\Second\Class::class, 'barFunc'],
        ]);
    })

    甚至更简单

    \Itgro\Twig\Extension\Functions::setHandlers([
        'foo_func' => [\Namespace\Some\Class::class, 'fooFunc'],
    ]);
  • 通过在 \Itgro\Twig\Extension\Filters::EXPAND_HANDLERS_EVENT 上附加处理器,可以添加自己的Twig过滤器。代码的结构大致如上所述。

  • 通过类创建动态代理的能力。每个这样的类都必须是类 \Itgro\Cron\Agent 的子类,并且必须有一个 call() 方法。如果您的代理需要接受参数并返回它们,则在同一方法中完成此操作。
    函数名称可以通过代理类的参数 name 明确指定,或者类的名称将自动转换为 camel_case,因此函数名称将变为 \Itgro\Cron\Agent -> itgro_cron_agent

  • 通过标准初始化添加自定义代理类的能力

    event_manager()->addEventHandler('extensions', \Itgro\Cron\Kernel::EXPAND_HANDLERS_EVENT, function () {
        return new EventResult(EventResult::SUCCESS, [
            \Namespace\Some\FirstAgent::class,
            \Namespace\Some\SecondAgent::class,
        ]);
    });

    甚至更简单

    \Itgro\Cron\Kernel::setHandlers([
        \Namespace\Some\Agent::class,
    ]);

与行政面板的操作

  • 在元素编辑页面上操纵特定属性

    (new \Namespace\IBlockExtended\Entity)->addElementPropertyInformation(
        'IBLOCK_PROPERTY_CODE', // Код свойства, для которого отрабатывается js-функция
        function ($propertyId) {
            // JavaScript-код или JavaScript-функция, которые будут обрабатываться только на странице, где есть свойство с указанным кодом
            return 'javascriptFunctionName';
        }
    )
  • 在关联实体页面上添加按钮,用于根据当前实体进行过滤以跳转到元素编辑页面上

    (new \Namespace\IBlockExtended\Entity)->addElementAdminButton(
        (new \Itgro\Bitrix\Admin\Button\ElementEdit)
            ->withProperties([
                'iblock_type' => 'iblock_type_id', // Тип ИБ связанной страницы
                'iblock_code' => 'iblock_code', // Код ИБ связанной страницы
                'filter' => [
                    // Фильтр по текущей сущности
                    ['type' => 'property', 'code' => 'RELATED_PROPERTY_CODE'],
                ],
            ])
            ->withView([
                'place' => 'before', // Добавлять до или после кнопки копирования
                'style' => 'adm-btn-green', // Доп.классы для кнопки
                'name' => 'Элементы', // Заголовок кнопки
            ])
    );