我正在尝试使用工艺商务来过滤我的产品。
有没有办法做craft.commerce.products.search(“(field_color:red ORfield_color:blue)(field_size:S ORfield_size:M OR field_size:XXL)”)
或者任何其他解决方案都可以帮助我实现此过滤器。
这是我的代码:
{% set productNumber = 12 %}
{% set priceMin = 0 %}
{% set priceMax = 1000 %}
{% set query = "(field_color:red OR field_color:blue) (field_size:S OR field_size:M OR field_size:XXL)" %}
{% set product_array = craft.commerce.products({
type:typeArray|default(""),
order:sort|default(""),
defaultPrice: [
'and',
'>= ' ~ priceMin,
'<= ' ~ priceMax,
]
}).search(query) %}
{% set product_array_limited = product_array.limit(productNumber|default("")) %}
{% paginate product_array_limited as product_array_pagenated %}
{% for product in product_array_pagenated %}
"Here is my product"
{% endfor %}
{% endpaginate %}
答案 0 :(得分:1)
我想通了自己。 我正在使用工艺&#34; relatedTo&#34;过滤以加入搜索内容。 在我的系统中,&#34; color&#34;和&#34;尺寸&#34;保存为类别。 在商业产品部分,&#34;颜色&#34;和&#34;尺寸&#34;与产品有关&#34; productColor&#34;和&#34; productSize&#34;领域。
如下图所示:
Product Section related Size and Color category example Image
&#34; size&#34;的类别和&#34;颜色&#34;包含&#34; title&#34;,&#34; slug&#34;。
Size and Color in Category example Image
在工艺类别中,您将看到该类别的ID,如下图所示。
这是我的代码:
{% set colorArray = ["blue","black"] %}
{% set sizeArray = ["s","28"] %}
{% set colorId = [] %}
{% for color in colorArray %}
{% set colorId = colorId | merge(craft.categories.slug(color).Ids()) %}
{% endfor %}
{% set sizeId = [] %}
{% for size in sizeArray %}
{% set sizeId = sizeId | merge(craft.categories.slug(size).Ids()) %}
{% endfor %}
{% set IdMerge = craft.customcode.mergeArrayRemoveRedundancy(colorId,sizeId) %}
{% set productNumber = 12 %}
{% set priceMin = 0 %}
{% set priceMax = 1000 %}
{% set product_array = craft.commerce.products({
type:typeArray|default(""),
order:sort|default(""),
defaultPrice: [
'and',
'>= ' ~ priceMin,
'<= ' ~ priceMax,
]
}).relatedTo(IdMerge) %}
{% for product in product_array_pagenated %}
{# Your product #}
{% endfor %}
这是&#34; mergeArrayRemoveRedundancy&#34;的PHP类。功能在我的&#34; customcode&#34;插件。
/**
* merge array remove redundancy
* @param $a1 array
* @param $a2 array
* @return array
*/
public function mergeArrayRemoveRedundancy($a1,$a2){
$a1 = (array)$a1;
$a2 = (array)$a2;
return array_unique(array_merge($a1,$a2), SORT_REGULAR);
}
您可以使用&#34; https://pluginfactory.io/&#34;创建自定义工艺插件 只需在/ yourPluginFolder / variables文件夹下添加PHP类。