Sulu CMS:如何搜索/过滤具有特定属性特定值的特定类型的内容?

Sulu CMS:如何搜索/过滤具有特定属性特定值的特定类型的内容?,sulu,Sulu,简要描述情况: 我们正在运行Sulu1.5.2的分叉版本、PHP7.1、Windows server环境、与PostgreSQL的db连接 我们有一个网站结构/树,我们在顶层有house模板;每栋房子都有一个house\u房间和一个house\u住户模板;每个house\u rooms模板有N个house\u rooms\u rooms模板,每个house\u acculator模板有N个house\u acculator\u acculator模板。这表示一个实际的房子,它有N个房间和N个居

简要描述情况:

  • 我们正在运行Sulu1.5.2的分叉版本、PHP7.1、Windows server环境、与PostgreSQL的db连接
  • 我们有一个网站结构/树,我们在顶层有
    house
    模板;每栋房子都有一个
    house\u房间
    和一个
    house\u住户
    模板;每个
    house\u rooms
    模板有N个
    house\u rooms\u rooms
    模板,每个
    house\u acculator
    模板有N个
    house\u acculator\u acculator
    模板。这表示一个实际的房子,它有N个房间和N个居住者
现在我想知道是否有一种方法可以具体地获取,例如,所有遵循特定属性模式的
house\u accountries\u accountries
内容(例如:他们的
gender
属性值为'femal',他们的
出生日期
参数为>=1990/01/01),无需加载每个
房屋
,然后在儿童中找到其
房屋(居住者)
页面,然后循环该模板的
房屋(居住者)
儿童,并根据其性别和出生日期属性过滤由此产生的内容

我已经发现有一个类可以
::findAll()
::findByUuids()
,但似乎没有一种方法可以过滤特定属性(如模板类型、模板属性等)。因此,我采用了一种迂回的方式创建了自己的“存储库”,它可以直接对数据库中的
phpcr_节点
表进行PDO查询,专门扫描
props
属性以查找某个模板名称的出现:

$this->pdo->query("SELECT identifier, props FROM phpcr_nodes WHERE props LIKE '%>house_occupants_occupant<%'");
当我有了它时,我可以过滤可读数据以确定我想要保留的内容,将节点uuid添加到某个
$theUUID
变量,然后使用Sulu的
ContentRepository::findByUuids($theUUID)
方法检索实际内容。这将“只”需要2个查询和一些PHP数组过滤,这比从某个父对象开始循环所有子对象内容,直到遍历所有父对象及其子对象要好得多。。。(当然,如果您想搜索所有
house
节点,其中至少一个
house\u acculator\u acculator
节点表示10岁以下的孩子,那么开销会增加,因为您需要额外的查询来“设置”最终查询中使用的filterdata。但仍然:比循环所有内容要好得多…;-)

所以我的问题有两个:

  • 我可以使用什么特定于Sulu的XML解析器将
    props
    列中的XML字符串值转换为人类可读的值,并使用适当的属性值对
  • 和/或,希望如此:是否有一种方法可以避免所有这些胡说八道,而只是使用一种不太低级的方法来检索特定模板类型的内容以及特定属性的特定值

您发现的
ContentRepository
已经是一些页面需求的抽象。您的需求已经非常具体了,因此您应该使用SQL-2编写自己的查询,SQL-2是一种新的查询工具


这将使您能够编写符合您需求的查询。

您发现的
ContentRepository
已经是我们对页面的一些需求的抽象。您的需求已经非常具体了,因此您应该使用SQL-2编写自己的查询,SQL-2是一种新的查询工具


这将使您能够编写符合要求的查询。

谢谢您的回复。我会仔细阅读这篇文章,一旦我尝试过,我会回到这篇文章:)谢谢你的回复。我会仔细阅读这篇文章,一旦我尝试过,我会回到这篇文章:)
// what I would get after putting the props through a certain XML parser:
$xmlHumanReadableData = [
    '<the_uuid_of_occupant_1>' => [
        ...
        'gender' => 'female',
        'date_of_birth' => '1992-05-18T00:00:00.000+00:00',
        ...
    ],
    ... //etcetera etcetera
];