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
Link to comment
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
Link to comment
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) ?

Link to comment
Share on other sites

  • 2 weeks later...

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();

Link to comment
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
Link to comment
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
Link to comment
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

Link to comment
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.

Link to comment
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.

Link to comment
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.

Link to comment
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 :-)

Link to comment
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 ;-)

Link to comment
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

Link to comment
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, :)

Link to comment
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)
Link to comment
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)
Link to comment
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

Link to comment
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 ?

Link to comment
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

Link to comment
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.

Link to comment
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).

Link to comment
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 ;)

Link to comment
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)
Link to comment
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 ?

Link to comment
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)
Link to comment
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)
Link to comment
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.

Link to comment
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 ?

Link to comment
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
Link to comment
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)
Link to comment
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

Link to comment
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
Link to comment
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
Link to comment
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.

Link to comment
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.

Link to comment
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 ! ;)

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...

Hello !

je reviens un peu à la charge pour une fonctionnalité qui je crois n'est pas dans le module et qui serait peut-être intéressante.

Dans le back office du module (la page de listing des enregistrements), j'ai rajouté la fonctionnalité de publié/dépublié assez facilement, en prenant example sur la partie Catégories.

Prestashop le gère presque tout seul.

 

En revanche, je cherche maintenant a gérer l'ordre de mes enregistrements avec le champ "position", mais il ne me semble pas que Presta, ce coup-ci le gère tout seul.

Une idée de comment procéder ?

j'ai créé mon champ "position" dans ma table, ajouté au model, pour l'instant dans l'admin, j'ai le numéro de la position, et pas les petites flèches pour monter/descendre.

 

Si vous l'avez déjà réalisé, je veux bien une idée ou un conseil pour le faire :)

Merci !

Link to comment
Share on other sites

Je vais regarder ça, il faut donc que j'adapte ces méthodes, ce n'est pas "automatique" comme pour l'option "active"

 

Edit, c'est mieux mais pas encore tout à fait ça, l'url d'une fleche, est la suivante :

 

http://monsite.fr/monadminpresta/index.php?controller=adminmonmodule&=3&way=0&position=1&token=b7b32c414906f2b7b1849b2361f4835b

 

&=3 devrait etre id_matable=3 j'imagine, mais je ne vois pas ou se situe mon pb, je vais continuer d'investiguer :)

 

Merci en tout cas pour les infos !

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

  • 2 weeks later...
  • 1 month later...

Bonjour, ce n'est peut-être pas de mon niveau mais j'ai voulu comprendre comment fonctionnait les modules sous prestashop 1.5 et j'ai beaucoup de difficulté pour trouver de la documentation pour m'aider à comprendre.

J'ai suivi le tutoriel de prestarocket (qu'on retrouve sur la doc 1.5 anglophone) qui permettait, en utilisant la structure de prestashop de créer un petit module pour laisser ses avis, et de les visualiser et activer en back-office. Très clair.

Mais ça reste spécifique, j'ai donc voulu utiliser le bouton "add new" dans le controlleur de back office, ou bien savoir comment fonctionnait ce controlleur. Je suis finalement tombé sur ce canvas qui semble suivre la même construction de module mais j'ai toujours du mal avec ce back-office.

 

Bref, J'ai toujours eu du mal à travailler si je ne comprenais pas la totalité de sur quoi je travaillais :-/ et donc j'aurais encore quelques interrogations.

c'est bien la fonction renderForm() qui permet l'affichage du formulaire "add new" ?

la methode postProcess() "permet" elle la modification/visualisation des lignes?

quand utilise t-on l'ajax dans le back-office? (je pensais à une recherche des informations ou autre mais il faut "entrer".

 

Plus globalement comment connait-on la syntaxe pour tout ça? Je me doute que ça ne s'apprend pas en un jour et que c'est un métier. Mais étant débutant j'aurais pensé qu'une doc "officielle" était un peu plus présente pour appréhender. Je ne sais par où "commencer". Je partais de l'idée de comprendre une grosse majorité du fonctionnement de prestashop avant de créer un module specifique. Maintenant même l'inverse me semble pas aisé.

Par exemple si je voulais ajouter dans le tutoriel d'opinion la fonctionalité du bouton "ajouter", je ne saurais comment m'y prendre (notamment pour afficher les clients à choisir par ex). :-o.

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

Bonjour,

 

Dans la fonction postProcess() du module, comment gere t-on la suppresion et l'update?

L'update me duplique simplement l'objet éditer et delete ne fais rien du tout.

 

Est-ce que quelqu'un sait comment gérer ces deux fonctionnalités?

 

 

 

 

edit :

 

la fonction postprocess ecrase la fonction parent et enleve plein de fonctionnalité natif ( tri, filtre, delete, update)

 

j'ai simplement supprimer cette fonction et tout marche correctement.

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

Bonjour,

 

Ne manquerait-il pas le dossier SQL ?

 

Si en effet, c'est domage.

Du coup pour palier à ça j'ai crée un dossier sql avec un fichier install.php contenant

<?php
$sql = array();
?>

 

Il y a aussi une erreur dans la fonction displayForm de example.php, il manque un


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

pour que le template "configure.tpl" puisse s'afficher.

 

Globalement c'est une super idée (merci J. Danse) ce modèle de base pour un module mais il reste des éléments manquants qui empechent de le tester en l'état :unsure:

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...