maximaster/tools.orm

该库提供了通过ORM d7操作信息块的工具

dev-master 2023-03-15 09:20 UTC

This package is auto-updated.

Last update: 2024-08-30 01:51:09 UTC


README

该库提供了从信息块中选取数据及其属性的功能。属性的值“原样”选择,不对其数据进行修改。

为了对单个信息块进行查询,需要创建自己的实体,该实体将描述信息块。为此,需要创建一个类,该类将是Maximaster\Tools\Orm\Iblock\ElementTable类的继承者。这个类只需要实现一个方法,该方法应返回信息块的ID

class ProductTable extends Maximaster\Tools\Orm\Iblock\ElementTable
{
    public static function getIblockId()
    {
        return 1;
    }
}

现在可以使用这个类来操作ID为1的信息块。在这种情况下,不需要设置信息块过滤器,因为查询时会自动添加过滤器。复杂的逻辑和修改器的过滤器不被跟踪,因此需要自行跟踪其他信息块的过滤器设置。

要获取属性值,需要使用字段名'PROPERTY_CODE_VALUE',其中CODE是属性的符号代码。要获取属性值的描述,需要使用字段名'PROPERTY_CODE_DESCRPTION'。

如果属性类型是“元素关联”,则值中将包含对该元素的引用。可以使用这个引用来访问与相关实体相关的字段和属性,例如

$stadiumList = PriceTable::query()
    ->addFilter('STADIUM_EXTERNAL_ID', 21)
    ->setSelect(array('NAME', 'ACTIVE_FROM'))
    ->addSelect('PROPERTY_MATCH_VALUE.PROPERTY_STADIUM_VALUE.PROPERTY_SEATROOT_ID_VALUE', 'STADIUM_EXTERNAL_ID');

所有属性(多个和单个)的实体都存储在字段'PROPERTY_CODE'中,除了信息块2.0的单个属性。对于它们,实体存储在'PROPERTY_TABLE_IBLOCK_N'中,其中N是信息块的ID。为了兼容性,每个2.0属性都有一个也指向所有单个属性值表的PROPERTY_CODE引用。只有在使用它来获取属性值的ID时才有意义。例如,可以通过字段'PROPERTY_CODE.ID'获取大多数属性值的ID。对于信息块1.0以及多个属性,还可以获取额外的信息。

要一次性查询多个信息块,不需要使用Maximaster\Tools\Orm\Iblock\ElementTable类的继承者,而是直接使用该类。例如

$db = Maximaster\Tools\Orm\Iblock\ElementTable::query()
	->addFilter('@IBLOCK_ID', [22, 20])
	->addSelect('PROPERTY_PAIR_SECTOR_VALUE') // Это из инфоблока 22
	->addSelect('PROPERTY_CALENDAR_ID_VALUE') // А это - из 20
	->addSelect('NAME')

还提供与Higload块类似的实体动态构造器

$entity = ElementTable::compileEntity(1)->getDataClass();
$entity::query()
	->addSelect('IBLOCK_ID');

此类查询的结果将是包含来自2个信息块的所有元素的表格。在每条记录中都将提供信息块的所有属性。**注意 - 目前不支持多个不同信息块中具有相同代码的属性**。

所有用于过滤器的信息块的属性都将自动链接到查询,并且将在每次查询时链接,因此**请注意**并**关注性能**。构建此类查询可能需要相当长的时间(毫秒级)。

要获取详细页面的URL,需要使用字段DETAIL_PAGE_URL。由于这是模板字段,因此它将在选择后填充。为了确保它正确填充,必须确保选择的所有字段都用于DETAIL_PAGE_URL模板。