Gawel91 Posted April 12, 2013 Share Posted April 12, 2013 (edited) Bonjour tout le monde, voilà j'ai un soucis j'ai créé un nouveau module basé sur newproducts déjà existant, et j'aimerai que dans le Back-Office on puisse, grâce à un text box et la fonction autocomplete de Jquery, choisir facilement des produits manuellement pour remplacer quelques "nouveaux produits" choisis automatiquement sur le front-office. Voici donc mon code de la fonction displayForm() du fichier php du module pour la partie back-office : public function displayForm() { $query = 'SELECT id_product, name FROM '._DB_PREFIX_.'product_lang WHERE id_lang = '.(int)Context::getContext()->language->id; $products = Db::getInstance()->ExecuteS($query); $qtyproducts = count($products); /* $query = Tools::getValue('q', false); if (!$query OR $query == '' OR strlen($query) < 1) die(); */ $array=array(); foreach($products as $member=>$data) { $array[$member]=$data; } $output = ' <script type="text/javascript"> var arr = "<?php echo json_encode($array); ?>"; $(document).ready(function() { $( "#autocomp" ).autocomplete({ source: arr }); }); </script> // En dessous jai pas touché grand chose, juste quelques input box rajoutés <form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post"> <fieldset><legend><img src="'.$this->_path.'logo.gif" alt="" title="" />'.$this->l('Settings').'</legend> <label>'.$this->l('Products to display.').'</label> <div class="margin-form"> <input type="text" name="productNbr" value="'.(int)(Configuration::get('NEW_PRODUCTS_NBR')).'" /> <p class="clear">'.$this->l('Define the number of products to be displayed in this block.').'</p> </div> <label>'.$this->l('Always display this block.').'</label> <div class="margin-form"> <input type="radio" name="always_display" id="display_on" value="1" '.(Tools::getValue('always_display', Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY')) ? 'checked="checked" ' : '').'/> <label class="t" for="display_on"> <img src="../img/admin/enabled.gif" alt="'.$this->l('Enabled').'" title="'.$this->l('Enabled').'" /></label> <input type="radio" name="always_display" id="display_off" value="0" '.(!Tools::getValue('always_display', Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY')) ? 'checked="checked" ' : '').'/> <label class="t" for="display_off"> <img src="../img/admin/disabled.gif" alt="'.$this->l('Disabled').'" title="'.$this->l('Disabled').'" /></label> <p class="clear">'.$this->l('Show the block even if no products are available.').'</p> </div> <label>'.$this->l('Insert products you want to be displayed here (optional).').'</label> <div class="margin-form"> <p class="clear">Produit #1 </p> <input type="text" name="q" id="autocomp" /> </div> <center><input type="submit" name="submitBlockNewProducts" value="'.$this->l('Save').'" class="button" /></center> </fieldset> </form>'; return $output; } Donc j'arrive bien à faire la requête pour les produits, j'arrive à récuperer la variable de PHP à Javascript, mais je n'arrive pas à faire l'autocomplétion en elle-même, j'ai cherché partout sur Internet mais la configuration Prestashoop ne permet pas toujours d'utiliser des autres fichiers, etc. Quelqu'un pourrait m'aider ? Merci. Edited April 12, 2013 by Gawel91 (see edit history) Link to comment Share on other sites More sharing options...
CorentinDav Posted April 22, 2013 Share Posted April 22, 2013 up j'essaye aussi d'integrer un champ text d'autocompletion pour les produits. je me suis calqué sur l'ajout d'accessoires à un produit mais je n'arrive pas a avoir l'autocompletion Link to comment Share on other sites More sharing options...
J. Danse Posted April 22, 2013 Share Posted April 22, 2013 Bon. Quelle version de PrestaShop, dans les deux cas ? Link to comment Share on other sites More sharing options...
CorentinDav Posted April 22, 2013 Share Posted April 22, 2013 c'est la derniere version 1.5 Link to comment Share on other sites More sharing options...
Gawel91 Posted May 3, 2013 Author Share Posted May 3, 2013 (edited) Bonjour, Désolé je n'ai pas vu les réponses de suite, entre temps j'ai résolu ce problème et l'autocomplete marche parfaitement, et effectivement j'avais fait comme Corentin en regardant sur celui d'ajout d'accessoires. Il faut faire un peu comme cela : public function displayForm() { $this->context->controller->addJqueryUI('ui.autocomplete.js' ); $output = ' <script type="text/Javascript"> var numID; $(function() { var counter = 0; $("#newField").click(function() { counter += 1; var newItem = $("<input type=\'text\' style=\"display:block;\" id=\"prodID[" + counter +"]\" onfocus=\'numero(this.id)\' class=\'autocomp\' name=\'productList[]\' /><input type=\"hidden\" name=\"product[]\" id=\"hiddenID[" + counter +"]\" />"); $("#fields > p").append(newItem); $(\'.autocomp\').autocomplete(\'ajax_products_list.php\', { minChars: 1, autoFill: true, max:20, matchContains: true, mustMatch:true, scroll:false }).result(function(event, data, formatted) { var hiddF = document.getElementById(\'hiddenID[\'+numID+\']\'); hiddF.value = data[1]; }); }); }); </script> ... code HTML... <div id="fields"> <p> <input type="text" style="display:block;" class="autocomp" onfocus="first()" name="productList[]" id="firstField" /> <input type="hidden" value="" name="product[]" id="hiddenID[0]" /> </p> </div> A adapter selon vos désirs. N'oubliez pas les champs hidden pour récupérer les valeurs id produits. Dans mon cas j'ai fait un truc plus compliqué, avec ajout de champs dynamiques pour ajouter un ou plusieurs produits, autocomplétion dessus, puis tableau drag and drop pour gérer l'ordre de ces produits. Edited May 3, 2013 by Gawel91 (see edit history) 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