THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 PositionManagementTrait

(01-09-2016 09:28:22)


Bonjour,

Dans mon module ProductComparison
j'ai du redefinir PositionManagementTrait  - j'ai besoin d'une variable en plus dans la requete

class ProductComparisonAction extends BaseAction implements EventSubscriberInterface
{
    use PositionManagementTrait_ProductComparison;
...

je m'apercois que dans la version Thelia 2.3
une verification de l'utilisation de cette derniere est verifié

            if (!isset(class_uses($object)['Thelia\Model\Tools\PositionManagementTrait'])) {
                throw new \InvalidArgumentException("Your model does not implement the PositionManagementTrait trait");
            }

si je commente l'exeption, la gestion de la position dans mon module fonctionne.

Comment palier à ce pb ?
Merci

Offline

#2 Re: PositionManagementTrait

(01-09-2016 09:33:21)


Tu n'a pas besoin de réimplementer le trait, la méthode protected function addCriteriaToPositionQuery($query) est là pour permettre d'ajouter des critères à la requete de calcul de la position

Dons ton cas, tu devrais l'implémenter comme suit dans la classe ProductComparison\Model\ProductComparison (si j'ai bien tout compris ce que tu veux faire) :

protected function addCriteriaToPositionQuery($query)
{
    $template_id = $this->getTemplateId();
    $query->->filterByTemplateId($template_id)
}

OpenStudio Toulouse

Offline

#3 Re: PositionManagementTrait

(01-09-2016 09:47:21)


roadster31 wrote:

j'ai besoin d'une variable en plus dans la requete

C'est à dire ?

dans mon form j'affiche les caracteristiques choisies pour chaque gabarit
c'est sauvegarde dans une table

<column name="feature_id" required="true" type="INTEGER" />
<column name="template_id" required="true" type="INTEGER" />
<column name="position" type="INTEGER" />
....

on peut choisir la position de chaque caracteristique par rapport au gabarit
donc je peux me retrouver avec une caracteristique
pour le gabarit A en position 1
et une autre caracteristique pour le gabarit B aussi en position 1

donc j'ai reecrit

protected function movePositionUpOrDown($up = true)
    {
        // The current position of the object
        $my_position = $this->getPosition();
        $template_id = $this->getTemplateId();
        // Up or down ?
        if ($up === true) {
            // Find the object immediately before me
            $search->filterByPosition(array('max' => $my_position-1))->orderByPosition(Criteria::DESC)->filterByTemplateId($template_id);
        } else {
...

en prenant en compte le champ template_id

Offline

#4 Re: PositionManagementTrait

(01-09-2016 09:49:09)


roadster31 wrote:

Tu n'a pas besoin de réimplementer le trait, la méthode protected function addCriteriaToPositionQuery($query) est là pour permettre d'ajouter des critères à la requete de calcul de la position

Dons ton cas, tu devrais l'implémenter comme suit dans la classe ProductComparison\Model\ProductComparison (si j'ai bien tout compris ce que tu veux faire) :

protected function addCriteriaToPositionQuery($query)
{
    $template_id = $this->getTemplateId();
    $query->->filterByTemplateId($template_id)
}

ok je vais faire ainsi

Merci!