Jump to content

Beaucoup de questions sur le fonctionnement


Recommended Posts

Salut à tous !

 

Bon voilà j'ai lu la documentation de prestashop en large et en travers mais tout n'est pas très clair à mes yeux, et de fait j'ai énormément de questions.

 

1) Quelle est la différence entre étendre une classe Controller à "AdminController" et "ModuleAdminController" ?

 

2) J'ai une table "Look" créée par moi, une table "LookProduct" créée par moi et la table "Product" déjà intégré dans PS. La table LookProduct contient un id_look et un id_product tous deux en clés étrangères de leurs tables respectives, ainsi que d'autres champs...

Je crée un AdminLookController qui me rend la liste de mes looks avec la fonction renderList qui récupère donc apparemment les champs définies dans ma classe LookCore qui elle même récupère les champs de ma base de données.

Mais j'aimerai aussi récupérer les champs de la table LookProduct auquel Look est associé. Comment faire ?

 

Actuellement LookCore ressemble à ça :

public static $definition = array(

        'table' => 'look',

        'primary' => 'id_look',

        'fields' => array(

            'name' => array(

                'type' => self::TYPE_STRING,

                'validate' => 'isGenericName',

                'required' => true,

                'size' => 64

            )

        ),

    );

 

La fonction renderList du AdminLookController me rend bien la liste des Looks avec ce code:

public function renderList()

{

return parent::renderList();

}

 

Il me faudrait juste les champs de ma table LookProduct...

 

3) A quoi sert protected $webserviceParameters = array( tout un tas de champs blablabla) ?

 

4) Imaginons que je veux créer un formulaire complètement personnalisé pour la fonction renderForm de AdminLookController...Commment dois-je m'y prendre ?

Où placer le template .tpl personnalisé ?

Comment appeler ce template depuis la fonction renderForm ? j'ai vu des fonctions tel que setTemplate ou display(un template), quelle est la différence ?

 

5) Donc imaginons que j'arrive à créer ce template personnalisé et le rendre à l'écran...

Pour passer des variables dans ce template depuis ma fonction renderForm, comment dois-je faire ?

Est-ce que je dois passer par les $smarty->assign ?

Quelle est la différence entre $smarty->assign et $this->context->smarty->assign ?

 

 

Votre aide sera fort apprécié pour un jeune développeur en détresse !

Merci beaucoup

Link to comment
Share on other sites

Salut à tous !

Bonsoir, :)

 

1) Quelle est la différence entre étendre une classe Controller à "AdminController" et "ModuleAdminController" ?

La première classe est associée à un controller du Back Office. La seconde, quant à elle, est en fait une classe étendue de AdminController et est un controller de Back Office associé à un module. Dans votre cas, ce sera donc cette classe qu'il faudra étendre.

 

2) [...]

Mais j'aimerai aussi récupérer les champs de la table LookProduct auquel Look est associé. Comment faire ?

Vous pouvez réaliser une jointure et sélection spécifique ; voyez du côté de AdminProducts, qui réalise ce traitement à partir d'ici: https://github.com/PrestaShop/PrestaShop/blob/1.6/controllers/admin/AdminProductsController.php#L169

  

3) A quoi sert protected $webserviceParameters = array( tout un tas de champs blablabla) ?

A rien, du moins ce tableau ne vous est pas nécessaire. Ceci est pour l'utilisation des Webservices et aucunes nouvelles ressources n'est prise en compte actuellement.

 

4) Imaginons que je veux créer un formulaire complètement personnalisé pour la fonction renderForm de AdminLookController...Commment dois-je m'y prendre ?

Tout d'abord, êtes vous sur que votre besoin ne peut pas être couvert par l'utilisation d'un HelperForm, même étendu (sous entendu, implémentant des champs spécifiques propres à votre module) ?

 

5) [...]

Quelle est la différence entre $smarty->assign et $this->context->smarty->assign ?

Tout et rien. En fait, pour utiliser $smarty->assign, vous devrez avoir global $smarty; dans votre méthode et dès lors utiliser les globales qui sont dépréciées. En 1.5 et 1.6, nous utilisons le contexte.

Link to comment
Share on other sites

Ok merci pour ces précisions.

 

J'ai donc réussi à faire cette jointure et récupérer le champ (Position X) de la table jointe comme en témoigne l'image ci-dessous:

 

 

6XcHYjZ.jpg

 

 

 

Cependant, dans la page de modification d'un Look (qui si je comprends bien est généré par la méthode renderForm de ma classe AdminLookController), je peux afficher un champ Position X, mais je n'arrive pas à récupérer la valeur enregistrée dans la BDD.

 

VlchxVG.jpg

 

 

Voici le code de la méthode renderForm:

public function renderForm()
     {        
        if (isset ($_GET['updatelook'])) {
           $title="Modifier look";
           
        } else { 
           $title="Ajouter look";
        }
        
        $this->fields_form = array(
         'legend' => array(       
           'title' => $this->l($title),
         ),   
         'input' => array(       
           array(           
             'type' => 'text',
             'label' => $this->l('Nom'),
             'name' => 'name',
            ),
             array(           
             'type' => 'text',
             'label' => $this->l('Position X'),
             'name' => 'position_x',
            ),
         ),
         'submit' => array(
           'title' => $this->l('Save'),       
           'class' => 'button'   
         )
       );
        return parent::renderForm();
     }

J'ai essayé de remettre la requête de jointure dans la méthode renderForm au cas où mais ça n'aide pas. Comment récupérer la valeur position_x dans cette méthode renderForm ?

Edited by Secretuser (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...