Jump to content

Edit History

Shonen

Shonen


Souci de filtre résolu https://webkul.com/blog/adding-a-new-column-in-prestashop-new-symfony-admin-controller-grid-page-with-module/

On 5/4/2022 at 5:35 PM, Shapes said:

OK, au cas où ça pourrait aider quelqu'un, j'avais tout simplement oublié d'ajouter la fonction pour récupérer la data :

public function hookActionCustomerGridQueryBuilderModifier(array $params)
    {
        $searchQueryBuilder = $params['search_query_builder'];
        $searchQueryBuilder->addSelect(
            'c.`referrer`'
        );
    }

C'est OK maintenant.

Et si je complète cette fonction :

public function hookActionCustomerGridQueryBuilderModifier(array $params)
    {
        $searchQueryBuilder = $params['search_query_builder'];
        $searchCriteria = $params['search_criteria'];

        $searchQueryBuilder->addSelect(
            'c.`referrer`'
        );

        if ('referrer' === $searchCriteria->getOrderBy()) {
            $searchQueryBuilder->orderBy('c.`referrer`', $searchCriteria->getOrderWay());
        }

        foreach ($searchCriteria->getFilters() as $filterName => $filterValue) {
            if ('referrer' === $searchCriteria->getOrderBy()) {
                $searchQueryBuilder->orderBy('c.`referrer`', $searchCriteria->getOrderWay());
            }
            if ($filterName === 'referrer') {
                $searchQueryBuilder->andWhere("c.`referrer` = :referrer");
                $searchQueryBuilder->setParameter('referrer', $filterValue);
            }
        }
    }

La recherche fonctionne aussi !

Merci c'est ce qu'il me manquait aussi !

J'ai comme toi créé une nouvelle variable pour mon Customer. J'ai l'override de la classe, la modif de la Grid, et l'update qui fonctionne.

J'ai toutefois un souci dont tu auras probablement la solution !

Je n'arrive pas à afficher la valeur de mon objet sur la fiche Customer, alors que ça fonctionne sur la Grille. L'édition fonctionne aussi, il me manque seulement l'affichage de la valeur actuelle (si non vide). Ci-après ma fonction qui incrémente la ficher Customer

  public function hookActionCustomerFormBuilderModifier(array $params)
  {
    //Récupération du form builder
    /** @var \Symfony\Component\Form\FormBuilder $formBuilder */
    $formBuilder = $params['form_builder'];

    //Ajout de notre champ spécifique
    $formBuilder->add('new_value',
      //Cf génériques symonfy https://symfony.com/doc/current/reference/forms/types.html
      // et spécificiques prestashop https://devdocs.prestashop.com/1.7/development/components/form/types-reference/
      \Symfony\Component\Form\Extension\Core\Type\TextType::class,
      [
        'label' => $this->l('New Value'), //Label du champ
        'required' => false, //Requis ou non
        'constraints' => [ //Contraintes du champs
          //cf. génériques symfony : https://symfony.com/doc/current/reference/constraints.html
          // Ou vous pouvez écrire la votre cf. https://symfony.com/doc/current/validation/custom_constraint.html
          new \Symfony\Component\Validator\Constraints\Length([
            'max' => 50,
            'maxMessage' => $this->l('Max characters allowed : 50'),
          ]),
        ],
        // Texte d'aide
        'help' => $this->l('My new value')
      ]
    );
    //Ou surchargée ici
    // $params['data']['new_value'] = $params['data']['new_value'];

    //Il faut bien penser à mettre cette ligne pour mettre à jour les données au formulaire
    $formBuilder->setData($params['data']);
  }

 

 

Shonen

Shonen

On 5/4/2022 at 5:35 PM, Shapes said:

OK, au cas où ça pourrait aider quelqu'un, j'avais tout simplement oublié d'ajouter la fonction pour récupérer la data :

public function hookActionCustomerGridQueryBuilderModifier(array $params)
    {
        $searchQueryBuilder = $params['search_query_builder'];
        $searchQueryBuilder->addSelect(
            'c.`referrer`'
        );
    }

C'est OK maintenant.

Et si je complète cette fonction :

