Jump to content

Modèle MVC au niveau de l'admin


Recommended Posts

Hello,

 

Je fais appel à qui veut bien m'aider car je suis complètement perdu au niveau du développement d'un module avec la version 1.5 au niveau de l'admin. En front office, j'ai galéré, mais en prenant exemple sur d'autres modules (faute de doc...). Par contre, en backoffice c'est autre chose.

 

En gros je stocke des éléments dans une base de données. J'ai réussi en créant un contrôleur à afficher la liste des éléments (avec la fonction _construct). Par contre, j'aimerais pouvoir voir les détails de mon contenu (à l'image du détail des commandes) en cliquant sur la ligne et les modifier.

 

Et c'est là que ça déconne : en breadcrumb, il m'affiche "View". Je suppose qu'il faut surcharger une fonction. Mais laquelle et comment ??? Renderview ? Renderform ?

 

J'ai regardé au niveau des contrôleurs admin des clients par exemple, et à chaque fois il y a un tpl view ou form dans un dossier helpers. Mais comment et où les mettre dans le dossier de mon module ?

 

Un minimum de doc même au stade embryonnaire serait-il disponible quelque part ? Le seul module pour lequel j'ai trouvé un truc qui s'en rapprochait était blockcms, mais uniquement pour la page de configuration du module, ce qui m'intéresse peu...

 

Toute aide est d'ores et déjà vivement remerciée par mes soins ! ;)

 

Wolfib

Link to comment
Share on other sites

Hello,

 

Merci pour ta réponse ! ;)

 

J'ai effectivement suivi ce tuto qui est super bien fait et m'a bien aidé au départ. Malheureusement il n'indique pas comment voir ou éditer un des éléments en backoffice (il explique "juste" comment avoir la liste des éléments).

 

En fouillant dans le code au niveau du contrôleur des commandes, j'ai trouvé que c'est la fonction renderView qui permet d'afficher et d'éditer les éléments (renderForm a l'air de ne faire que de l'édition de champs). En gros, la fonction sert à assigner des variables smarty et à les envoyer au tpl. Problème : pour les commandes, le tpl se trouve dans /dossieradmin/themes/default/template/controllers/orders/helpers/view/view.tpl. Mais dans quel sous dossier de mon module dois-je mettre mon view.tpl ? J'ai essayé templates/helpers/view/ mais ça ne marche pas. Une piste ?

 

@+

Link to comment
Share on other sites

Après avoir détricoté un certain nombre de classes et de contrôleurs (c'était chouette...), j'ai à priori la solution à mon problème.

 

Le fichier view.tpl qui permet d'afficher ou d'éditer un élément de module au niveau du backoffice (fonction renderView du contrôleur) doit se trouver dans le dossier suivant (à partir du dossier module) : /views/templates/admin/nomdelaclasseagerer/helpers/view/view.tpl

 

La solution était relativement simple quand on la connaît mais faute de doc ou d'exemple, énormément de temps perdu... Dommage...

  • Like 2
Link to comment
Share on other sites

Merci, je suis l'auteur de l'article ^_^

 

Effectivement, dedans j'explique seulement comment utiliser le ViewHelper pour afficher une liste, vu que l'ajout d'un modèle est géré par le front office.

En fait dans l'admin, tout est "cloisonné" dans les ViewHelpers, mais tu n'es pas obligé de les utiliser.

 

Tu peux aussi créer un fichier "content.tpl", qui sera la vue par défaut, et mettre ce que tu veux dedans.

 

Peut-être le sujet d'un future article :)

  • Like 1
Link to comment
Share on other sites

Je ne savais pas que tu étais l'auteur de cet article, mais félicitations. Pour l'instant, c'est tout simplement la seule ressource que j'ai trouvé pour expliquer le modèle MVC sous Prestashop 1.5.

 

Où as-tu trouvé ces infos pour faire ton tuto ? Tu as dû tout détricoter comme j'ai dû le faire ?

 

Il est clair que ce nouveau modèle est beaucoup plus propre que le précédent pour le développement des modules, mais quelle galère pour convertir les projets...

 

Merci en tous cas.

 

@+

Link to comment
Share on other sites

  • 2 months later...

j'ai du pas mal chercher pour résoudre un problème qui me semble similaire : ayant besoin de champs sortant des cas traités par les helpers dans mon formulaire, j'ai trouvé un hook qui me permet d'ajouter des types de champs.

 

à l'installation du module, ou le nom de la classe est MyClass :

private function _createHook()
 {
  // Create Hook
  $captain = new Hook();
  $captain->name = 'displayMyClassForm';
  $captain->title = 'my Title';
  $captain->description = 'My Description';
  if (!$captain->add())
	   return false;
  if (!$this->registerHook($this->hookName))
	   return false;
  return true;    
 }

 

Cheers :)

