craft cms commerce 产品组合搜索查询
craft cms commerce product combined search query
我正在尝试使用手工艺品贸易来过滤我的产品。
有没有办法做到 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 %}
我想通了。
我正在使用 craft "relatedTo" 过滤器来加入搜索内容。
在我的系统中,"color" 和 "size" 被保存为类别。
在商业产品部分,"color" 和 "size" 与具有 "productColor" 和 "productSize" 字段的产品相关。
就像下图:
Product Section related Size and Color category example Image
而"size"和"color"的类别包含"title"、"slug"。
Size and Color in Category example Image
而在craft类别中,您会看到该类别的Id,如下图所示。
Category Id example Image
这是我的代码:
{% 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 %}
这是我的 "customcode" 插件中 "mergeArrayRemoveRedundancy" 函数的 PHP class。
/**
* 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);
}
您可以使用“https://pluginfactory.io/”创建自定义工艺插件
只需在 /yourPluginFolder/variables 文件夹下添加 PHP class。
我正在尝试使用手工艺品贸易来过滤我的产品。
有没有办法做到 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 %}
我想通了。 我正在使用 craft "relatedTo" 过滤器来加入搜索内容。 在我的系统中,"color" 和 "size" 被保存为类别。 在商业产品部分,"color" 和 "size" 与具有 "productColor" 和 "productSize" 字段的产品相关。
就像下图:
Product Section related Size and Color category example Image
而"size"和"color"的类别包含"title"、"slug"。
Size and Color in Category example Image
而在craft类别中,您会看到该类别的Id,如下图所示。
Category Id example Image
这是我的代码:
{% 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 %}
这是我的 "customcode" 插件中 "mergeArrayRemoveRedundancy" 函数的 PHP class。
/**
* 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);
}
您可以使用“https://pluginfactory.io/”创建自定义工艺插件 只需在 /yourPluginFolder/variables 文件夹下添加 PHP class。