目标是使一个属性的某些选项可用于另一个属性的某些选定选项。
在 Shopware 6 订阅者标准过滤器中是这样工作的:
if (in_array('c0d02d1738fd4293a489695787e06b5c', $currentPropertyOptions)) {
$criteria = $event->getCriteria();
$criteria->addFilter(
new MultiFilter(
Multifilter::CONNECTION_OR,
[
new EqualsFilter('product.properties.group.name', 'PropertyName01'),
new EqualsFilter('product.properties.group.name', 'PropertyName02'),
new EqualsFilter('product.properties.group.name', 'PropertyName03'),
new PrefixFilter('product.properties.name', 'OptionName1'),
new PrefixFilter('product.properties.name', 'OptionName2'),
new PrefixFilter('product.properties.name', 'OptionName3')
]
)
);
}
elseif (in_array('3f777000a2734deead391133cee3a6a9', $currentPropertyOptions)) {
$criteria = $event->getCriteria();
$criteria->addFilter(
new MultiFilter(
Multifilter::CONNECTION_OR,
[
new EqualsFilter('product.properties.group.name', 'PropertyName01'),
new EqualsFilter('product.properties.group.name', 'PropertyName02'),
new EqualsFilter('product.properties.group.name', 'PropertyName03'),
new PrefixFilter('product.properties.name', 'OptionName4'),
new PrefixFilter('product.properties.name', 'OptionName5'),
new PrefixFilter('product.properties.name', 'OptionName6'),
new PrefixFilter('product.properties.name', 'OptionName7')
]
)
);
}
有人可以建议在这种情况下如何实施交叉过滤/组合条件吗?我的意思是,包括两个属性的选项(如果两个条件都为真)。如果在店面过滤器中选中两个选项,现在只有一个结果可用。我们也应该有大约 15 个条件。
附言我们将使用自定义实体通过管理自定义模块使选项到选项管理员可分配关联。
恕我直言,这是关于本质上相同挑战的第三个问题。只是说......也许更多的研究是合适的。
所以,你问的是如何在满足两个条件的情况下组合两个过滤器?数组
$currentPropertyOptions
可能同时包含两个id。那你为什么要用elseif
?再来一个if
表情。由于两个表达式都可能为真,因此您可以将多个过滤器添加到同一条件。在标准的基础层面上,必须满足所有条件。所以,实际上,您所要做的就是将 elseif
更改为 if
它应该完全按照您的意愿进行操作。