Link to comment
Share on other sites

hello,

 

dans /admin/themes/default/templates/helpers/form/form.tpl se situe le bout de code suivant

 

{if isset($name_controller)}
{capture name=hookName assign=hookName}display{$name_controller|ucfirst}Form{/capture}
{hook h=$hookName}

qui permet d'ajouter dynamiquement du contenu à la page de formulaire d'administration générée dynamiquement par les helpers, par exemple dans le cas de champs dont le type n'est pas pris en compte par le helper en question

 

il suffit donc de créer une fonction HookdisplayMyClassForm($params) et d'enregistrer ce hook en DB grace au code fourni ci dessus

 

à titre d'exemple, la fonction hook que j'utilise

 

 

 // add fields wich aren't treated by normal helpers
 public function HookDisplayProductCardForm($params)
 {
  $this->special_fields = array(
  array(
  'type' => 'multiple_select',
  'label' => $this->l('Feature Groups:'),
  'name' => 'ids_features_groups',
  'options' => array(
  'query' => FeatureGroup::getSimpleFeatureGroups($this->context->language->id),
  'id' => 'id_feature_group',
  'name' => 'name'
  ),
  'required' => false
  )
  );

  // assign values
  $product_card = new ProductCard(Tools::getValue('id_product_card', NULL));
$this->smarty->assign(array(
  'special_fields' => $this->special_fields,
  'feature_groups' => explode(';', $product_card->ids_features_groups)
  ));

  return $this->display(__FILE__, 'views/templates/admin/product-card.tpl');
 }

 

^_^;)

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,

 

Je cherche à utiliser un tpl pour la vue back-office d'un module mais je ne trouve pas comment faire..

Par ailleurs, y-a-t il un endroit où l'on peut trouver de la doc sur les helpers pour pouvoir tous les utiliser ?

 

Merci :)

Link to comment
Share on other sites

Hello,

 

La seule chose que je peux te dire c'est "bon courage" ! :)

 

C'est la grosse galère. Y a zéro doc (celle dispo sur le guide est pour la 1.4 donc inutilisable). J'arrive peu ou prou à m'en sortir en détricotant toutes les classes, ce qui n'est pas chose aisée. J'avais donné plus haut la hiérarchie pour utiliser view.tpl ou form.tpl. Ben j'ai perdu une demie journée simplement parce que si la classe est du genre NomDeMaClasse, il faut ajouter des underscores entre chaque mot, soit nom_de_ma_classe. Ravi d'avoir perdu une demie journée pour quelque chose qu'il était difficile d'imaginer.

 

Idem aujourd'hui, je voulais simplement avoir une classe avec des données stockées en base, et un formulaire d'ajout et de modification, dont un avec une image. J'ai passé la journée à comprendre à peu près comment ça marche en regardant les contrôleurs des statuts de commande ou encore celui des transporteurs. Très pratique !

 

C'est vraiment dommage parce que le modèle MVC est vraiment top. C'est un sacré gain de temps et une meilleure organisation. Mais sans doc, c'est l'enfer !

Link to comment
Share on other sites

Bonjour,

 

Je cherche à utiliser un tpl pour la vue back-office d'un module mais je ne trouve pas comment faire..

Par ailleurs, y-a-t il un endroit où l'on peut trouver de la doc sur les helpers pour pouvoir tous les utiliser ?

 

Merci :)

 