public function hookActionCustomerGridQueryBuilderModifier(array $params)
    {
        $searchQueryBuilder = $params['search_query_builder'];
        $searchCriteria = $params['search_criteria'];

        $searchQueryBuilder->addSelect(
            'c.`referrer`'
        );

        if ('referrer' === $searchCriteria->getOrderBy()) {
            $searchQueryBuilder->orderBy('c.`referrer`', $searchCriteria->getOrderWay());
        }

        foreach ($searchCriteria->getFilters() as $filterName => $filterValue) {
            if ('referrer' === $searchCriteria->getOrderBy()) {
                $searchQueryBuilder->orderBy('c.`referrer`', $searchCriteria->getOrderWay());
            }
            if ($filterName === 'referrer') {
                $searchQueryBuilder->andWhere("c.`referrer` = :referrer");
                $searchQueryBuilder->setParameter('referrer', $filterValue);
            }
        }
    }

La recherche fonctionne aussi !

Merci c'est ce qu'il me manquait aussi !

J'ai comme toi créé une nouvelle variable pour mon Customer. J'ai l'override de la classe, la modif de la Grid, et l'update qui fonctionne.

J'ai toutefois deux soucis dont tu auras probablement la solution !

1 - Je n'arrive pas à afficher la valeur de mon objet sur la fiche Customer, alors que ça fonctionne sur la Grille. L'édition fonctionne aussi, il me manque seulement l'affichage de la valeur actuelle (si non vide). Ci-après ma fonction qui incrémente la ficher Customer

  public function hookActionCustomerFormBuilderModifier(array $params)
  {
    //Récupération du form builder
    /** @var \Symfony\Component\Form\FormBuilder $formBuilder */
    $formBuilder = $params['form_builder'];

    //Ajout de notre champ spécifique
    $formBuilder->add('new_value',
      //Cf génériques symonfy https://symfony.com/doc/current/reference/forms/types.html
      // et spécificiques prestashop https://devdocs.prestashop.com/1.7/development/components/form/types-reference/
      \Symfony\Component\Form\Extension\Core\Type\TextType::class,
      [
        'label' => $this->l('New Value'), //Label du champ
        'required' => false, //Requis ou non
        'constraints' => [ //Contraintes du champs
          //cf. génériques symfony : https://symfony.com/doc/current/reference/constraints.html
          // Ou vous pouvez écrire la votre cf. https://symfony.com/doc/current/validation/custom_constraint.html
          new \Symfony\Component\Validator\Constraints\Length([
            'max' => 50,
            'maxMessage' => $this->l('Max characters allowed : 50'),
          ]),
        ],
        // Texte d'aide
        'help' => $this->l('My new value')
      ]
    );
    //Ou surchargée ici
    // $params['data']['new_value'] = $params['data']['new_value'];

    //Il faut bien penser à mettre cette ligne pour mettre à jour les données au formulaire
    $formBuilder->setData($params['data']);
  }

2 - la recherche sur la Grille ne fonctionne pas, on a probablement suivi le même tuto et j'ai pourtant repris ton code. Sinon l'affichage de ma valeur se fait correctement.

  public function hookActionCustomerGridQueryBuilderModifier(array $params)
  {
    $searchQueryBuilder = $params['search_query_builder'];
    $searchCriteria = $params['search_criteria'];
    $searchQueryBuilder->addSelect(
      'c.`new_field`'
    );
    if ('new_field' === $searchCriteria->getOrderBy()) {
      $searchQueryBuilder->orderBy('c.`new_field`', $searchCriteria->getOrderWay());
    }

    foreach ($searchCriteria->getFilters() as $filterName => $filterValue) {
      if ('new_field' === $searchCriteria->getOrderBy()) {
        $searchQueryBuilder->orderBy('c.`new_field`', $searchCriteria->getOrderWay());
      }
      if ($filterName === 'new_field') {
        $searchQueryBuilder->andWhere("c.`new_field` = :new_field");
        $searchQueryBuilder->setParameter('new_field', $filterValue);
      }
    }
  }

 

Shonen

Shonen

On 5/4/2022 at 5:35 PM, Shapes said:

OK, au cas où ça pourrait aider quelqu'un, j'avais tout simplement oublié d'ajouter la fonction pour récupérer la data :

