2017-04-06 68 views
0
  1. 送我site.com/rims/?vehicleCode=P0000061000
  2. 如果我的代码默认筛选器不起作用过滤产品。
  3. 在我订阅的 $这 - > subscribeEvent的bootstrap.php中文件的安装功能( 'Enlight_Controller_Action_PostDispatchSecure_Frontend_Listing', 'onPostDispatchListing' ); 事件。之后,在onPostDispatchListing功能我:清单产品Shopware基于变量URL

    /** @var \Enlight_Controller_Action $controller */ 
    $controller = $args->getSubject(); 
    $request = $controller->Request(); 
    
    // defines the default shopware VIEWS directory. 
    $view = $controller->View(); 
    $view->addTemplateDir(
        __DIR__ . '/Views/responsive' 
    ); 
    
    $shop = Shopware()->Shop(); 
    $sCategorystart = $shop->getCategory()->getId(); 
    $sCategoryID = $this->getCategoryCurrent($sCategorystart); 
    
    $oDb = Shopware()->Db(); 
    $EngineCode = $request->getParam('sVehicle'); 
    $query = "SELECT va.`articleID` 
          FROM `s_vehicle_articles` as va 
          INNER JOIN `s_articles_categories` as ac ON 
          ac.articleID=va.articleID 
          WHERE ac.categoryID=" . $sCategoryID; 
    $query .= ($EngineCode) ? " AND va.`VehicleCodeID`= '" . $EngineCode . "'" : " "; 
    
    $mResults = $oDb->fetchAll($query); 
    
    $articleModule = Shopware()->Modules()->Articles(); 
    $aProducts = array(); 
    
    foreach ($mResults as $key => $value) { 
        $article = $articleModule->sGetArticleById($value['articleID'], $sCategoryID); 
        $aProducts[] = $article; 
    } 
    
    $view->sArticles = $aProducts; 
    
  4. 的代码是否工作正常,产品被过滤,但默认筛选器不工作,如价格过滤器等。

谁能帮?

回答

1

由于您重写了默认文章列表,因此您的代码无法使用默认过滤器。

$view->sArticles = $aProducts; 

注:在您的查询你不检查重要的自助餐厅,如:

  • 是产品激活。
  • 产品有现货即可获得更多0,若该产品有标志 - 如有库存不足则不显示物品1.
  • 产品是否适用于客户群。

至于解决方法:你可以订阅这两个事件,并添加您的查询部分:

$this->subscribeEvent( 
    'Shopware_Modules_Articles_GetArticleById_FilterSQL' => 'modifyQuery' 
); 
$this->subscribeEvent( 
    'Shopware_Modules_Articles_sGetArticlesByCategory_FilterSql' => 'modifyQuery' 
); 

然后检查查询,并与您的扩展:

public function modifyQuery(\Enlight_Controller_ActionEventArgs $args) 
{ 
    $query = $args->getReturn(); 
    //Do some modifications 
    $args->setReturn($query); 
    return $args->getReturn(); 
} 

更好的办法 - 增加你的标准餐具SearchBundleCondition,但这种情况下需要一些研究,你可以从this link开始。

+0

$ criteria = new Criteria(); $ criteria-> addCondition(new CategoryCondition([3])); //我的条件应该是我在URL中发送的代码。如何设置? $ context = $ this-> get('shopware_storefront.context_service') - > getShopContext(); $ service = $ this-> get('shopware_search.product_number_search'); /** @ var $ result ProductNumberSearchResult */ $ result = $ service-> search($ criteria,$ context); $ numbers = []; ($ result-> getProducts()as $ product){ $ numbers [] = $ product-> getNumber(); } –

+0

@DragiPostolovski,你应该创建你自己的标准来实现ConditionInterface。但并不那么容易,你还应该添加你的模型(你是否注册了's_vehicle_articles'的模型)来搜索包查询。使用'modifyQuery'函数检查我的响应,这种方式很容易实现。 –