J'utilise jamais Dreamweaver mais ça fonction recherche par dossiers est tout de même bien utile pour découvrir cette nouvelle version.

 

Pour utiliser les tpl avec les controller admin il faut créer des dossier dans ton module views/templates/admin/NOM_DU_CONTROLLER/helpers/

 

 

NOM_DU_CONTROLLER équivaut au nom de ton controller admin sans le suffixe admin, exemple pour un controller moduleAdmin

 

NOM_DU_CONTROLLER = module

 

De là tu peut mettre plusieurs dossiers selon l'affichage que tu souhaite modifier (form, list, view), une petite visite dans le dossier controllers du theme admin t'aideras à trouver ce que tu cherche.

 

Franck

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

 

j'ai créé un module qui reprend entre autre la liste des commandes,

toute la liste s'affiche bien,

 

mon problème est lorsque je veux voir le détail d'une commande, au lieu de passer en paramètre l'id_order, il mets un id_orders sans valeur sorti de je ne sais où...

du coup, erreur sur la page de détail, mais si je modifie dans l'url le ..&id_orders=&... par ...&id_order=1234&..., alors le détail de la commande 1234 s'affiche bien.

le problème vient donc du lien généré pour voir le détail.

j'ai fait la meme chose avec les clients, et la pas de problème pour voir ou éditer une fiche.

 

quelqu'un aurait une idée d'ou peut venir le problème?

merci d'avance

Link to comment
Share on other sites

Salut,

 

qu'elle galère en effet, je viens enfin d'afficher la vue du détail des commandes pour mon module, après 4h d'analyse des classes de Presta...

Depuis le départ la doc de Presta est super pauvre au niveau dev, et c'est vraiment nul...

Personnellement je n'ai pas de soucis pour le lien généré qui permet d'afficher le détail d'une commande.

Pour info j'ai créer un fichier "AdminNomDuModule.php" qui étend donc la classe "ModuleAdminController". A l'intérieur j'y ai collé le code du fichier "AdminOrdersController.php" et pour l'instant la ligne "return $this->createTemplate('_print_pdf_icon.tpl')->fetch();" de la fonction "printPDFIcons()" est commentée car sinon j'avais une erreur de template.

Manulito en espérant que cela puisse t'aider..

Link to comment
Share on other sites

  • 3 weeks later...

 

Tu peux aussi créer un fichier "content.tpl", qui sera la vue par défaut, et mettre ce que tu veux dedans.

 

Peut-être le sujet d'un future article :)

 

Bonjour mexique1,

 

Ce fichier content.tpl m’intéresse beaucoup mais je n'arrive pas à m'en servir.

Déjà je ne sais pas ou le placer, j'ai essayé un peu partout dans mon module mais rien à faire !

nom du module : C2SContrat

 

nom de ma classe admin : AdminC2SCategoryController.php

 

emplacement du content.tpl :

modules/C2SContrat/views/templates/admin/C2SCategory/ ?

 

modules/C2SContrat/views/templates/admin/C2S_Category/ ?

 

modules/C2SContrat/views/templates/admin/C2S_Category_Controller/ ?

 

dans un dossier helpers ?

 

Merci de ton aide.

  • Like 1
Link to comment
Share on other sites

  • 2 months later...

Hello, je me permet de réagir aussi sur ce sujet, car je rencontre le même type de difficulté:

à savoir, j'ai mon dossier "monmodule", avec un controller AdminMonModuleController.php (avec la méthode renderForm), et un model MonModuleModel.php

j'aimerais ajouter 2,3 trucs dans le formulaire généré, j'ai donc créé dans le dossier views du module :

templates/admin/monmodule/helpers/form/form.tpl pour pouvoir y ajouter des choses, dans mon cas un simple texte ne s'affiche pas.

 

j'ai le doute sur le nom du dossier, car j'ai lu plusieurs choses :

j'ai testé :

- templates/admin/mon_module/....

- templates/admin/monModule/...

- templates/admin/MonModule/...

- templates/admin/mon_module_model/ ...

etc etc

