Luc Lérot Freelance Posted July 25, 2012 Share Posted July 25, 2012 Bonjour, Je me suis rendu compte que le type 'checkbox' n'était pas implémenté (enfin si, mais laissé en commentaires) pour la gestion des options des AdminTab. On a le type text, le type select, le type textarea (+rte) mais pas de checkbox. Comme j'en avais besoin, j'ai donc tenté une solution simple (et propre) pour pouvoir les utiliser. Je vous donne donc ma méthode, si jamais ca peut servir à quelqu'un. A noter qu'en plus de mettre les 'checkbox' à disposition sur les AdminTabs, la méthode que je décris permet de mettre en place un override de helper (et accessoirement tout autre template BO) au travers d'un module. 1. Override de template BO Le template qu'on veut overrider, c'est le template options.tpl qui se trouve dans admin/themes/default/template/helpers/options/options.tpl. Aussi, pour overrider ce template, il faut créer la structure suivante dans le répertoire du module : views/templates/admin/nom-particulier/helpers/options/options.tpl Le nom-particulier, c'est en fait le nom du controller admin du module, sans le Admin et sans le Controller (convention de nommage donc). En effet, les controlleurs admin des modules sont liés à une convention de nommage stricte. Et si par exemple, mon controlleur admin s'appelle : AdminModulemachinController, le nomparticulier dans l'arborescence ci-dessus sera donc modulemachin. Il est important de souligner que AdminModuleMachinController (majuscules à Module et Machin) ne sera pas en mesure de prendre l'override de template. La notion de majuscules/minuscules est stricte elle aussi. On a donc la structure pour utiliser un override de template BO, on y reviendra plus tard. 2. Définition de l'option en checkbox Je définis l'option d'AdminTab que je veux en checkbox comme suit (dans le constructeur) : $this->fields_options = array( 'general' => array( 'title' => $this->l('Contact Form Options'), 'fields' => array( 'PS_XLCN_CNCT_AUTHSHOPS' => array( 'title' => $this->l('Authorized Shops for Phone & Fax '), 'desc' => $this->l('Shops allowed to display phone & fax numbers within contact form'), 'type' => 'checkbox', 'identifier' => 'id_shop', 'choices' => $this->getShops(), ) ), 'submit' => array() ) ); A noter : 1. qu'il n'y a pas de 'cast' 2. qu'il y a une fonction getShops () particulière pour pouvoir générer mes checkbox avec des id et des value (cf. plus bas) 3. Options.tpl Dans mon template BO options.tpl, je colle ca : {extends file="helpers/options/options.tpl"} {block name="input"} {if $field['type'] == 'select'} {if $field['list']} <select name="{$key}"{if isset($field['js'])} onchange="{$field['js']}"{/if} id="{$key}" {if isset($field['size'])} size="{$field['size']}"{/if}> {foreach $field['list'] AS $k => $option} <option value="{$option[$field['identifier']]}"{if $field['value'] == $option[$field['identifier']]} selected="selected"{/if}>{$option['name']}</option> {/foreach} </select> {else if isset($input.empty_message)} {$input.empty_message} {/if} {elseif $field['type'] == 'bool'} <label class="t" for="{$key}_on"><img src="../img/admin/enabled.gif" alt="{l s='Yes'}" title="{l s='Yes'}" /></label> <input type="radio" name="{$key}" id="{$key}_on" value="1" {if $field['value']} checked="checked"{/if}{if isset($field['js']['on'])} {$field['js']['on']}{/if}/> <label class="t" for="{$key}_on"> {l s='Yes'}</label> <label class="t" for="{$key}_off"><img src="../img/admin/disabled.gif" alt="{l s='No'}" title="{l s='No'}" style="margin-left: 10px;" /></label> <input type="radio" name="{$key}" id="{$key}_off" value="0" {if !$field['value']} checked="checked"{/if}{if isset($field['js']['off'])} {$field['js']['off']}{/if}/> <label class="t" for="{$key}_off"> {l s='No'}</label> {elseif $field['type'] == 'radio'} {foreach $field['choices'] AS $k => $v} <input type="radio" name="{$key}" id="{$key}_{$k}" value="{$k}"{if $k == $field['value']} checked="checked"{/if}{if isset($field['js'][$k])} {$field['js'][$k]}{/if}/> <label class="t" for="{$key}_{$k}"> {$v}</label><br /> {/foreach} <br /> {elseif $field['type'] == 'checkbox'} {foreach $field['choices'] AS $k => $v} {assign var=arrayOfValues value=","|explode:$field['value']} <input type="checkbox" name="{$key}[]" id="{$key}{$k}_on" value="{$k|intval}"{if in_array ($k, $arrayOfValues)} checked="checked"{/if}{if isset($field['js'][$k])} {$field['js'][$k]}{/if}/> <label class="t" for="{$key}{$k}_on"> {$v}</label><br /> {/foreach} <br /> {elseif $field['type'] == 'text'} <input type="{$field['type']}"{if isset($field['id'])} id="{$field['id']}"{/if} size="{if isset($field['size'])}{$field['size']|intval}{else}5{/if}" name="{$key}" value="{$field['value']|escape:'htmlall':'UTF-8'}" {if isset($field['autocomplete']) && !$field['autocomplete']}autocomplete="off"{/if}/> {if isset($field['suffix'])} {$field['suffix']|strval}{/if} {elseif $field['type'] == 'password'} <input type="{$field['type']}"{if isset($field['id'])} id="{$field['id']}"{/if} size="{if isset($field['size'])}{$field['size']|intval}{else}5{/if}" name="{$key}" value="" {if isset($field['autocomplete']) && !$field['autocomplete']}autocomplete="off"{/if} /> {if isset($field['suffix'])} {$field['suffix']|strval}{/if} {elseif $field['type'] == 'textarea'} <textarea name={$key} cols="{$field['cols']}" rows="{$field['rows']}">{$field['value']|escape:'htmlall':'UTF-8'}</textarea> {elseif $field['type'] == 'file'} {if isset($field['thumb']) && $field['thumb']} <img src="{$field['thumb']}" alt="{$field['title']}" title="{$field['title']}" /><br /> {/if} <input type="file" name="{$key}" /> {elseif $field['type'] == 'price'} {$currency_left_sign}<input type="text" size="{if isset($field['size'])}{$field['size']|intval}{else}5{/if}" name="{$key}" value="{$field['value']|escape:'htmlall':'UTF-8'}" />{$currency_right_sign} {l s='(tax excl.)'} {elseif $field['type'] == 'textLang' || $field['type'] == 'textareaLang' || $field['type'] == 'selectLang'} {if $field['type'] == 'textLang'} {foreach $field['languages'] AS $id_lang => $value} <div id="{$key}_{$id_lang}" style="margin-bottom:8px; display: {if $id_lang == $current_id_lang}block{else}none{/if}; float: left; vertical-align: top;"> <input type="text" size="{if isset($field['size'])}{$field['size']|intval}{else}5{/if}" name="{$key}_{$id_lang}" value="{$value|escape:'htmlall':'UTF-8'}" /> </div> {/foreach} {elseif $field['type'] == 'textareaLang'} {foreach $field['languages'] AS $id_lang => $value} <div id="{$key}_{$id_lang}" style="display: {if $id_lang == $current_id_lang}block{else}none{/if}; float: left;"> <textarea rows="{$field['rows']}" cols="{$field['cols']|intval}" name="{$key}_{$id_lang}">{$value|replace:'\r\n':"\n"}</textarea> </div> {/foreach} {elseif $field['type'] == 'selectLang'} {foreach $languages as $language} <div id="{$key}_{$language.id_lang}" style="margin-bottom:8px; display: {if $language.id_lang == $current_id_lang}block{else}none{/if}; float: left; vertical-align: top;"> <select name="{$key}_{$language.iso_code|upper}"> {foreach $field['list'] AS $k => $v} <option value="{if isset($v.cast)}{$v.cast[$v[$field.identifier]]}{else}{$v[$field.identifier]}{/if}" {if $field['value'][$language.id_lang] == $v['name']} selected="selected"{/if}> {$v['name']} </option> {/foreach} </select> </div> {/foreach} {/if} {if count($languages) > 1} <div class="displayed_flag"> <img src="../img/l/{$current_id_lang}.jpg" class="pointer" id="language_current_{$key}" onclick="toggleLanguageFlags(this);" /> </div> <div id="languages_{$key}" class="language_flags"> {l s='Choose language:'}<br /><br /> {foreach $languages as $language} <img src="../img/l/{$language.id_lang}.jpg" class="pointer" alt="{$language.name}" title="{$language.name}" onclick="changeLanguage('{$key}', '{if isset($custom_key)}{$custom_key}{else}{$key}{/if}', {$language.id_lang}, '{$language.iso_code}');" /> {/foreach} </div> {/if} <br style="clear:both"> {/if} {if isset($field['required']) && $field['required'] && $field['type'] != 'radio'} <sup>*</sup> {/if} {if isset($field['hint'])}<span class="hint" name="help_box">{$field['hint']}<span class="hint-pointer"> </span></span>{/if} {/block}{* end block input *} Il s'agit en fait d'une partie du template d'origine. Les modifications se trouvent là : {elseif $field['type'] == 'checkbox'} {foreach $field['choices'] AS $k => $v} {assign var=arrayOfValues value=","|explode:$field['value']} <input type="checkbox" name="{$key}[]" id="{$key}{$k}_on" value="{$k|intval}"{if in_array ($k, $arrayOfValues)} checked="checked"{/if}{if isset($field['js'][$k])} {$field['js'][$k]}{/if}/> <label class="t" for="{$key}{$k}_on"> {$v}</label><br /> {/foreach} <br /> 4. Override de beforeUpdateOptions () Dans mon controlleur admin du module, j'ajoute ca : public function beforeUpdateOptions() { foreach ($this->fields_options as $optionsGroup) { foreach ($optionsGroup['fields'] as $fieldName => $fieldConf) { if ( is_array (Tools::getValue ($fieldName)) ) $_POST[$fieldName] = implode (',', Tools::getValue ($fieldName)); } } } 5. la fonction getShops () C'est simplement une fonction qui me permet de placer mes valeurs correctement dans un tableau pour pouvoir générer les checkbox. La forme c'est : - La valeur (ie. value) du checkbox correspond à un index de tableau (c'est l'id de mon shop dans mon cas) - Le texte écrit en face de ma case-à-cocher, c'est la valeur en face de l'index Exemple avec mes shops, je dois générer un array comme suit : array ( [id_shop'] => ['nom_shop'], [id_shop'] => ['nom_shop'], [id_shop'] => ['nom_shop'], [id_shop'] => ['nom_shop'], ...etc ) Link to comment Share on other sites More sharing options...
kittypaw Posted July 26, 2012 Share Posted July 26, 2012 Salut, Super intéressant d'enfin trouver des ressources sur Prestashop 1.5. Je cherche à savoir comment override un tpl dans l'administration. Par exemple, le fichier admin/themes/default/template/controllers/products/prices.tpl Je vois que tu passes par un module pour override les tpl. Est-ce obligatoire ? Existe-t-il une autre manière ? Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 26, 2012 Author Share Posted July 26, 2012 Ah...ben enfin une réponse ! Je ne sais pas si ce que je dis parait évident ou au contraire si c'est du chinois, mais j'espérais susciter un poil plus d'enthousiasme ;-) Donc, pour surcharger le product.tpl d'admin, je passerais effectivement par un module. On a malheureusement pas la main via le répertoire d'override ou le répertoire de thème. Ceci dit, il est peut être possible de créer l'override de l'AdminProducts via le répertoire d'override classique et de surcharger l'appel à Smarty en lui passant ton propre template (.tpl). Ceci dit, tu seras obligé de stocker ton template dans un répertoire 'admin' (ou autre) du 'thèmes' ce qui n'est pas forcément joli joli. J'ai pas testé hein. L'autre option (pareil, pas testée non plus) à laquelle je pense c'est donc effectivement créer un module : - qui override l'AdminProducts (ie. tu créés un AdminProducts.php dans une archi nom_module>controllers>admin>AdminProducts.php) - change la référence à AdminProducts natif vers l'AdminProducts de ton module (ca c'est jouable via des objets natifs, je pourrais te filer le code stu veux) - l'AdminProducts étends simplement la classe AdminProducts de base mais elle reste vide - tu re-créés l'archi views>templates>admin>products>prices.tpl dans ton module C'est à tester, je l'ai pas fait (je ferais ca ce soir pour voir si c'est viable...). Et si ca roule, je posterai un truc ! :-) Link to comment Share on other sites More sharing options...
kittypaw Posted July 26, 2012 Share Posted July 26, 2012 Merci beaucoup. J'attends avec impatience tes retours la dessus car je suis très curieux des possibilités d'override sur la version 1.5 de Prestashop. Par contre, sous cette même version, je viens de voir qu'il était possible de créer (comme dans le thème du site) un thème pour l'admin, de changer dans "Mes préférences" le thème et ainsi pouvoir modifier comme on le souhaite les tpl. J'imagine que c'est une solution. Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 26, 2012 Author Share Posted July 26, 2012 (edited) Ah yes, bien vu ! A tester aussi....mais ca me semble être la bonne voie, mes 2 pistes sont quand même compliquées, trop compliquée vu les possibilités que la 1.5 permet, je pense. Edited July 26, 2012 by Luc Lérot Freelance (see edit history) Link to comment Share on other sites More sharing options...
Ninja Of Web Posted July 26, 2012 Share Posted July 26, 2012 Bonjour, Il est normalement possible de définir un dossier d'override pour les templates d'admin. Voir révision (actuellement sur le SVN) : 16288 et la methode createTemplate de la classe Helper. Cordialement, Loic. 1 Link to comment Share on other sites More sharing options...
kittypaw Posted July 26, 2012 Share Posted July 26, 2012 Effectivement dans le svn on peut voir qu'il existe un dossier templates dans override/controllers/admin A tester donc... Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 26, 2012 Author Share Posted July 26, 2012 Loïc ! Mister Ninja, vous ici ?! :-) Bon, je me suis branché sur le SVN officiel et effectivement il y a ce merveilleux dossier 'templates' dans overrides>controllers>admin. J'update tout de suite et je teste. Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 26, 2012 Author Share Posted July 26, 2012 (edited) Bon bon bon, j'ai donc testé la chose suivante : 1. Post-update du SVN 1.5.x, j'ai créé le template override /override/controllers/admin/templates/products/helpers/form/form.tpl. Il est vide, je devrais donc avoir une page blanche lorsque je clique sur mon menu Produits. Malheureusement, rien ne se passe, le template 'de base' reste celui utilisé. Mais, dans la classe Helper (l. 94 - function createTemplate ()) le code teste si 1. le template de base existe puis 2. s'il n'existe pas il cherche dans l'architecture des overrides de template. ==>Il me semble que c'est plutot l'inverse qu'il faut faire : 1. je regarde si un override existe, et 2. s'il n'y a pas d'override, je prend le template de base. J'ai donc inversé les tests (if/elseif) et là ca tourne : c'est bien mon template override qui est pris en compte à la place du template de base. 2. Post update du SVN 1.5.x, j'ai créé le template override /override/controllers/admin/templates/products/prices.tpl mais là rien à faire, ca tourne pas. Je pense que le prices.tpl n'est tout simplement pas appelé par le Helper::createTemplate () mais qu'il s'agit d'une inclusion Smarty, (cf. plus bas, j'ai trouvé la solution) A creuser mais pour le moment, je vais sortir mon chien... Edited July 26, 2012 by Luc Lérot Freelance (see edit history) Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 26, 2012 Author Share Posted July 26, 2012 Bon ca y est, j'override mon prices.tpl en utilisant la version native de Prestashop 1.5.x... enfin, en utilisant le répertoire /override/controllers/admin/templates Ceci dit, je retrouve à nouveau un test qui me semble être inversé en terme de recherche de template : classes/controller/AdminController.php (l.2628) public function createTemplate($tpl_name) { // Use override tpl if it exists // If view access is denied, we want to use the default template that will be used to display an error if ($this->viewAccess() && $this->override_folder) { if (file_exists($this->context->smarty->getTemplateDir(0).'controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$tpl_name)) return $this->context->smarty->createTemplate('controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$tpl_name, $this->context->smarty); if (file_exists($this->context->smarty->getTemplateDir(1).DIRECTORY_SEPARATOR.$this->override_folder.$tpl_name)) return $this->context->smarty->createTemplate($this->override_folder.$tpl_name, $this->context->smarty); } return $this->context->smarty->createTemplate($this->context->smarty->getTemplateDir(0).$tpl_name, $this->context->smarty); } Là, le code regarde si le template prices.tpl (par exemple) existe dans : [...]prestashop-1.5.x\admin-dev/themes/default\template\controllers\products/prices.tpl et s'il ne le trouve pas, il cherche dans : [...]prestashop-1.5.x/override/controllers\admin\templates\\products/prices.tpl Mais il me semble bien que c'est l'inverse qu'il faudrait faire. Donc j'ai inversé le test et ca tourne : mon override est bien le template qui est pris pour l'affichage. KittyPaw, je te conseille donc - d'updater le SVN pour bénéficier du top-moumoutte répertoire templates dans les overrides - de mettre ton template prices.tpl dans /override/controllers/admin/templates/products/prices.tpl - d'overrider AdminController.php proprement en reprenant la fonction createTemplate() et en inversant les 2 tests (if) qui sont faits (cf. bout de code ci-dessus) Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 26, 2012 Author Share Posted July 26, 2012 Bon, vite fait, je confirme qu'en utilisant un override propre de AdminController.php, ca roule (code testé ci-dessous) : /override/classes/controller/AdminController.php : class AdminController extends AdminControllerCore { public function createTemplate($tpl_name) { // Use override tpl if it exists // If view access is denied, we want to use the default template that will be used to display an error if ($this->viewAccess() && $this->override_folder) { if (file_exists($this->context->smarty->getTemplateDir(1).DIRECTORY_SEPARATOR.$this->override_folder.$tpl_name)) return $this->context->smarty->createTemplate($this->override_folder.$tpl_name, $this->context->smarty); if (file_exists($this->context->smarty->getTemplateDir(0).'controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$tpl_name)) return $this->context->smarty->createTemplate('controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$tpl_name, $this->context->smarty); } return $this->context->smarty->createTemplate($this->context->smarty->getTemplateDir(0).$tpl_name, $this->context->smarty); } } Link to comment Share on other sites More sharing options...
Damien Metzger Posted July 27, 2012 Share Posted July 27, 2012 Bonjour, Merci d'avoir pris le temps de tester cette fonctionnalité "technique", ce type de retour nous est précieux ! En effet le code original avait pour but de pouvoir ajouter dans le dossier override de nouveaux templates pour des onglets nouveaux ou existants, mais l'utilisation peut être largement plus intéressante en permettant également la surcharge des templates existants ! Cordialement, Link to comment Share on other sites More sharing options...
Ninja Of Web Posted July 27, 2012 Share Posted July 27, 2012 Merci de nous avoir remonté ces petites modifications Elle sont pertinantes ! Le SVN est à jour avec ces modifications Cordialement, Loic. Link to comment Share on other sites More sharing options...
kittypaw Posted July 27, 2012 Share Posted July 27, 2012 Bien joué pour ces changements Luc et d'avoir pris le temps de tester tout ça Et pour continuer dans l'override, je suis en train de regarder si on peut override les js du dossier js à la base de prestashop. Une idée ? Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 27, 2012 Author Share Posted July 27, 2012 Ah mais de rien les copains... je reste un presta-fan même si j'ai posté quelques remarques sur la nouvelle architecture MVC ;-) Bon mais alors du coup, je suis un peu paumé moi maintenant, entre la forge, le forum, le topic et le reste. Est-ce que quelqu'un de la team pourrait faire une petit récap ? - Les checkbox dans les helpers du BO vont être ajoutés ? - Les 'if/elsif' des fonctions createTemplate () vont-ils être inversés ? Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 27, 2012 Author Share Posted July 27, 2012 (edited) je suis en train de regarder si on peut override les js du dossier js à la base de prestashop. Une idée ? Hmmmm overrider les JS hu ? Une approche que j'aurais perso, ce serait : - Créer un module - écrire mon JS dans le .js du module - hooker le module sur le backOfficeHeader (ou nom équivalent, j'ai pas de bd sous la main pour vérifier le nom) - insérer mon fichier JS via le hookBackOfficeHeader () de mon module (via addJS ()) Mais ca, c'est la solution "facile" hein, j'ai pas vraiment fait le tour de toutes les possibilités d'override natives de la 1.5. Peut être que la team nous a concocté un truc... Edited July 27, 2012 by Luc Lérot Freelance (see edit history) Link to comment Share on other sites More sharing options...
kittypaw Posted July 27, 2012 Share Posted July 27, 2012 C'est vrai que la c'est pas évident. Le truc que je voulais faire c'est simplement ajouter des fonctions dans price.js du dossier js. Je cherche la petite bête mais c'est vrai que s'il existe une méthode propre pour éviter de tout perdre lors d'une mise à jour, ça m'arrange Merci pour l'astuce en tout cas. Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 27, 2012 Author Share Posted July 27, 2012 Bah en utilisant un module justement, tu ne perdras rien lors d'une màj...elle est là l'astuce ;-) Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 27, 2012 Author Share Posted July 27, 2012 (edited) Bon, je réponds quand même pour garder le track. Donc, le SVN a bien été mis à jour au niveau des overrides de templates via le répertoire override/controllers/admin/templates. Il est donc désormais possible, en natif, d'overrider les templates BO (helpes, controllers...etc). Par contre, rien vu concernant mes checkbox dans les helpers BO Options.tpl. Edited July 27, 2012 by Luc Lérot Freelance (see edit history) Link to comment Share on other sites More sharing options...
kittypaw Posted July 29, 2012 Share Posted July 29, 2012 J'ai fait les tests tout fonctionne correctement. Seul bémol pour moi, es traductions sautent :s Lorsque je me rend dans l'administration afin de traduire les textes, que j'effectue mes changements et que j'enregistre, non seulement ça ne marche pas mais en plus d'autres traductions sautent. Quelques textes repassent en anglais. Est-ce pareil pour vous ? ou pour toi Luc ? Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted July 29, 2012 Author Share Posted July 29, 2012 Ouais, les trads c'est pas trop ca effectivement : --> BUG déjà levé sur les traductions de .tpl de module sur thème custom : http://forge.prestashop.com/browse/PSCFV-3305 --> Et en 1.4, j'étais déjà embêté, je m'en étais sorti comme ca (cf. 4. Astuces) : http://www.prestashop.com/forums/topic/180312-astuce-overrideextends-dune-admintab-via-un-module/ Link to comment Share on other sites More sharing options...
kittypaw Posted July 30, 2012 Share Posted July 30, 2012 Merci pour l'astuce Link to comment Share on other sites More sharing options...
Ninja Of Web Posted August 1, 2012 Share Posted August 1, 2012 Bonjour, Pour info, je viens de regarder pourquoi le code sur les Checkbox était en commentaire et il n'y a aucune raison particulière. Je viens de dé-commenté ce code. Cordialement, Loïc. Link to comment Share on other sites More sharing options...
kittypaw Posted December 12, 2012 Share Posted December 12, 2012 Je reviens sur ton tout premier point Luc, l'override d'un helper. En effet, j'aimererai overrider admin/default/template/helpers/form/form.tpl Seulement, si j'essaye de passer par override/controllers/admin/templates mais rien à faire. Une idée ? J'aimerai éviter de passer par un module car c'est vraiment léger le changement que j'essaye de faire. Link to comment Share on other sites More sharing options...
Ninja Of Web Posted December 12, 2012 Share Posted December 12, 2012 Je reviens sur ton tout premier point Luc, l'override d'un helper. En effet, j'aimererai overrider admin/default/template/helpers/form/form.tpl Seulement, si j'essaye de passer par override/controllers/admin/templates mais rien à faire. Une idée ? J'aimerai éviter de passer par un module car c'est vraiment léger le changement que j'essaye de faire. C'est normal car ce dossier sert à overrider uniquement le dossier : admin/default/template/controller/ Il va falloir que tu override la classe suivante : classes/controller/AdminController.php et sa méthode : renderForm() afin de changer le chemin du form.tpl... Loic. Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted December 13, 2012 Author Share Posted December 13, 2012 True !! (p'tain, sont vraiment rapides ces Ninjas... :-) ) Perso, j'ai eu à faire ca pour ré-écrire la gestion des scènes Prestashop 1.5. J'ai overridé le renderForm () de l'admin controller correspondant (AdminScenesController) en utilisant le $this->base_tpl_form. Ceci dit, je voulais utiliser mon propre chemin de stockage du Helper form (_PS_MODULE_DIR_.'nom_module/override/controllers/admin/templates/scenes/helpers/form/form.tpl' pour rester cohérent) et j'ai aussi du overrider la fonction createTemplate () de la classe Helper. Hope that helps. L. Link to comment Share on other sites More sharing options...
kittypaw Posted December 13, 2012 Share Posted December 13, 2012 C'est exactement ce que je voulais savoir. Merci Link to comment Share on other sites More sharing options...
kittypaw Posted December 13, 2012 Share Posted December 13, 2012 J'ai réussi à override le form.tpl en faisant pointer $this->base_tpl_form vers mon nouveau form.tpl overridé et en mettant $helper->base_folder = '' Du coup ça fonctionne par contre mes override de template ne fonctionne plus :s Une idée ? Link to comment Share on other sites More sharing options...
Luc Lérot Freelance Posted December 13, 2012 Author Share Posted December 13, 2012 (edited) Ouh !!! le base_folder, j'y toucherai pas perso. Moi ce que j'ai fait dans mon override de la classe Helper, c'est ca : public function createTemplate($tpl_name) { if ($this->override_folder) { //Luc L. : if $tpl_name is made of a directory path + a file name AND if it exists, use it in priority // (required for use of template overrides dynamically, ie. without manually copying templates within /override directory) if (file_exists($tpl_name)) $override_tpl_path = $tpl_name; //Luc L. END else if ($this->context->controller instanceof ModuleAdminController) $override_tpl_path = $this->context->controller->getTemplatePath().$this->override_folder.$this->base_folder.$tpl_name; else if ($this->module) $override_tpl_path = _PS_MODULE_DIR_.$this->module->name.'/views/templates/admin/_configure/'.$this->override_folder.$this->base_folder.$tpl_name; else { if (file_exists($this->context->smarty->getTemplateDir(1).DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name)) $override_tpl_path = $this->context->smarty->getTemplateDir(1).DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name; else if (file_exists($this->context->smarty->getTemplateDir(0).DIRECTORY_SEPARATOR.'controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name)) $override_tpl_path = $this->context->smarty->getTemplateDir(0).'controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name; } } else if ($this->module) $override_tpl_path = _PS_MODULE_DIR_.$this->module->name.'/views/templates/admin/_configure/'.$this->base_folder.$tpl_name; if (isset($override_tpl_path) && file_exists($override_tpl_path)) return $this->context->smarty->createTemplate($override_tpl_path, $this->context->smarty); else return $this->context->smarty->createTemplate($this->base_folder.$tpl_name, $this->context->smarty); } Alors, JE SAIS que c'est pas joli-joli mais j'avais pas besoin de plus que ca à l'époque. Edited December 13, 2012 by Luc Lérot Freelance (see edit history) Link to comment Share on other sites More sharing options...
kittypaw Posted December 13, 2012 Share Posted December 13, 2012 Cela devrait me suffir c'est gentil. Au début jme disais pourquoi ne pas overrider directement Helper mais effectivement si j'override renderForm dans AdminController et que j'ajoute ton petit bout de code dans la classe Helper, cela devrait le faire. Encore merci Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now