Jump to content

[Doc] Canvas de module


Recommended Posts

Bonjour tout le monde,

 

Voici un canvas de module compatible 1.5.

 

Il me reste à implémenter deux trois trucs mais vous pouvez l’analyser et le modifier selon vos besoins !

 

[Version 1.4]

 

 

[Version 1.5]

 

 

Version GIThub

https://github.com/P...e-Prestashop-15

 

Edit, mise à jour du 17.09.2012

Une nouvelle version du module est disponible sur ce post.

 

Edit, mise à jour du 19.09.2012

Une nouvelle version du module est disponible sur ce post.

 

Edit, mise à jour du 03.10.2012

Une nouvelle version du module est disponible.

 

Edit, mise à jour du 23.12.2012

Une nouvelle version (1.5) du module est disponible.

Edited by J. Danse (see edit history)
  • Like 6

Share this post


Link to post
Share on other sites

Salut,

 

Je tiens à vous remercier pour la mise à disposition de ce canvas très utile.

 

Je m'intéresse à Prestashop depuis une petite semaine seulement, je me suis basé sur votre canvas pour développer un module mais il me manque un exemple pour l'insertion des données récupérées via le formulaire dans l'administration avec le controller.

 

J'ai bien vu qu'il fallait se servir de la fonction add() de ObjectModel mais je n'ai aucune idée de la meilleure syntaxe à adopter ni où placer mon code dans le controller. Je n'ai pas trouver de module de base ayant un controller admin...

 

Cordialement

  • Like 1

Share this post


Link to post
Share on other sites

Bonsoir,

 

Merci pour cette mise à jour, j'ai réussi à faire l'ajout, la modification et la suppression depuis l'admin :)

Demain je m'occuperai de l'affichage dans le front, j'ai tout ce qu'il me faut pour le réaliser.

 

Cordialement

Share this post


Link to post
Share on other sites

Salut !

 

Très bonne idée ce Canvas.

 

Par contre, après avoir installé le module, si je clique sur "Configurer", j'ai l'erreur suivante :

 

Notice: Undefined variable: errors in F:\Dev\www\prestashop\1.5.0.17\modules\example\example.php on line 121

Edited by DrÿSs' (see edit history)

Share this post


Link to post
Share on other sites

Oki :)

 

Par contre j'ai du mal à comprendre comment la variable $errors peut être SET :

 

       	 if (isset($errors) && count($errors))
               $output .= $this->displayError(implode('<br />', $errors));

 

et

 

   	 if(isset($errors))
           $this->context->smarty->assign('errors', $errors);

 

Non seulement elle n'est remplie nul part dans le fichier, mais comme ce n'est pas une variable globale, on ne pourra jamais accéder à son contenu ;)

 

Ça devrait pas être un membre de la classe du module ($this->errors) ?

Share this post


Link to post
Share on other sites

Dans le renderForm de AdminExampleController, il manque la propriété "size" pour le champs "date".

Du coup, ça pète un notice.

 

Il faudrait avoir :

 

          	 array(
                   'type' => 'date',
                   'name' => 'exampledate',
			    'size' => 40
               )

Share this post


Link to post
Share on other sites

  • 2 weeks later...

Bonjour,

 

Est-il possible de faire que lorsque l'on clique sur une entrée du tableau on puisse générez des entrée enfant ? ou accédez au entrée enfant de ce dernier ?

 

Car je bloque sur ce point ^^

 

Cordialement

Share this post


Link to post
Share on other sites

Dans le fichier example.php, il manque pour être propre avec la table PS_TAB à supprimer le menu racine.

 

Remplacer la ligne

		    // Uninstall Tabs
		    $tab = new Tab((int)Tab::getIdFromClassName('AdminExample'));
		    $tab->delete();

 

par

 

		    // Uninstall Tabs
		    $tab = new Tab((int)Tab::getIdFromClassName('AdminExample'));
		    $tab->delete();
		   $tab = new Tab((int)Tab::getIdFromClassName('AdminMainExample'));
		    $tab->delete();