mais rien n'y fait, pourtant de ce que j'ai compris c'est bien le nom du controller qu'il faut utiliser.

 

Auriez vous une piste ?

Par avance merci

Link to comment
Share on other sites

J'ai echo le path recherché dans la méthode createTemplate du fichier Helper.php, il m'indique bien :

modules/monmodule/views/templates/admin/mon_module/helpers/form/form.tpl

donc mon path est bon, maintenant faut trouver prquoi ca override pas :P

 

indice : si je garde ça {extends file="helpers/form/form.tpl"} cela ne passe pas, mes ajouts ne st pas pris enc ompte, si je l'enleve il override bien

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

La ligne d'extends plante peut-être smarty lorsqu'elle est exécutée car tu l'as conservée à l'identique.

 

Le chemin vers "helpers/form/form.tpl" n'est pas le même depuis le dossier de ton module que depuis le dossier thème de l'administration.

 

Corrige le path (voit pour utiliser les variables smarty de prestashop tel que le chemin vers admin, puis rajoute ce qui manque) et ça devrait fonctionner ;-)

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

  • 2 weeks later...

Bonjour,

 

petite question à laquelle je ne trouve pas de réponse sur le net,

 

j'aimerai dans l'admin avoir un module qui regroupe le formulaire de création de compte et celui de création d'adresse, comme pour le front office.

 

j'ai bien réussi à avoir la copie du formulaire compte client qui s'affiche par mon module, mais comment y intégrer le formulaire adresse?

j'ai essayé de reprendre les champs du formulaire adresse que j'ai mis dans le renderform() de mon controller adminclients.php, le formulaire a bien maintenant les champs d'adresse,

mais le problème est pour l'enregistrement.

 

sachant que dans le models est défini la table, qui est customer, et la je dois toucher 2 tables, customer et address.

 

donc 2 models? je suis un peu perdu.

 

si quelqu'un a une idée ou une piste, elle sera la bienvenue ^^

 

merci d'avance

Manu

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour à tous,

 

J'essaye de réaliser un module partant du Controller Admin AdminImportController.php

Ceci afin d'ajouter de nouvelles options d'import csv.

 

Deux bémols :

  • Le fichier file.button.tpl.php (1 Ko) n'est pas généré dans le dossier cache (cache/smarty/compile)
    L'icone d'aide ne s'affiche pas dans les deux fenêtres.
    J'ai rajouté dans mon module l'arborescence template/helpers/help_access et le fichier button.tpl . Sans succès. :(
  • Les sept entités contenu dans l'AdminImportController.php du Core affichent correctement les champs disponibles (availableFields).
  • Lors de la sélection du type d'entités (une des miennes : ex alias) les champs disponibles dans la Form à droite ne sont pas mise à jour. :(
    Les champs disponibles affichés sont ceux de la dernière sélection d'entités d'origine de Prestashop.
    Lien avec le fichier AdminImportController.php pour l'affichage des champs disponibles et non avec le fichierAdminImportcsvController.php de mon module ?

Edit ajout de l'extrait Form.tpl

<script type="text/javascript">
$("select#entity").change( function() {

$("#entitie").html($("#entity > option:selected").text().toLowerCase());
$.ajax({
url: 'ajax.php',
data: {
getAvailableFields:1,
entity: $("#entity").val()
},
dataType: 'json',
success: function(j) {
var fields = "";
$("#availableFields").empty();

for (var i = 0; i < j.length; i++)
fields += j[i].field;

$("#availableFields").html(fields);
activeClueTip();
},
error: function(j) {
}
});

});

</script>

 

 

Indesign

 

Merci par avance,

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

Bonjour à tous,

 

Ce sujet est super intéressant ! Car il est vrai qu'il n'y a aucune doc sur le MVC en admin.

 

J'ai moi meme un probleme avec le bouton de creation que j'aimerais désactiver. J'ai deja creer un autre sujet pour cette question : http://www.prestashop.com/forums/topic/238252-controller-admin-module-desactiver-la-creation/

 

Merci d'avance pour votre aide.

Link to comment
Share on other sites

Je reviens à la charge...

 

Quelqu'un sait comment ne pas afficher le bouton de création d'un objet dans la barre d'outil ?

 

J'ai une solution, fonctionnelle pour moi, tant qu'il ne s'agit que du bouton et non d'interdire la création.

 

A chaque fois que ça a été nécessaire pour moi, je surchargeais déjà le controller. J'ai donc simplement surchargé la méthode initToolbar comme suit pour retirer le bouton "Ajouter".

 

public function initToolbar(){
 parent::initToolbar();
 // Remove "Add" button from toolbar
 unset($this->toolbar_btn['new']);
}

 

Maintenant, si tu veux en plus interdire la création, je pense qu'il faut jouer avec les permissions des groupes d'utilisateur, dans Administrations->Permissions, tout simplement.

  • Like 1
Link to comment
Share on other sites

Salut mdiblasio,

 

Merci beaucoup pour ta réponse. Ça fonctionne nickel ! Merci, merci et merci !!!

 

Pour info, si tu veux interdire l'acces à la page de création, ajoutes cette ligne dans ton constructeur

$this->tabAccess['add'] = false;

 

C'est bon à savoir, merci pour le complément d'information ! Cela interdit-il complètement la possibilité de créer un objet via ce controller, ou "simplement" l'accès à la page de création (pointée par le bouton de la toolbar) ?

Link to comment
Share on other sites

Je ne suis pas a 100% sur que ca bloque l'enregistrement de données dans le cas ou un "faux formulaire" (vu que le formulaire ne peut apparaitre vu que cette propriété en bloque l'apparition) serait posté d'une manière farfelue. Personnellement je trouve que le risque est faible et pour moi le plus important est que ce formulaire n'apparaisse pas même en trafiquant l'URL.

  • Like 1
