工艺cms商品产品组合搜索查询

时间:2018-04-16 23:03:37

标签: search filter commerce craftcms

我正在尝试使用工艺商务来过滤我的产品。

有没有办法做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 %}

1 个答案:

答案 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,如下图所示。

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 %}

这是&#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类。