public function hookActionCustomerGridQueryBuilderModifier(array $params)
    {
        $searchQueryBuilder = $params['search_query_builder'];
        $searchQueryBuilder->addSelect(
            'c.`referrer`'
        );
    }

C'est OK maintenant.

Et si je complète cette fonction :

public function hookActionCustomerGridQueryBuilderModifier(array $params)
    {
        $searchQueryBuilder = $params['search_query_builder'];
        $searchCriteria = $params['search_criteria'];

        $searchQueryBuilder->addSelect(
            'c.`referrer`'
        );

        if ('referrer' === $searchCriteria->getOrderBy()) {
            $searchQueryBuilder->orderBy('c.`referrer`', $searchCriteria->getOrderWay());
        }

        foreach ($searchCriteria->getFilters() as $filterName => $filterValue) {
            if ('referrer' === $searchCriteria->getOrderBy()) {
                $searchQueryBuilder->orderBy('c.`referrer`', $searchCriteria->getOrderWay());
            }
            if ($filterName === 'referrer') {
                $searchQueryBuilder->andWhere("c.`referrer` = :referrer");
                $searchQueryBuilder->setParameter('referrer', $filterValue);
            }
        }
    }

La recherche fonctionne aussi !

Merci c'est ce qu'il me manquait aussi !

J'ai comme toi créé une nouvelle variable pour mon Customer. J'ai l'override de la classe, la modif de la Grid, et l'update qui fonctionne.

J'ai toutefois deux soucis dont tu auras probablement la solution !

1 - Je n'arrive pas à afficher la valeur de mon objet sur la fiche Customer, alors que ça fonctionne sur la Grille. Ci-après ma fonction qui incrémente la ficher Customer

  public function hookActionCustomerFormBuilderModifier(array $params)
  {
    //Récupération du form builder
    /** @var \Symfony\Component\Form\FormBuilder $formBuilder */
    $formBuilder = $params['form_builder'];

    //Ajout de notre champ spécifique
    $formBuilder->add('new_value',
      //Cf génériques symonfy https://symfony.com/doc/current/reference/forms/types.html
      // et spécificiques prestashop https://devdocs.prestashop.com/1.7/development/components/form/types-reference/
      \Symfony\Component\Form\Extension\Core\Type\TextType::class,
      [
        'label' => $this->l('New Value'), //Label du champ
        'required' => false, //Requis ou non
        'constraints' => [ //Contraintes du champs
          //cf. génériques symfony : https://symfony.com/doc/current/reference/constraints.html
          // Ou vous pouvez écrire la votre cf. https://symfony.com/doc/current/validation/custom_constraint.html
          new \Symfony\Component\Validator\Constraints\Length([
            'max' => 50,
            'maxMessage' => $this->l('Max characters allowed : 50'),
          ]),
        ],
        // Texte d'aide
        'help' => $this->l('My new value')
      ]
    );
    //Ou surchargée ici
    // $params['data']['new_value'] = $params['data']['new_value'];

    //Il faut bien penser à mettre cette ligne pour mettre à jour les données au formulaire
    $formBuilder->setData($params['data']);
  }

2 - la recherche sur la Grille ne fonctionne pas, on a probablement suivi le même tuto et j'ai pourtant repris ton code. Sinon l'affichage de ma valeur se fait correctement.

  public function hookActionCustomerGridQueryBuilderModifier(array $params)
  {
    $searchQueryBuilder = $params['search_query_builder'];
    $searchCriteria = $params['search_criteria'];
    $searchQueryBuilder->addSelect(
      'c.`new_field`'
    );
    if ('new_field' === $searchCriteria->getOrderBy()) {
      $searchQueryBuilder->orderBy('c.`new_field`', $searchCriteria->getOrderWay());
    }

    foreach ($searchCriteria->getFilters() as $filterName => $filterValue) {
      if ('new_field' === $searchCriteria->getOrderBy()) {
        $searchQueryBuilder->orderBy('c.`new_field`', $searchCriteria->getOrderWay());
      }
      if ($filterName === 'new_field') {
        $searchQueryBuilder->andWhere("c.`new_field` = :new_field");
        $searchQueryBuilder->setParameter('new_field', $filterValue);
      }
    }
  }

 

×
×
  • Create New...