Link to comment
Share on other sites

A voir le code d'AdminController, il semblerait que seule la vue soit impactée par les données de ce tableau. Mais c'est toujours pratique puisque, comme tu le dis toi-même, l'accès à ses pages demande déjà d'être un utilisateur authentifié. Le risque d'envoie d'une requête HTTP POST sans passer par le formulaire est relativement faible, en fonction de la taille du site et du nombre de personnes ayant accès au backend.

 

Merci, donc, pour cette remontée d'information !

  • Like 1
Link to comment
Share on other sites

Joker ? ;-)

 

Je pense qu'il n'y en a strictement aucun, en réalité. Certains implémentent des bribes de temps à autre, chacun des différentes.

 

Mieux encore, qu'est-ce que l'on peut définir comme structure de développement ? L’arborescence des fichiers ? Si on s'en tiens là, on répondre à la question juste avant. Sinon, on en est encore très loin.

Link to comment
Share on other sites

Parce que... Non ça va, j'essaie même pas: je n'ai aucun argument pour ! Au même titre que pour les "Coding standard".

 

Après, il est vrai que je suis le premier partisan de la nouvelle structure (au sens strict du terme en terme d’arborescence) et de l'utilisation des HelperFom ainsi que d'un éventuel tpl pour la méthode getContent() d'un module. Mes seuls arguments ne sont pas le fait que ce soit recommandés par PrestaShop: c'est juste que je m'y retrouve et que me permet plus de choses aisément ! :)

  • Like 2
Link to comment
Share on other sites

  • 1 month later...

Post très intéressant, qui m'as pas mal aidée. Mais m'as aussi perdu.

Et d'ailleurs je viens poser mon soucis ou solution ?

 

Bref. J'ai développe un module qui s'adapte a la partie Commande du BO :

Censé être le controlleur : AdminOrdersController.php

 

Cependant lors de la surcharge de celui - ci pour rajouter mon bouton qui me permettra d'appeler mon code, tout les autres boutons disparaissent . . (CREATE en particulier). Étrange surtout qu'a aucun moment je n'ai "détruit le bouton" .

Bref je viens confirmer.

Sans doc, se balader partout comme ca c'est bien la galère.

 

Autre question rapide : Un seul controlleur gère la liste des commandes et le détail des commandes ? ..

 

J'ai trouve :

 

$res = parent::initToolbar();

