$sArticles - um weiteren Wert aus Datenbank erweitern und im Frontend nutzen - SQL Select

@mdsw schrieb:

 

Meine Fragen wären daher, unabhängig von der Plugin-Struktur und am liebsten erst mal an der alten Plugin-Struktur erklärt:

  1. Warum komme ich bei _Enlight_Controller_Action_Widgets_Listing_listingCount _nicht mehr mit 

$subject = $arguments->getSubject();        $view = $subject->View();        $sArticles = $view->getAssign(‚sArticles‘); an die Artikel des View()

Warum gibt es in Firebug nur noch einen json-String für die nachgeladenen Artikel im Inifnite-Scrolling statt wie früher eine neue Instanz von sArticles?

Was muss ich an meiner Funktion addXY ändern, damit dieser wieder mit dem Event funktioniert, welches die bei Infinite Scrolling nachgeladenen Elemente betrifft?

 

Hoffe meine Frage wird dadurch etwas deutlicher, sonst einfach nachfragen, wenn was fehlt  Smile

  1. Bin ich mir nicht ganz sicher, wie gesagt, kann an der Umstellung liegen. Ich kann Dir jedenfalls die Lösung präsentieren, wie Du das alles in einem Query machst: Für das Listing in Shopware gibt es das SearchBundle. Das ist eine Abstraktionsschicht, mit der die Queries beschrieben werden. Denn die Queries müssen sowohl unter MySQL als auch unter Elasticsearch laufen.

Demnachst musst bei Doctrine eine weitere Condition anhängen. Was nicht ganz sauber und eigentlich nicht der Zweck dafür ist, aber wir simulieren hier quasi eine weitere WHERE Bedingung. Damit bekommen wir das ganze Query Objekt mitgegeben und wir können via ->addSelect weitere Spalten selektieren, die wir wollen:

 'onCreateListingCriteria',
            'Shopware_SearchBundle_Create_Listing_Criteria' => 'onCreateListingCriteria',
            'Shopware_SearchBundleDBAL_Collect_Condition_Handlers' => 'registerListingConditionHandler',
        ];
    }

    public function onCreateListingCriteria(\Enlight_Event_EventArgs $args)
    {
        /**
         * @var Shopware\Bundle\SearchBundle\Criteria $criteria
         */
        $criteria = $args->get('criteria');

        $customCondition = new CustomListingCondition();

        $criteria->addCondition($customCondition);
    }

    public function registerListingConditionHandler(\Enlight_Event_EventArgs $args)
    {
        return new CustomListingHandler();
    }
}



addSelect('spalte');
// var_dump($query->getSQL());die('test');
    }
}

Wenn Du sehen willst, was hinten raus für ein Query heraus kommt, dann kommentiere einfache meine Zeile mit dem die wieder ein. Bei mir sah der so aus:

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_core_tax tax ON tax.id = product.taxID
INNER JOIN s_articles_categories_ro productCategory ON productCategory.articleID = product.id
            AND productCategory.categoryID IN (:category) LEFT JOIN s_articles_avoid_customergroups avoidCustomerGroup ON avoidCustomerGroup.articleID = product.id
             AND avoidCustomerGroup.customerGroupId IN (:customerGroupIds) INNER JOIN s_articles_attributes productAttribute ON productAttribute.articledetailsID = variant.id
WHERE avoidCustomerGroup.articleID IS NULL

Musst es halt dementsprechend auf die alte Plugin Struktur umgestellt werden. Wollte beim Beispiel von oben bleiben.

  1. Keine Ahnung, wie bekommst Du das überhaupt da rein? Ich benutze bisher nur die Smarty {debug} Anweisung, welche recht hässlich ist, bzw. den var_dump filter auf einzelne Variablen.

  2. Siehe 1.