0
  1. 我有 site.com/rims/?vehicleCode=P0000061000
  2. 如果我使用代码过滤产品,则默认过滤器不起作用。
  3. 在 Bootstrap.php 文件的安装函数中,我订阅了 $this->subscribeEvent('Enlight_Controller_Action_PostDispatchSecure_Frontend_Listing', 'onPostDispatchListing'); 事件。之后在 onPostDispatchListing 函数中我有:

    /** @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. 代码正常工作,产品被过滤,但默认过滤器不起作用,如价格过滤器等。

有人可以帮忙吗?

4

1 回答 1

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();
}

更好的方法 - 将您的标准添加到购物用品SearchBundle Condition,但这种情况需要一些研究,您可以从这个链接开始。

于 2017-04-06T16:01:43.540 回答