belew Posted September 19, 2012 Share Posted September 19, 2012 Je suis en train de creer un module et j'ai une question sur la méthode renderform() qui sert a mettre en place le formulaire a l'aide d'un helper... Je ne trouve pas comment affecter une value a un element de formulaire : $this->fields_form = array( 'tinymce' => true, 'legend' => array( 'title' => $this->l('lorem'), 'image' => '../img/admin/lorem.gif' ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('lorem:'), 'name' => 'lorem', 'size' => 40, 'value'=> "testtestest" // ne fonctionne pas ) ); Link to comment Share on other sites More sharing options...
coeos.pro Posted September 19, 2012 Share Posted September 19, 2012 as tu regardé certains modules comme editorial ? Link to comment Share on other sites More sharing options...
J. Danse Posted September 19, 2012 Share Posted September 19, 2012 (edited) Bonjour, Ce n'est pas possible de faire cela. Du moins comme ça (il faut modifier le tpl ou forcer la valeur autrement). Edit Je venais mettre comment faire, mais Loïc l'a fait avant, Edited September 19, 2012 by J. Danse (see edit history) Link to comment Share on other sites More sharing options...
Ninja Of Web Posted September 19, 2012 Share Posted September 19, 2012 Bonjour, Si tu veux définir une valeur par défaut a ton champ, voici la variable à utiliser : $this->fields_value = array('lorem' => "testtestest"); Tu peut voir comment cela est utilisé dans "controllers/admin/AdminGendersController.php" Cordialement, Loïc. Link to comment Share on other sites More sharing options...
belew Posted September 19, 2012 Author Share Posted September 19, 2012 Parfait merci ! ++ Link to comment Share on other sites More sharing options...
belew Posted September 19, 2012 Author Share Posted September 19, 2012 Parfait merci voila qui va permettre a J. Danse d'améliorer son canvas ++ Link to comment Share on other sites More sharing options...
belew Posted September 20, 2012 Author Share Posted September 20, 2012 Concernant la mise en place d'un input avec les traductions comment fait t'on je ne trouve pas l'exemple dans AdminGenderController.php ? ++ 1 Link to comment Share on other sites More sharing options...
J. Danse Posted September 20, 2012 Share Posted September 20, 2012 Pour forcer la valeur ou pour l'afficher ? (Tel que le nom du produit, qui est en plusieurs langues) Link to comment Share on other sites More sharing options...
belew Posted September 20, 2012 Author Share Posted September 20, 2012 Pour l'afficher dans le input avec la méthode $this->fields_value = array('lorem' => "testtestest"); Ci dessus ++ Link to comment Share on other sites More sharing options...
Ninja Of Web Posted September 21, 2012 Share Posted September 21, 2012 Bonjour, Il faudra utiliser un code de ce type : $this->fields_value = array( 'nom_du_champ' => array( 1 => 'ma traduction anglaise', 2 => 'ma traduction française', 3 => 'ma traduction allemande', .... ) ); Cordialement, Loïc. Link to comment Share on other sites More sharing options...
J. Danse Posted September 21, 2012 Share Posted September 21, 2012 Oops ! J'avais oublié de répondre ! Et pour remplir le tableau, on peut utiliser la méthode statique Language::getLanguages(), pour être sur, d'ailleurs ! Link to comment Share on other sites More sharing options...
coeos.pro Posted September 21, 2012 Share Posted September 21, 2012 attention le Français et l'Allemand ont été intervertit entre la 1.4 et la 1.5, 1.4 : 1.5: Link to comment Share on other sites More sharing options...
belew Posted September 24, 2012 Author Share Posted September 24, 2012 Bonjour, Merci pour les réponses, il faut préciser toutefois que les langages ne sont pas activé par défault (va savoir pourquoi). Une autre question : J'aimerai bien gerer l'upload d'image or je ne comprend pas comment est utilisé celui ci dans le cadre de l'utilisation des helpers views Il y a bien la méthode de l'adminController cependant elle ne me renvoi rien protected function postImage($id) { if (isset($this->fieldImageSettings['name']) && isset($this->fieldImageSettings['dir'])) return $this->uploadImage($id, $this->fieldImageSettings['name'], $this->fieldImageSettings['dir'].'/'); elseif (!empty($this->fieldImageSettings)) foreach ($this->fieldImageSettings as $image) if (isset($image['name']) && isset($image['dir'])) $this->uploadImage($id, $image['name'], $image['dir'].'/'); return !count($this->errors) ? true : false; } protected function uploadImage($id, $name, $dir, $ext = false, $width = null, $height = null) { if (isset($_FILES[$name]['tmp_name']) && !empty($_FILES[$name]['tmp_name'])) { // Delete old image if (Validate::isLoadedObject($object = $this->loadObject())) $object->deleteImage(); else return false; // Check image validity $max_size = isset($this->max_image_size) ? $this->max_image_size : 0; if ($error = ImageManager::validateUpload($_FILES[$name], Tools::getMaxUploadSize($max_size))) $this->errors[] = $error; $tmp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS'); if (!$tmp_name) return false; if (!move_uploaded_file($_FILES[$name]['tmp_name'], $tmp_name)) return false; // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($tmp_name)) $this->errors[] = Tools::displayError('This image cannot be loaded due to memory limit restrictions, please increase your memory_limit value on your server configuration.'); // Copy new image if (empty($this->errors) && !ImageManager::resize($tmp_name, _PS_IMG_DIR_.$dir.$id.'.'.$this->imageType, (int)$width, (int)$height, ($ext ? $ext : $this->imageType))) $this->errors[] = Tools::displayError('An error occurred while uploading image.'); if (count($this->errors)) return false; if ($this->afterImageUpload()) { unlink($tmp_name); return true; } return false; } return true; } Link to comment Share on other sites More sharing options...
J. Danse Posted September 24, 2012 Share Posted September 24, 2012 Par défaut, les langages ne sont pas activés pour une simple et bonne raison: si il est utile que le site soit en plusieurs langues, il ne faut pas oublier que cela implique un support client dans ces langues, également... C'est parfois donc préférable, Pour l'image, il faut voir le controller "Carrier" de l'admin, par exemple. Au niveau du constructeur, tu as ceci: $this->fieldImageSettings = array( 'name' => 'logo', 'dir' => 's' ); Au niveau du renderForm(), ceci (dans le tableau d'inputs): array( 'type' => 'file', 'label' => $this->l('Logo:'), 'name' => 'logo', 'desc' => $this->l('Upload a logo from your computer').' (.gif, .jpg, .jpeg '.$this->l('or').' .png)' ), Et dans le postProcess, ceci: $this->postImage($new_carrier->id); Et c'est tout. 1 Link to comment Share on other sites More sharing options...
belew Posted September 24, 2012 Author Share Posted September 24, 2012 Merci J.Danse, pourrait tu m'apporter des précisions sur l'utilisation des actions edit, delete ... Le canvas ne permet pas de voir l'utilisation du systeme Merci d'avance ++ Link to comment Share on other sites More sharing options...
J. Danse Posted September 24, 2012 Share Posted September 24, 2012 J'ai pris note de ce que je dois encore intégrer dans le modules (dont des commentaires plus éloquent ! ) Tu veux parler de ceci ? $this->addRowAction('edit'); $this->addRowAction('delete'); Il s'agit des boutons d'actions que tu peux voir en vis-à-vis de chaque ligne lorsque tu regardes la liste. Ça permet par exemple de permettre la duplication d'un objet de la liste. Il existe 4 valeurs: view : donne la possibilité de voir plus de détails sur l'objet edit : donne la possibilité d'éditer l'objet delete ; donne la possibilité de supprimer l'objet duplicate : donne la possibilité de dupliquer l'objet (implémenter les méthodes correspondantes [processDuplicate]) Link to comment Share on other sites More sharing options...
belew Posted September 24, 2012 Author Share Posted September 24, 2012 En faite la ou je n'arrive pas a trouver le bon fonctionnement c'est au test de l'action je m'explique : Pour le delete : if($this->action=='delete') Cela fonctionne... Cependant pour l'édition if ($this->action=='edit') Le code n'est jamais executé a l'interieur j'ai daillé pour etre sur comme ceci : Tools:('toto'); Mais rien ne se passe ? Une solution propre sinon je teste dans un champs hidden si il y a un ID déjà présent ... ++ Link to comment Share on other sites More sharing options...
J. Danse Posted September 24, 2012 Share Posted September 24, 2012 Alors, il me semble que le test doit être: if ($this->action=='save') Mais je peux me tromper, évidemment ! Link to comment Share on other sites More sharing options...
belew Posted September 24, 2012 Author Share Posted September 24, 2012 Cela ne fonctionne que pour l'ajout J'essaye avec ca mais cela ne marche que lorque je clique sur le bouton d'édition : if (Tools::isSubmit('update'.$this->table) Toujours pas d'idées ? ++ Link to comment Share on other sites More sharing options...
J. Danse Posted September 24, 2012 Share Posted September 24, 2012 A quel moment, en fait ? Link to comment Share on other sites More sharing options...
belew Posted September 25, 2012 Author Share Posted September 25, 2012 (edited) Un bout de code est toujours plus évocateur... public function postProcess() { $languages=Language::getLanguages(); //add object if (Tools::isSubmit('submitAdd'.$this->table) && (Tools::isSubmit('mon_id'))) { } // Update object if (Tools::isSubmit('update'.$this->table) && (Tools::isSubmit('mon_id'))) { // ne passe jamais ici } //delete object if($this->action=='delete'){ } Edited September 25, 2012 by belew (see edit history) Link to comment Share on other sites More sharing options...
J. Danse Posted September 25, 2012 Share Posted September 25, 2012 A première lecture, le submitAdd que tu as là est en réalité un update, en fait. Pourquoi ? Parce qu'il y a un ID dans les values, on dirait. Cela dit, le isSubmit n'est valable que pour les champs Submit. La méthode Tools::getValue() est utilisée, pour les champs. Link to comment Share on other sites More sharing options...
belew Posted September 25, 2012 Author Share Posted September 25, 2012 En faite, j'ai fait fausse route avec mon id Le test if (Tools::isSubmit('submitAdd'.$this->table) Suffit a lui seul a gerer ajout et mise a jour de l'objet... PS: Pour ceux qui souhaiterai gerer les activations et les suppression Activation : if($this->action=='status') Suppression : if($this->action=='delete') Merci J.Danse ++ 1 Link to comment Share on other sites More sharing options...
Matt75 Posted September 26, 2012 Share Posted September 26, 2012 Bonjour, Moi j'ai une question concernant la pagination de l'affichage dans les modules. Je n'ai pas trouvé de méthodes génériques pour ça... J'ai regardé le module commentaires sur les produits, il ne gère visiblement pas la pagination... Embêtant car lorsqu'un produit à une cinquantaine de commentaires, c'est loin d'être agréable ! Bref je n'ai pas trouvé d'exemple pour faire ça et avant de me lancer dans la création de methodes perso, j'aimerai savoir si quelqu'un utilise la pagination dans ses modules et si oui comment. Cordialement Link to comment Share on other sites More sharing options...
Matt75 Posted September 28, 2012 Share Posted September 28, 2012 Bonjour, Personne n'utilise de pagination ? Cordialement Link to comment Share on other sites More sharing options...
J. Danse Posted September 28, 2012 Share Posted September 28, 2012 Si, en fait, si, moi. Mais, heu, c'est quoi la question en fait ? Perso, je me base sur la page catégorie. Link to comment Share on other sites More sharing options...
Matt75 Posted September 28, 2012 Share Posted September 28, 2012 Bonjour, Je souhaite afficher le contenu d'une table sur une page dans un module, mais la table étant conséquente, je souhaites pouvoir paginer l'affichage. Je ne trouve pas de méthodes génériques dans les controleurs modules ou front... Sur les autres CMS on a des méthodes génériques pour la pagination, le tri des résultats etc... Ma question c'est donc comment faites vous de votre côté pour utiliser la pagination ? Avez vous écrit vos propres méthodes ? Ou y a t'il des méthodes que je n'ai pas vu ? Cordialement Link to comment Share on other sites More sharing options...
Matt75 Posted October 1, 2012 Share Posted October 1, 2012 Bonjour, Pas d'autres infos concernant la pagination ? Il faut donc se créer ses propres méthodes ? Sinon lors de l'installation de mon module, un nouvel onglet est ajouté dans le back office, comment faire pour le créer en prenant en compte la langue ? Car actuellement il faut que je l'édite dans le back office pour le traduire dans chaque langue. Cordialement Link to comment Share on other sites More sharing options...
Matt75 Posted October 2, 2012 Share Posted October 2, 2012 Bonjour, Personne ? Cordialement Link to comment Share on other sites More sharing options...
belew Posted October 2, 2012 Author Share Posted October 2, 2012 Bonjour as tu regardé comment fonctionné la méthode de pagination pour les catégories comme mentionné plus haut pas J.Danse ? Dans le frontController : public function pagination($nbProducts = 10) { if (!self::$initialized) $this->init(); elseif (!$this->context) $this->context = Context::getContext(); $nArray = (int)Configuration::get('PS_PRODUCTS_PER_PAGE') != 10 ? array((int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 10, 20, 50) : array(10, 20, 50); // Clean duplicate values $nArray = array_unique($nArray); asort($nArray); $this->n = abs((int)(Tools::getValue('n', ((isset($this->context->cookie->nb_item_per_page) && $this->context->cookie->nb_item_per_page >= 10) ? $this->context->cookie->nb_item_per_page : (int)Configuration::get('PS_PRODUCTS_PER_PAGE'))))); $this->p = abs((int)Tools::getValue('p', 1)); if (!is_numeric(Tools::getValue('p', 1)) || Tools::getValue('p', 1) < 0) { $this->redirect_after = '404'; $this->redirect(); } $current_url = tools::htmlentitiesUTF8($_SERVER['REQUEST_URI']); //delete parameter page $current_url = preg_replace('/(\?)?(&)?p=\d+/', '$1', $current_url); $range = 2; /* how many pages around page selected */ if ($this->p < 0) $this->p = 0; if (isset($this->context->cookie->nb_item_per_page) && $this->n != $this->context->cookie->nb_item_per_page && in_array($this->n, $nArray)) $this->context->cookie->nb_item_per_page = $this->n; if ($this->p > (($nbProducts / $this->n) + 1)) { $this->redirect_after = preg_replace('/[&?]p=\d+/', '', $_SERVER['REQUEST_URI']); $this->redirect(); } $pages_nb = ceil($nbProducts / (int)$this->n); $start = (int)($this->p - $range); if ($start < 1) $start = 1; $stop = (int)($this->p + $range); if ($stop > $pages_nb) $stop = (int)$pages_nb; $this->context->smarty->assign('nb_products', $nbProducts); $pagination_infos = array( 'products_per_page' => (int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 'pages_nb' => $pages_nb, 'p' => $this->p, 'n' => $this->n, 'nArray' => $nArray, 'range' => $range, 'start' => $start, 'stop' => $stop, 'current_url' => $current_url ); $this->context->smarty->assign($pagination_infos); } Dans catégory controller : $this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts" Link to comment Share on other sites More sharing options...
belew Posted October 2, 2012 Author Share Posted October 2, 2012 (edited) De mon coté j'ai une question : Comment peut on assigner un .tpl a un controller d'administration de module ? Le canvas d'utilise que les view helper ... ++ Probleme résolu : dans fonction -> public function renderList() { $lists= "lorem ipsum"; return $lists; } Edited October 2, 2012 by belew (see edit history) Link to comment Share on other sites More sharing options...
Matt75 Posted October 2, 2012 Share Posted October 2, 2012 Salut Belew, J'ai effectivement regardé et vu cette méthode, mais je ne veux pas paginer des produits mais le contenu d'une table. J'ai finalement écrit mes propres méthodes Par contre je sèche toujours concernant l'ajout d'onglet lors de l'installation d'un module prenant en compte plusieurs langues. Cordialement Link to comment Share on other sites More sharing options...
belew Posted October 9, 2012 Author Share Posted October 9, 2012 Bonjour Matt75, Il suffit d'utiliser la méthode de traduction lors de l'ajout de l'onglet $tab->name = $this->l('Traduction'); Cela fonctionne parfaitement ++ 1 Link to comment Share on other sites More sharing options...
Matt75 Posted October 15, 2012 Share Posted October 15, 2012 Bonjour, Merci, j'aurais du y penser... J'ai une nouvelle question, dans un module, je souhaiterai pouvoir afficher les sous-catégories d'une catégorie avec leurs produits. - Catégorie parent -- Sous catégorie 1 --- Produit 1 de la Sous catégorie 1 --- Produit 2 de la Sous catégorie 1 --- Produit 3 de la Sous catégorie 1 -- Sous catégorie 2 --- Produit 1 de la Sous catégorie 2 --- Produit 2 de la Sous catégorie 2 --- Produit 3 de la Sous catégorie 2 J'ai essayé de faire comme ça dans mon tpl {foreach from=$subCategories->getProducts(4, 1, 30, $orderby, $orderway) item=product name=products} et dans mon controlleur $subCategories = $this->category->getSubCategories($this->context->language->id) Malheureusement comme $subCategories ne renvoye pas un objet catégorie mais un tableau je ne peux utiliser cette méthode de la classe category... Est-il possible de faire cela proprement avec les méthodes existantes où dois-je en écrire de nouvelles ? Link to comment Share on other sites More sharing options...
f@b Posted October 17, 2012 Share Posted October 17, 2012 Salut et merci pour ton petit module exemple! c'est très utile! Petites remarques sur le controller de BO : Pourquoi ne pas ajouter parent::postprocess; dans ta méthode postprocess du module? de fait la suppression serait directement cablé ainsi que d'autres fonctions de l'admin controller. autre remarque mon copain Belew (salut au passage!) pose une question sur les images : pour que la méthode $this->postImage($mobObj->id); fonctionne il faut absolument définir avant : $_POST[$this->identifier]=$monObj->id; sinon la methode loadobject de l'admincontroller renvoie false et l'upload d'image ne fonctionne pas! une bizarrerie de cette 1.5. dernier point les filtres et le multi boutique ne semble pas fonctionner sur le canvas de module une idée? merci! ++ Fab Link to comment Share on other sites More sharing options...
f@b Posted October 17, 2012 Share Posted October 17, 2012 pour faire fonctionner les filtres j'ai du déclarer les fields_list dans le constructeur! sinon il perd ses billes si on les déclare dans la methode renderlist. Link to comment Share on other sites More sharing options...
f@b Posted October 17, 2012 Share Posted October 17, 2012 (edited) encore moi! pour le multiboutique il faut ajouter ceci dans le constructeur du canvas : $this->shopLinkType = 'shop'; et hop ça roule tout seul! (enfin il faut les champs id_shop dans la BDD votre classe) Edited October 17, 2012 by f@b (see edit history) Link to comment Share on other sites More sharing options...
belew Posted October 23, 2012 Author Share Posted October 23, 2012 Salut fab, Concernant l'image tu peux redéclarer les fonctions uploadImage() et postImage() a la ligne if (Validate::isLoadedObject($object = $this->loadObject())) Rajoutes : if (Validate::isLoadedObject($object = $this->loadObject($id))) ++ Link to comment Share on other sites More sharing options...
MonVinDirect Posted December 19, 2013 Share Posted December 19, 2013 Bonjours aux participants de ce sujet très intéressant. J'essaye actuellement de mettre en application le Canvas de J.Danse (merci à lui) et je ne comprends pas comment s'effectue la mise à jour des données. Mon but est de mettre en relation les différents magasins avec certains clients dans une table contenant: id / store_id / customer_id / name / position il n'est pas utile de mettre en place des traductions. Je sais que le sujet est ancien mais pourriez-vous m'indiquer quelques pistes sur la manière dont sont générés les ajouts/modif/suppression de données? Merci d'avance de votre aide. 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