if (Context::getContext()->shop->getContext() != Shop::CONTEXT_SHOP && isse\

t($this->toolbar_btn['new']) && Shop::isFeatureActive())

unset($this->toolbar_btn['new']);

return $res;

 

il suffit de retourner notre function initToolbar().

 

Cependant il est vrai que des qu'on souhaite utiliser notre controlleur pour executer nos templates ca devient moins facile :/ On s'y perds vite avec tout ca.

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

  • 1 month later...

Bonjour,

 

j'ai un problème de traduction des entetes des colonnes de la liste des clients, par mon module qui reprend l'affichage d'origine des clients. l'affichage est nikel, les traductions de la vue de chaque client est bien traduit.

 

il ne me manque que les titres des colonnes...

 

si quelqu'un a une idée.. j'ai beau chercher sur la forge, sur le forum, mais rien n'a marché pour le moment...

 

Merci d'avance

post-234100-0-08253100-1374571254_thumb.jpg

Link to comment
Share on other sites

Salut,

 

Tu pourrais donner ta méthode renderList qu'on y jette un oeil ?

 

A+

 

bonjour,

 

merci de vous interesser à mon problème,

je l'avais reprise dans les fichiers de l'admin,voici le code:

(j'ai fais un essai de traduction en passant par $module->l('First Name') à la place de $this->l('First Name'), comme dans certains modules, mais ca n'a rien changé..)

 