Share this post


Link to post
Share on other sites

Merci galerien ! Je vais mettre cela à jour dans le module, je le publierais dès que possible avec les nouveautés ;)

 

@Belenos: Dès que j'ai un peu de temps, pour le moment, je développé un peu sous la 1.5 (dont des modules exemples afin de les intégrer dans l'IDE lui-même !) ;)

  • Like 1

Share this post


Link to post
Share on other sites

Salut J.danse,

 

Dans la methode postProcess() du controller de l'administration tu peut utiliser le code suivant qui est plus propre et gère toutes les données envoyés :

 

public function postProcess()
{
 if (Tools::isSubmit('submitAdd'.$this->table))
 {
  // Create Object ExampleData
  $obj = new ExampleData();
  // Copy From Post
  $this->copyFromPost($obj, 'example_data');
  // Save object
  if (!$obj->save())
   $this->errors[] = Tools::displayError('An error has occurred: Can\'t save the current object');
  else
   Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token);
 }
}

  • Like 1

Share this post


Link to post
Share on other sites

  // Copy From Post
  $this->copyFromPost($obj, 'example_data');

Franchement, la methode copyFromPost est la méthode la plus moisie que la team ait inventé. De plus elle casse totalement le modèle / vue / controlleur. Enfin, je dis ça, je dis rien hein

Share this post


Link to post
Share on other sites

Franchement, la methode copyFromPost est la méthode la plus moisie que la team ait inventé. De plus elle casse totalement le modèle / vue / controlleur. Enfin, je dis ça, je dis rien hein

 

J'adore !!!!!

Toutes les remarques sans fondement sont tellement plus constructives et intelligentes !

Je crois effectivement que t'aurait mieux fait de rien dire, à moins que tu pense sincèrement que le code utilisé dans ce canevas soit plus approprié que la méthode copyFromPost() native à Prestashop !?

 

 

Methode copyFromPost :

 

/**
 * Copy datas from $_POST to object
 *
 * @param object &$object Object
 * @param string $table Object table
 */
protected function copyFromPost(&$object, $table)
{
 /* Classical fields */
 foreach ($_POST as $key => $value)
  if (key_exists($key, $object) && $key != 'id_'.$table)
  {
/* Do not take care of password field if empty */
if ($key == 'passwd' && Tools::getValue('id_'.$table) && empty($value))
 continue;
/* Automatically encrypt password in MD5 */
if ($key == 'passwd' && !empty($value))
 $value = Tools::encrypt($value);
$object->{$key} = $value;
  }
 /* Multilingual fields */
 $rules = call_user_func(array(get_class($object), 'getValidationRules'), get_class($object));
 if (count($rules['validateLang']))
 {
  $languages = Language::getLanguages(false);
  foreach ($languages as $language)
foreach (array_keys($rules['validateLang']) as $field)
 if (isset($_POST[$field.'_'.(int)$language['id_lang']]))
  $object->{$field}[(int)$language['id_lang']] = $_POST[$field.'_'.(int)$language['id_lang']];
 }
}

 

Code du canevas :

 

$exemple_data->exampledate = array();
  $languages = Language::getLanguages(false);
foreach ($languages as $language)
 $exemple_data->name[$language['id_lang']] = Tools::getValue('name_'.$language['id_lang']);

 

On remarquera que le code du canevas fait à plusieurs quelques points près la même chose que la méthode, de plus je vois vraiment pas en quoi cette méthode casse le modèle MVC toute la partie traitement est bien géré par le controller qui renvoi les éléments traités au modèle pour enregistrement, ensuite selon le retour du modèle on affiche un message.

Share this post


Link to post
Share on other sites

Toutes les remarques sans fondement sont tellement plus constructives et intelligentes !

?? Est-ce vraiment à l'objet d'aller lire la variable post?

?? Si j'ai besoin de réutiliser en dehors d'un accès FO/BO la fonctionnalité, je dois bourrer ma variable post?

