Shonen Posted August 11, 2017 Share Posted August 11, 2017 Bonjour, Dans le cadre d'un développement, je dois pouvoir trier mes produits par date. J'ai créé un attribut "Date", ainsi qu'un nouveau type d'attribut par surcharge, qui est "date calendaire". Ainsi, si on ajoute une valeur à l'attribut date, un champs datepicker apparaît et enregistre une date en base de donnée. Jusqu'ici tout fonctionne, j'ai dû surcharger la classe Attribute, le controlleur AdminAttributesGroupsController et le template form dans ce même controlleur (je pourrais partager le code si vous avez besoin de réaliser le même développement un jour). Maintenant je souhaite pouvoir le trier. Je surcharge donc le module bloc navigation à facette. En face de "Attribute group: Date", j'autorise le style de filtre "Datepicker". /theme/mon_theme/modules/blocklayered/views/templates/admin/add_1.6.tpl Ajoute l'option Date avec un datepicker pour les attributs en backoffice <div class="col-lg-6"> <select name="layered_selection_ag_{(int)$attribute_group['id_attribute_group']}_filter_type"> <option value="0">{l s='Checkbox' mod='blocklayered'}</option> <option value="1">{l s='Radio button' mod='blocklayered'}</option> <option value="2">{l s='Drop-down list' mod='blocklayered'}</option> {if $attribute_group['name'] == 'Date'} <option value="3">{l s='Datepicker' mod='blocklayered'}</option> {/if} </select> </div> /override/modules/blocklayered/blocklayered.php Ajoute le script datepicker à ma vue. if (!defined('_PS_VERSION_')) exit; class BlockLayeredOverride extends BlockLayered { public function hookHeader($params) { $this->context->controller->addJQueryUI('ui.datepicker'); return parent::hookHeader($params); } } /theme/mon_theme/modules/blocklayered/blocklayered.tpl Ajoute le datepicker à la vue {elseif $filter.filter_type == 3} <input type="text" class="form-control datepicker" name="layered_{$filter.type_lite}_{$id_value}" id="layered_{$filter.type_lite}{if $id_value || $filter.type == 'quantity'}_{$id_value}{/if}"/> <script> $('.datepicker').datepicker(); </script> {else} Voilà pour les préliminaires. J'ai maintenant un champs input qui ouvre un calendrier au clic. Problème : je ne sais pas quoi surcharger pour avoir une fonction du type : selon la date choisie, en Ajax, me charger tous mes produits dont la date est >= à la date sélectionnée. Pour info ma date en BDD est au format DATE (0000-00-00) L'heure est une caractéristique et n'entre pas en compte dans ma recherche. j'ai déjà essayé de surcharger le JS blocklayered_admin.js, blocklayered.js et blocklayered-footer.js, mais ça ne modifie rien. Quelqu'un aurait une idée ? Je n'ai rien trouvé sur la surcharge Ajax de ce module, rien qu'une piste pourrait m'être d'une aide précieuse. Merci ! Link to comment Share on other sites More sharing options...
Matt K. Posted August 14, 2017 Share Posted August 14, 2017 Salut ! Est-ce que l'override de ton blocklayered.js se trouve dans /ton_themes/js/modules/blocklayered/blocklayered.js ? 1 Link to comment Share on other sites More sharing options...
Shonen Posted August 14, 2017 Author Share Posted August 14, 2017 Salut ! Est-ce que l'override de ton blocklayered.js se trouve dans /ton_themes/js/modules/blocklayered/blocklayered.js ? Salut, Merci de ta réponse. Merveilleux haha, je modifiais donc en effet le mauvais fichier ! Le chemin que tu me montre m'envoie en effet sur le bon override (il existait déjà sur le thème par défaut...). Je ne ferme pas le sujet car j'aurais sûrement encore des questions sur comment faire mes développement, c'est assez corsé ^^ Concrètement pour la suite, je vais devoir rediriger l'Ajax sur une action d'un controller, pour faire la recherche sur la case "date" de ma base de donnée, et demander les produits dont la date est >= à celle entrée par l'internaute. Enfin bref, je me lance déjà dans mes développements et je reviens dès que j'ai besoin, merci ! Link to comment Share on other sites More sharing options...
Matt K. Posted August 14, 2017 Share Posted August 14, 2017 (edited) Cool ! Les overrides c'est pas forcément simple au début, car c'est à plusieurs endroits différents... A vu de nez je pense qu'il faut que tu travailles dans la fonction reloadContent en t'arrangeant pour que data récupère ta date. Ensuite il faudrait traiter cette date l'action en l’occurrence quelque part dans modules/blocklayered/blocklayered-ajax.php. Le module devrait faire le reste. x) C'est une piste... Bon courage. Edited August 14, 2017 by Matt K. (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