public function renderList()
{
 $module = new mwdconcessionnaires();
 $this->addRowAction('view');

 $genders = array();
 $genders_icon = array('default' => 'unknown.gif');
 foreach (Gender::getGenders() as $gender)
 {
  $gender_file = '../genders/'.$gender->id.'.jpg';
  if (file_exists(_PS_IMG_DIR_.$gender_file))
   $genders_icon[$gender->id] = '../'.$gender_file ;
  else
   $genders_icon[$gender->id] = $gender->name.'.jpg';
  $genders[$gender->id] = $gender->name.'.jpg';
 }

 $this->_select = 'a.*,
 a.id_employee as idEmployee,
 a.id_customer as idCustomer,
 a.id_customer as idCustomerAdd,
 a.id_customer as idCustomerOrd,
 gl.`name` AS Cname,
 ad.id_address AS id_address,
 ad.phone AS phone,
 ad.phone_mobile AS phone_mobile';

  $this->_join = '
 LEFT JOIN `'._DB_PREFIX_.'address` ad ON (ad.`id_customer` = a.`id_customer`)
 LEFT JOIN `'._DB_PREFIX_.'orders` o ON (o.`id_customer` = a.`id_customer`)
 LEFT JOIN `'._DB_PREFIX_.'customer_group` cg ON (cg.`id_customer` = a.`id_customer`)
 LEFT JOIN `'._DB_PREFIX_.'group_lang` gl ON (gl.`id_group` = cg.`id_group` AND gl.`id_lang` = '.$id_lang = (int)Context::getContext()->language->id.') ';

  $this->_where = 'AND cg.`id_group` NOT LIKE 1  AND cg.`id_group` NOT LIKE 37  AND cg.`id_group` NOT LIKE 38  AND cg.`id_group` NOT LIKE 43  AND cg.`id_group` NOT LIKE 44';/**/
  if($this->context->employee->id){
   $idEmployee = $this->context->employee->id;

   $employeeGroup = Db::getInstance()->getValue('
 SELECT `concession`
 FROM `'._DB_PREFIX_.'employee`
 WHERE `id_employee` LIKE '.(int)$idEmployee);
   $this->_where .= ' AND gl.`name` LIKE \''.$employeeGroup.'\'';
  }
  $this->_where .= ' GROUP BY id_customer';
  $this->_orderBy = 'Cname';
  $this->_orderWay = 'ASC';


 $this->fields_list = array(   
  'id_customer' => array(
   'title'  => $this->module->l('ID')
  ),
  'id_gender' => array(
   'title' => $this->l('#'),
   'width' => 50,
   'align' => 'center',
   'icon' => $genders_icon,
   'orderby' => false,
   'type' => 'select',
   'list' => $genders,
   'filter_key' => 'a!id_gender',
  ),
  'firstname' => array(
   'title'  => $module->l('First Name'),
   'havingFilter' => true
  ),
  'lastname' => array(
   'title'  => $this->l('Last Name'),
   'havingFilter' => true
  ),
  'email' => array(
   'title'  => $this->l('Email')
  ),
  'phone' => array(
   'title'  => $this->l('Phone')
  ),
  'phone_mobile' => array(
   'title'  => $this->l('Mobile')
  ),
  'idCustomerOrd' => array(
   'title'  => $this->l('Nb Orders'),
   'callback'  => 'getCustomerNbOrders',
   'orderby' => false,
   'search' => false 
  ),
  'id_address' => array(
   'title'  => $this->l('Address?'),
   'width' => 70,
   'align' => 'center',
   'type' => 'bool',
   'callback' => 'printAddressIcon',
   'orderby' => true,
   'filter_key' => 'id_address'
  ),
  'newsletter' => array(
   'title' => $this->l('News.'),
   'width' => 70,
   'align' => 'center',
   'type' => 'bool',
   'callback' => 'printNewsIcon',
   'orderby' => true
  ),
  'optin' => array(
   'title' => $this->l('Opt.'),
   'width' => 70,
   'align' => 'center',
   'type' => 'bool',
   'callback' => 'printOptinIcon',
   'orderby' => true
  ),
  'catalogreceived' => array(
   'title' => $this->l('Catalog received'),
   'width' => 70,
   'align' => 'center',
   'type' => 'bool',
   'callback' => 'printCatalogIcon',
   'orderby' => false
  ),
  'idEmployee' => array(
   'title'  => $this->l('Account creator'),
   'callback'  => 'getEmployeeName'
  ),
  'Cname' => array(
   'title'  => $this->l('Concession')
  ),
  'active' => array(
   'title'  => $this->l('Active'),
   'active'  => 'status'
  )
 );

 $lists = parent::renderList();
 // Check if we can add a customer
 /*if (Shop::isFeatureActive() && (Shop::getContext() == Shop::CONTEXT_ALL || Shop::getContext() == Shop::CONTEXT_GROUP))
  $this->can_add_customer = false;
  */
 $this->can_add_customer = true;
 parent::initToolbar();

 $html = '';   

 if (Tools::getValue('export'))
   $this->csvExport(array('layers' => 2, 'type' => 'line', 'option' => '1'));

 $html .= ' <p><a class="button export-csv" href="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'&export=1&exportType=1"><span>'.$this->l('CSV Export').'</span></a></p>';
 $this->content=$html;

 return $lists;
}

Link to comment
Share on other sites

Salut,

 

Bon déjà si tu te bases sur le Canvas de module sache que la méthode renderList est fausse, car $this->fields_list doit être déclaré dans le constructeur (Regarde les AdminController de base) car si tu regardes le fonctionnement de la class AdminController, tu verras que cette variable est utilisée par d'autres méthodes que renderList et si tu ne la déclares pas dans le constructeur ces méthodes ne pourront pas fonctionner.

 

Cela s'applique aux autres propriétés déclarées dans ta méthode renderList, normalement tu n'as pas besoin de surcharger cette méthode, tout ce qui est affectation de variable doit être fait dans le constructeur.

 

Personnellement j'ai terminé un module hier pour un client en utilisant un ModuleAdminController et je n'ai pas eut de problème avec les traductions des champs de la renderList, je n'ai pas surchargé la méthode renderList et j'ai fais mes déclarations dans le constructeur en prenant exemple sur les AdminController de base.

 

$module = new mwdconcessionnaires();

Cette ligne est inutile, le constructeur parent déclare déjà $this->module.

Link to comment
Share on other sites

  • 9 months later...

Bonjour,

 

est ce que quelqu'un saurait comment désactiver le bouton qui affiche la liste des modules dans la toolbar, j'ai testé le code suivant dans la fonction initToolbar mais ça ne fonctionne pas :

unset($this->toolbar_btn['modules-list']);

Merci d'avance ;)

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