?? Je dois alors deviner le noms des champs présent dans le BO pour mettre à jour mon objet

?? Je dois reproduire toutes les choses du formulaire du BO sans rien omettre

 

On parle bien de modèle MVC?

Suis-je vraiment sans fondement?

 

Ote moi d'un doute, dans le cas ou un problème survient dans le copyFromPost... que doit faire cette méthode? Générer une exception? Envoyer une alerte html? Et si je voulais utiliser la fonctionnalité depuis un ajax? ... Au final on remarque vite que pour faire les choses comme il faut nous n'avons d'autre choix que de dupliquer le traitement pour ajax/html/processing donc maintenir au moins 3 branches qui font les mêmes fonctionnalité. C'est en ça que la solution est moisie.

Share this post


Link to post
Share on other sites

Merci d'avoir pris la peine d'étayer tes propos ceux-ci dits je ne suis pas vraiment d'accord avec toi !

 

?? Est-ce vraiment à l'objet d'aller lire la variable post?

 

Tout dépend de qu'elle objet on parle, ici il s'agit bien de l'objet du controller et non pas de l'objet du model qui va faire le traitement de la variable post, l'objet du model est juste passé en argument de la méthode copyFromPost pour pouvoir valider et assigner les données au champs de la table conformément à ce qui est attendu par les autres méthodes (save, update, add).

 

Étant donné qu'on n'est pas sur un framework avec une gestion poussée des requêtes comme sur cakephp ou symfony par exemple je vois pas le problème à créer une méthode dans le controller principal pour gérer les posts

 

?? Si j'ai besoin de réutiliser en dehors d'un accès FO/BO la fonctionnalité, je dois bourrer ma variable post?

?? Je dois alors deviner le noms des champs présent dans le BO pour mettre à jour mon objet

?? Je dois reproduire toutes les choses du formulaire du BO sans rien omettre

 

Hors sujet, cette méthode n'est dispo que pour les controllers admin, ceci explique peut être cela!

 

On parle bien de modèle MVC?

Suis-je vraiment sans fondement?

 

oui et ..... oui

 

Ote moi d'un doute, dans le cas ou un problème survient dans le copyFromPost... que doit faire cette méthode? Générer une exception? Envoyer une alerte html? Et si je voulais utiliser la fonctionnalité depuis un ajax? ... Au final on remarque vite que pour faire les choses comme il faut nous n'avons d'autre choix que de dupliquer le traitement pour ajax/html/processing donc maintenir au moins 3 branches qui font les mêmes fonctionnalité. C'est en ça que la solution est moisie.

 

De quelle erreur parle tu?

La seule erreur qui peut y avoir c'est si tu passes un objet controller au lieu d'un objet model en paramètre de la fonction qui provoquera une erreur sur la fonction call_user_func() parce que cette objet ne dispose pas de méthode getValidationRules, je t'accorde qu'il aurait pu créer une exception pour checker ce point, sur ce coup il ce sont peut être dit qu'un développeur comprendrait tout de suite sont erreur.

 

Pour fini cette méthode est complètement utilisable en ajax, encore une fois tu expose des problèmes ou toi seul les vois sans donner d'exemple concret, je crois que tu a un gros problème de compréhension du code.

Share this post


Link to post
Share on other sites

Sauf que copyFromPost ne fait pas que copier les données. Il lance les hooks (before, update, afer), retourne en erreur , ajoute l'objet sous-jacent à la bdd (même si tu ne fait pas submit), Renvoi les headers de redirect...

Cette approche fait omettre de nombreuses méthodes OO qui manquent a nombre d'objets (model). Le controller doit copier from post soit, mais ensuite lancer des validation qui existent sur l'objet. c'est à l'objet de traiter sa validation...

Pour finir en ajax, nous somme presque toujours en json. Le retour d'erreur ici ne fera que provoquer des XHR: Techical error... Pas pratique, ni informatif

 

