2014-11-20 68 views
1

我創建了一個名爲「產品」,它有幾個領域,其中2個是分類字段(產品類型和材料)果園CMS投影查詢字符串分類法

產品類型內容類型:電纜夾板,電纜夾,極夾板,纜芯 材質:不鏽鋼,鋁,鍍鋅鋼

我有一個產品上市,並希望使用查詢字符串過濾它,在兩個分類例如

名單與產品的所有產品電纜夾的類型和不鏽鋼材料 〜/產品?產品類型[] =電纜防滑釘&材料[] =不鏽鋼

列出所有產品的產品類型電纜的防滑釘或杆夾板和 〜/產品不鏽鋼的材料?產品類型[的] =電纜防滑釘&產品類型[] =極夾板&材料[] =不鏽鋼

(猜測它會被標識使用不完整的文本串的所有查詢)

是否有果園的方式去做這個?還是需要一個自定義模塊?

任何幫助,將不勝感激

非常感謝 安託

回答

0

許多投影器具有參數,你可以使用令牌。要使用查詢字符串,可以使用QueryString標記,如下所示:{QueryString:product-type}。不幸的是,分類術語過濾器目前不適用於令牌。然而,增加這種可能性不應該太難。大部分代碼已經在那裏。

+0

感謝您的回覆Bertrand。你可以點我在正確的方向在何處我需要去加入這樣的代碼?由於 – Anto 2014-11-21 09:16:58

+1

在分類項過濾器。可以在自定義模塊中重現其代碼,也可以改進現有模塊並給我們提出拉取請求。 – 2014-11-21 21:33:27

0

相當一個老問題,但因爲它是引用here,我在這裏給我的答案的副本...

注:與最近的烏節Dev分支嘗試。

這裏,進行測試,我已經做了直接TermsFilter.csTermsFilterForms.cs一些變化,但基於這個例子,你就可以寫自己的IFilterProviderIFormProvider ...

所以,在TermsFilterForms.cs,在形式定義的Describe()方法,嘗試添加此:

    ... 
        ), 
        _ProductType: Shape.TextBox(
         Id: "product-type", Name: "ProductType", 
         Title: T("Product Type"), 
         Classes: new[] { "text medium", "tokenized" }, 
         Description: T("Enter the product type.") 
         ) 
        ); 
        ... 

然後,編輯過濾器時,你會看到,可以標記化新的輸入字段和其中e。g您可以把:

{Request.QueryString:product-type} 

然後,在TermsFilter.cs,你可以注入一個標記:在ApplyFilter(dynamic contex)方法

... 
    private readonly ITokenizer _tokenizer; 

    public TermsFilter(ITaxonomyService taxonomyService, ITokenizer tokenizer) { 
     _taxonomyService = taxonomyService; 
     T = NullLocalizer.Instance; 
     _tokenizer = tokenizer; 
    } 
    ... 

然後,您可以標記化您的產品類型字段是這樣的:

 var termName = _tokenizer.Replace((string)context.State.ProductType, null); 

在此,爲了檢測,在查詢字符串產品類型參數,我期望只有一個值(不是陣列),其是一個術語名稱(而不是一個id)。但是你可以根據自己的需要更改代碼...

然後,通過使用分類服務,你可以做這樣的事情:

 var taxoPart = _taxonomyService.GetTaxonomyByName("Product Type"); 
     var termPart = _taxonomyService.GetTermByName(taxoPart.Id, termName); 

然後你就可以使用例如termPart.Id更新context.Query(參見代碼)...

最好