denis-vinokurov/annotation-hydrator-bitrix

1.10.1 2020-05-28 07:11 UTC

This package is not auto-updated.

Last update: 2024-09-27 03:18:34 UTC


README

为了输出页面,需要在文件 /local/php_interface/init.php 中包含以下代码

  • /local/php_interface/init.php 文件中,添加 require_once $PATH_TO_PACKAGE . '/bitrix-files/menu.php'
  • 创建文件 /bitrix/admin/annotation-hydrator.php 并包含以下代码 require $PATH_TO_PACKAGE. '/bitrix-files/admin-section.php';
  • 之后,页面将通过 服务->注解 hydrator 路径访问

类型为 '引用元素' 的字段

存储库应实现接口 \Vinds\AnnotationHydrator\Repository\RepositoryInterface 并在 \Psr\Container\ContainerInterface 中按以下模板注册

  • 信息块元素的存储库 - iBlockElement#IBLOCK_ID#
  • 信息块分区的存储库 - iBlockSection#IBLOCK_ID#
  • 高亮块元素的存储库 - HighLoadBlock#HIGHLOAD_ID#

FileField

在从数据库选择文件之前,如果有集合上下文,则选择集合中所有文件的 id,然后获得 1 次查询。结果仅对表 b_file 执行 1 次查询。

在使用此类型字段之前,必须在 \Vinds\AnnotationHydrator\EntityManager 中设置 \Vinds\AnnotationHydratorBitrix\Annotations\FileField 的字段。 \Vinds\AnnotationHydrator\EntityManager 将用于选择其他包含文件的字段。

$entityManager = $locator->get(\Vinds\AnnotationHydrator\EntityManager::class);
\Vinds\AnnotationHydratorBitrix\Annotations\FileField::setEntityManager($entityManager);

IBlock

\Vinds\AnnotationHydratorBitrix\Annotations\IBlock\IBlockId

建议为所有属于信息块类的类指定

向选项中添加信息块 id 的值。可以应用于类

use Vinds\AnnotationHydrator\Annotations;
use Vinds\AnnotationHydratorBitrix\Annotations\IBlock;

/**
 * @Annotations\Entity()
 * @IBlock\IBlockId(3)
 */
class Entity {
    /**
     * @IBlock\Property()
     * @IBlock\EnumField(name="SIZES_CLOTHES")
     *
     * @var \Vinds\AnnotationHydratorBitrix\Types\Enum\EnumItem
     */
    protected $sizesClothes;
}

use Vinds\AnnotationHydrator\Annotations;
use Vinds\AnnotationHydratorBitrix\Annotations\IBlock;

define('IB_SKU', 3);

/**
 * @Annotations\Entity()
 * @IBlock\IBlockId(IB_SKU)
 */
class Entity {
    /**
     * @IBlock\Property()
     * @IBlock\EnumField(name="SIZES_CLOTHES")
     *
     * @var \Vinds\AnnotationHydratorBitrix\Types\Enum\EnumItem
     */
    protected $sizesClothes;
}

\Vinds\AnnotationHydratorBitrix\Annotations\IBlock\Property

在为包含来自信息块属性的数据的类属性指定此注解时,不需要指定前缀 PROPERTY_ 和后缀 _VALUE。例如

use Vinds\AnnotationHydrator\Annotations;
use Vinds\AnnotationHydratorBitrix\Annotations\IBlock;

/**
 * @Annotations\Entity()
 */
class Entity {
    /**
     * @IBlock\Property()
     * @IBlock\EnumField(name="SIZES_CLOTHES")
     *
     * @var \Vinds\AnnotationHydratorBitrix\Types\Enum\EnumItem
     */
    protected $sizesClothes;
}

IBlock\EnumRepository

为信息块类型为列表的属性创建存储库

use \Vinds\AnnotationHydratorBitrix\Types;
use \Vinds\AnnotationHydratorBitrix\IBlock;

$enumItemFactory = new Types\Enum\EnumItemFactory();

$enumFactory = new Types\Enum\EnumFactory($enumItemFactory);

$cache = new \Vinds\AnnotationHydratorBitrix\BitrixCache('/enum-repository/');

$enumRepository = new IBlock\EnumRepository($enumFactory, $cache);

获取值列表

列表缓存通过 \Vinds\AnnotationHydratorBitrix\BitrixCache/enum-repository/ 文件夹中。缓存存活 1 天,并标记为 iblock_id_${iBlockId} 标签。

$list = $emumRepository->get($iBlockId, $propertyCode);

HighloadBlock

\Vinds\AnnotationHydratorBitrix\Annotations\HighloadBlock\HLBlockId

建议为所有属于 HIGHLOAD_BLOCK 的类指定

向选项中添加信息块 id 的值。可以应用于类

use Vinds\AnnotationHydrator\Annotations;
use Vinds\AnnotationHydratorBitrix\Annotations\HighloadBlock;

/**
 * @Annotations\Entity()
 * @IBlock\HLBlockId(3)
 */
class Entity {
    /**
     * @\Vinds\AnnotationHydratorBitrix\Annotations\UserField\EnumField(name="SIZES_CLOTHES")
     *
     * @var \Vinds\AnnotationHydratorBitrix\Types\Enum\EnumItem
     */
    protected $sizesClothes;
}

UserField

UserField\EnumRepository

为用户类型列表创建存储库

use \Vinds\AnnotationHydratorBitrix\Types;
use \Vinds\AnnotationHydratorBitrix\UserField;

$enumItemFactory = new Types\Enum\EnumItemFactory();
$enumFactory = new Types\Enum\EnumFactory($enumItemFactory);

$enumRepository = new UserField\EnumRepository($enumFactory);

获取值列表

$list = $enumRepository->get($entityId, $fieldName);