Sur ce, rendons ce topic à J. Danse :-)

Share this post


Link to post
Share on other sites

Sauf que copyFromPost ne fait pas que copier les données. Il lance les hooks (before, update, afer), retourne en erreur , ajoute l'objet sous-jacent à la bdd (même si tu ne fait pas submit), Renvoi les headers de redirect...

 

Mais bien sur, elle ma même fait le café sucrette l'autre jour...

 

Cette approche fait omettre de nombreuses méthodes OO qui manquent a nombre d'objets (model). Le controller doit copier from post soit, mais ensuite lancer des validation qui existent sur l'objet. c'est à l'objet de traiter sa validation...

Pour finir en ajax, nous somme presque toujours en json. Le retour d'erreur ici ne fera que provoquer des XHR: Techical error... Pas pratique, ni informatif

 

Tu es un commercial hors pair, franchement je t'embauche quand tu veut ! (c'est une vrai proposition!)

 

Sur ce, rendons ce topic à J. Danse :-)

 

On à enfin trouvé un terrain d'entente ;-)

Share this post


Link to post
Share on other sites

Bon,

 

Je coulais, comme proposé, le mettre sur un répertoire SVN. Mais, ... ça m'énerve déjà, je ne parviens pas à le faire.

 

Si quelqu'un est disposé à le faire... :)

 

Salut J.Danse,

 

Pourquoi tu le met pas directement sur github? c'est gratuit pour un dépôt open source comme le tiens.

Je veux bien le faire à ta place mais ce seras sur mon compte github et pas sur le tiens, vaut mieux que tu créer un compte et que tu mette le dépôt dessus.

 

Si tu es sur windows tu peut utiliser le logiciel github:windows => http://windows.github.com/

N'hésite pas à me contacter sur skype au besoin.

Franck

Share this post


Link to post
Share on other sites

C'est justement ce que je voulais faire: un compte GIT (ou un truc du même nom, mais qui fait la même chose quoi !).

 

Je sais pas pourquoi mes logiciels ne fonctionnent pas avec le compte crée (enfin, si je sais: parce que je ne sais pas comment on fait, mais bon ;)).

 

Donc voilà.

 

PS: Je viens d'essayer... Beau logiciel, mais à part m'énerver à faire des erreurs, il ne fait rien pour moi. Je te laisse donc le soin de le faire si tu veux, :)

Share this post


Link to post
Share on other sites

Bonjour,

je me suis basé sur le canvas qui est ma fois for pratique !

J'ai cependant un petit soucis, et je pense que je dois pas avoir les yeux en face des trous.

 

Edit:

Dans la liste, la suppression, ne supprime pas... (pourtant l'id est bien dans les paramètres de l'url)

=>autant pour moi pour la suppression, c'est ok, me manquait la bonne méthode

 

et l'édition, ne me charge pas les données (pareil l'id est bien fournit)

=> du coup je pense que c'est la même chose que pour la suppression.

 

Par contre que je fais "add" il ne me créé pas un nouvel id, il update le premier enregistrement...

 

une petite idée d'où cela pourrait provenir ?

 

merci !

Edited by vmulot (see edit history)

Share this post


Link to post
Share on other sites

Merci pour ta réponse.

Pour que l'édit et le delete fonctionne sur la liste, j'ai rajouter dans le postProcess le test

if(Tools::isSubmit('delete'.$this->table))

 

etc etc.

C'est juste que je sortais d'un truc fait avec CakePhp et que c'est beaucoup plus automatique :)

 

Edit, ok j'ai vraiment pas les yeux en face des trous :) j'avais mal écrit mon

$this->className =

dans le construct de mon admin controller, donc forcément...

 

Merci Prestaspirit, ça m'a permis de trouver mon erreur :)

Edited by vmulot (see edit history)

Share this post


Link to post
Share on other sites

Je t'en prie !

 

Prestashop commence réellement à ce rapprocher de cake avec la version 1.5, tout ou presque est automagic maintenant, par exemple pour supprimer et éditer tu peut aussi indiquer l'action comme ceci:

 

