わかりました、私はここで切り株にいます。
基本的に私が抱えている問題は、人々が何かを検索しているとき、多くの場合、複数の 0 が含まれているため、コードをミスタイプしているK00000WEFLZ
ことです。私は基本的に、検索に文字「K」の後に一定量の0が含まれているかどうかを検索がチェックするようにしようとしています(Kには常に10以上のID番号と少なくとも4〜5個の0があるため)。検索操作中に「*」に置き換えられ、問題をどれだけ間違って入力しても製品を見つけることができます。
カスタムクラスを作成し、これのデフォルトをオーバーライドする必要があることを認識しています(ただし、これの多くはアクセスできません/プライベートです)。デフォルトの検索パターンは変更できないため、これはすべての人に変更されます。この特定のサイトのためにそれをしたい。
また、これの最初または最後にワイルドカードを使用することはできません。これは、膨大なカタログがあるため、マイルが多くの結果に一致するためです。
私の知る限り、これはデフォルト ロジックのクラスで検索を処理するコードです。
protected virtual IList<Product> CreateCustomCollection()
{
var list = new List<Product>();
switch (mode)
{
case ProductRepeaterMode.Search:
if (Page.Request.QueryString["search"] != null && Page.Request.QueryString["search"].Length != 0)
{
bool[] customString = new bool[5] { SearchCustomString1, SearchCustomString2, SearchCustomString3, SearchCustomString4, SearchCustomString5 };
IList<Product> results = Fabric.ObjectProvider.Get<IProductSearchCommand>().Search(Page.Request.QueryString["search"], out searchWords, IncludeSkus, IsPublicFacing, customString, CoreHttpModule.Session);
var retailOrder = WebStoreManager.CurrentOrder as IRetailOrder;
var accountOrder = WebStoreManager.CurrentOrder as IAccountOrder;
IList<Product> productsToRemove = new List<Product>();
IList<Product> productsToAdd = new List<Product>();
foreach (var product in results)
{
if (hideRestrictedProducts)
{
if (retailOrder != null)
{
if (!product.CanBePurchasedByRetailCustomer || product.AgentOnly)
productsToRemove.Add(product);
}
else
{
if (accountOrder != null)
{
var add = false;
if (product.CanBePurchasedOnAccount)
add = true;
if (product.AgentOnly)
{
if (accountOrder.Agent != null)
add = true;
else
add = false;
}
if (!add)
productsToRemove.Add(product);
}
}
}
// Replace SKUs with lines
if (resolveSkusToLines)
{
var sku = product.Role as SkuProductRole;
if (sku != null)
{
productsToRemove.Add(product);
if (sku.Owner != null && sku.Owner.Product != null)
{
var line = sku.Owner.Product;
if (!results.Contains(line) && !productsToAdd.Contains(line))
productsToAdd.Add(line);
}
}
}
}
foreach (Product product in productsToAdd)
{
results.Add(product);
}
foreach (Product product in productsToRemove)
{
results.Remove(product);
}
foreach (var result in results)
list.Add(result);
}
break;
}
return list;
}