Jump to content

Bloc navigation à facette + Datepicker


Recommended Posts

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 !

post-839847-0-06682100-1502443764_thumb.png

post-839847-0-98814500-1502443769_thumb.png

post-839847-0-66469200-1502443775_thumb.png

post-839847-0-29369800-1502443784_thumb.png

Link to comment
Share on other sites

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

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 by Matt K. (see edit history)
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...