$this->action = 'delete';

 

Le controller devrait comprendre sans problème, ont peut aussi créer nos propres actions comme ça:

 

$this->action = 'delete_item';

 

et ensuite créer une méthode processDeleteItem() et faire ce qu'on veux dedans, j'ai testé dans les controllers admin mais dans les controllers du front ça doit être le même principe

Share this post


Link to post
Share on other sites

Je pensais avoir résolu mon problème, mais je me rend compte finalement, que ce coup-ci l'édition, n'update pas, mais créé un nouvel enregistrement... :P

je vais y arriver un jour !

 

comment utilises tu le $this->action ? dans le postProcess en fonction du submit ?

Share this post


Link to post
Share on other sites

Bonjour,

 

Voici mon postProcess() qui fonctionne pour l'ajout, modification et suppression.

public function postProcess()
   {
       if ($this->action == 'save')
       {
           $id = (int)(Tools::getValue('id_'.$this->table));

           /* Object update */
           if (isset($id) && !empty($id))
           {
               $object = new $this->className($id);
               if (Validate::isLoadedObject($object))
               {
                   $this->copyFromPost($object, $this->table);
                   $result = $object->update(false, false);

                   if (!$result)
                       $this->errors[] = Tools::displayError('An error occurred while updating object.').' <b>'.$this->table.'</b>';
                   else
                       Tools::redirectAdmin(self::$currentIndex.'&id_'.$this->table.'='.$object->id.'&conf=4'.'&token='.$this->token);
               }
               else
                   $this->errors[] = Tools::displayError('An error occurred while updating object.').' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)');
           }

           /* Object creation */
           else
           {
               $object = new $this->className();
               $this->copyFromPost($object, $this->table);
               if (!$object->add())
                   $this->errors[] = Tools::displayError('An error occurred while creating object.').' <b>'.$this->table.'</b>';
               else
                   Tools::redirectAdmin(self::$currentIndex.'&id_'.$this->table.'='.$object->id.'&conf=3'.'&token='.$this->token);
           }
       }
       else
           parent::postProcess();
   }

 

Cordialement

Share this post


Link to post
Share on other sites

Pourquoi dupliquer la méthode postProcess() qui existe déjà dans la classe mère AdminController ?

 

Il n'y a aucune méthode postProcess() à déclarer dans un contrôleur admin, à part si on veut la surcharger pour y ajouter/changer le comportement de la classe mère.

Share this post


Link to post
Share on other sites

Il me pose un problème avec l'id_shop, c'est pour cela que j'avais tout de même surchargé le postProcess. j'ai du encore passer à côté de qq chose alors :) ou récupère tu cet id_shop du coup ?

 

par avance merci

Share this post


Link to post
Share on other sites

@Matt75: je te déconseille de dupliquer le code de la méthode de la classe mère postProcess().

 

Non seulement c'est pas très propre (doublon de lignes de code dans deux fichiers), et en plus cela pourrait t’empêcher de bénéficier des mises à jour/corrections de bugs de la classe mère si tu met à jour ta boutique.

 

Je privilégierais plutôt le rappel de la classe mère avec un parent::postProcess(), puis l'ajout de ton comportement spécifique (ou inversement dans l'ordre d’exécution).

Share this post


Link to post
Share on other sites

@Matt75: je te déconseille de dupliquer le code de la méthode de la classe mère postProcess().

 

Non seulement c'est pas très propre (doublon de lignes de code dans deux fichiers), et en plus cela pourrait t’empêcher de bénéficier des mises à jour/corrections de bugs de la classe mère si tu met à jour ta boutique.

 

Je privilégierais plutôt le rappel de la classe mère avec un parent::postProcess(), puis l'ajout de ton comportement spécifique (ou inversement dans l'ordre d’exécution).

Effectivement, je viens de faire la correction dans mon code ;)

Share this post


Link to post
Share on other sites

