Hallo,
ich habe ein Plugin geschrieben, das Criteria/Condition dafür verwendet, nur die Artikel in Listings anzuzeigen, die Lieferzeit kleiner eines bestimmten Wertes haben. Das funktioniert im Allgemeinen gut, aber hat anscheinend keinen Effekt auf den Block „Ähnliche Artikel“, wo standardmäßig die Ähnlichkeit laut Shopware Doku nach Kategorie bestimmt wird. So sieht MeinConditionHandler->generateCondition() aus:
public function generateCondition(
ConditionInterface $condition,
QueryBuilder $query,
ShopContextInterface $context
) {
$minLieferzeit = 120;
if (!$query->hasState(self::STATE_INCLUDED)) {
$query->innerJoin(
'product',
's_articles_details',
'details',
'details.articleID = product.id'
);
$query->andWhere("details.shippingtime < $minLieferzeit");
$query->addState(self::STATE_INCLUDED);
}
}
So sieht die $query->getSQL() aus, wenn ich es an dieser Stelle mit die($query->getSQL()) ausgebe:
SELECT FROM s_articles product INNER JOIN s_articles_details variant ON variant.id = product.main_detail_id AND variant.active = 1 AND product.active = 1 INNER JOIN s_articles_categories_ro productCategory ON productCategory.articleID = product.id AND productCategory.categoryID IN (:productCategory) LEFT JOIN s_articles_avoid_customergroups avoidCustomerGroup ON avoidCustomerGroup.articleID = product.id AND avoidCustomerGroup.customerGroupId IN (:customerGroupIds11111111111111111111) INNER JOIN s_articles_details details ON details.articleID = product.id INNER JOIN s_articles_attributes productAttribute ON productAttribute.articledetailsID = variant.id WHERE (avoidCustomerGroup.articleID IS NULL) AND (details.shippingtime < 120)
(111111111111111 – hier habe ich die tatsächliche Zahlen geändert)
Wie könnte ich das Problem lösen?