@vmulot : normalement c'est géré là aussi par la classe mère AdminController.

 

Tu dois le préciser dans la classe de ton objet, lors des définitions.

 

Exemple avec la classe Product :

 

class ProductCore extends ObjectModel
{
[...]
public static $definition = array(
 'table' => 'product',
 'primary' => 'id_product',
 'multilang' => true,
 'multilang_shop' => true,

 

La table SQL liée à cette classe doit bien sûr supporter une colone id_shop.

Edited by DrÿSs' (see edit history)

Share this post


Link to post
Share on other sites

j'ai peut-être mal fait mes tables SQL alors, parce que j'avais bien le 'multilang'=>true mais quand je rajoute 'multilang_shop'=> true j'ai une erreur (il ne trouve pas id_shop dans la table de langue).

 

j'ai fais une table ps_monmodule('id_monmodule','id_shop') et une table ps_monmodule_lang('id_monmodule','id_lang','champ1','champ2')

 

j'avais repris ça d'un autre module, quelle serait la bonne chose à faire du coup ? parce que si je rajoute le id_shop dans la ps_monmodule_lang, ma premiere table n'auras plus que l'id, c'est un peu bizarre non ?

Share this post


Link to post
Share on other sites

Autant pour moi, le multilang_shop permet d'activer un multilang différent par shop.

Il te faudrait donc un id_shop dans ta table de langue.

 

Bref c'est pas ce que tu demandais initialement.

Je n'ai pas encore testé le multishop sur une classe/contrôleur, je regarde ça :)

Edited by DrÿSs' (see edit history)

Share this post


Link to post
Share on other sites

Il faut activer le multiboutique avec au moins deux boutiques.

 

Ensuite, dans la classe (modèle), il faut préciser pour chaque champ s'il est multishop (dans les définitions) :

 

public static $definition = array(
 'table' => 'product',
 'primary' => 'id_product',
 'fields' => array(
'id_category_default' =>   array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedId'))
);

 

Et enfin il faut avoir une table "product_shop" associée (pour la classe Product dans notre exemple), avec comme colonne id_product / id_shop / id_category_default / champs_2 / champs_3 / etc.

 

Au final, tout devrait se faire automatiquement via le contrôleur d'admin.

Edited by DrÿSs' (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

 

 

J'ai suivit cette super arboresense, afin de créer mon module, cependant, lorsque j'ajoute l'administration à mon menu admin, j'ai le droit à une super erreur que je n'arrive pas à corriger :

 

Le contrôleur adminmenuconceptcontroller est manquant ou non valable.

 

 

Or mon fichier possède bien le classe en question.

monsite/modules/menuconcept/controllers/admin/AdminMenuConceptController.php

 

Possédant donc la class => AdminMenuConceptController extends ModuleAdminController

 

J'ai tout essayé, lors de la déclaration du module dans Administration->Menus->Créez

J'ai mis donc la class AdminMenuConceptController mais je suis confronté à ce problème, ensuite, j'ai essayé en spécifiant le nom du dossier du Modules "menuconcept"

 

 

Alors es que je ne me suis pas trompé de dossier module ? Quesqui ne va pas ?

 

 

 

Merci par avance.

Share this post


Link to post
Share on other sites

Merci DrySs pour ta réponse, cependant, je rencontre toujours une erreur :

 

Fatal error: Class 'adminmenuconceptcontrollerController' not found in...

 

Sachant que dans le champ class j'ai mis AdminMenuConcept et dans module menuconcept.

 

 

Une idée ?

Share this post


Link to post
Share on other sites

Onglet :

 

- Nom : Mon onglet

- Classe : AdminMenuConcept

- Module : menuconcept

 

Fichier :

 

monsite/modules/menuconcept/controllers/admin/AdminMenuConceptController.php

 

Classe :

 

AdminMenuConceptController extends ModuleAdminController

 

Si tout correspond, envoie-moi ton module à [email protected] que je regarde en local :)

  • Like 1

Share this post


Link to post
Share on other sites

@prof shadoko:

 

Tu ne peux pas sur le TR, par contre tu peux sur le TD en usurpant le paramètre align, qui en fait inclut la valeur du paramètre comme classe CSS :

 

$this->fields_list = array(
		'name' => array(
			'title' => $this->l('Name'),
			'align' => 'maClasse'
		));

 

Tu peux sinon utiliser la callback :

 

$this->fields_list = array(
   'name' => array(
    'title' => $this->l('Name'),
    'callback' => 'maCallback'
));

static public function maCallback($value, $tr)
{
   if ($value)
       return $value;
   $product = new Product(intval($tr['id_product']));
    return $product->name;
}

Edited by DrÿSs' (see edit history)

Share this post


Link to post
Share on other sites

$this->fields_list = array(

'name' => array(

'title' => $this->l('Name'),

'callback' => 'maCallback'

));

 

static public function maCallback($value, $tr)

{

if ($value)

return $value;

$product = new Product(intval($tr['id_product']));

return $product->name;

}

C'est parfait le callback pour mon cas.

 

Merci Dryss pour ta réponse

Share this post


Link to post
Share on other sites

Dryss

 

Pour avoir galéré de nombreuse heure à chercher à comprendre ces ****** de construction de module (y a vraiment un manque de doc sur les pre requis pour construire un module en utilisant les fonctions intégrés de Prestashop), c'est normal qu'il obtienne l'erreur qu'il ne trouve pas la classe.

 

La vrai structure doit être :

 

Onglet :

 

- Nom : Mon onglet

- Classe : AdminMenuConcept

- Module : menuconcept

 

Fichier :

 

monsite/modules/menuconcept/controllers/admin/AdminMenuConcept.php et surtout pas comme tu l'indiques monsite/modules/menuconcept/controllers/admin/AdminMenuConceptController.php

 

Classe :

 

AdminMenuConceptController extends ModuleAdminController

  • Like 1

Share this post


Link to post
Share on other sites

Salut, en fait normalement c'est avec "controller" à la fin, mais effectivement les deux marchent.

 

Le dispatcheur va lister les fichiers présents dans le dossier de ton module, et remplacer "controller.php" par ".php". Ensuite, il supprime l'extension ".php" du nom du fichier.

 

Ainsi, que ton fichier s'appelle "AdminMenuConceptController.php" ou "AdminMenuConcept.php", il ne restera au final que "AdminMenuConcept" pour faire la correspondance avec le nom de l'onglet.

 

Mais à la base, la solution gère les nom avec "Controller.php" à la fin ;)

Edited by DrÿSs' (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Dommage que ce petit projet ne soit pas maintenu...

 

Tous ce que je sais, c'est que vous n'aller pas tarder à voir débarquer git pour PrestaShop 1.5 ;) (Cf. https://twitter.com/...1681408/photo/1)

 

Je vois que maintenant c'est devenu public :P de quoi se réjouir non?

 

Si mes souvenir sont bon, la communauté pourra dans les mois avenirs commiter sur PrestaShop :P

 

Bonne news non ?

 

Loïc.

Share this post


Link to post
Share on other sites

Ouai enfin Git ou SVN, ça reste la même chose au final : j'espère que n'importe qui ne pourra pas commit n'importe quoi n'importe quand...

 

(Déjà que de base le code PrestaShop c'est un bon merdier :P)

 

Ne va pas croire qu'il vont te laisser développer sans tester et vérifié ton code ;)

Il y aura très certainement un ou plusieurs développeur derrière.

 

Loïc.

Share this post


Link to post
Share on other sites

Dommage que ce petit projet ne soit pas maintenu...

 

J'ai laissé exprès la création d'un compte pour réaliser la maintenance (beaucoup de demandes, pas trop de temps et surtout plus de PC pour finaliser les commits moi-même. N'hésitez pas à le faire ! ;)

Share this post


Link to post
Share on other sites