Pb filtre exposé proximité (code postal - distance)

Catégories:

Bonjour,

j’ai un souci pour faire fonctionner comme je le souhaiterais une vue avec un filtre exposé de type «Proximité» lié au module Location.
Globalement, ca fonctionne (j’ai appliqué tous les patchs et fais les modifs nécessaires liées aux particularités des codes postaux français : un code postal = plusieurs villes).
Mais il me reste un problème :
j’ai opté pour des filtres exposé facultatifs (car plusieurs filtres en place). Or, lorsque l’utilisateur entre un code postal et pas de distance, la vue renvoie 0 résultats, alors qu’il y a bien des nodes localisés sur ce code postal (mais qui ne correspondent pas, je pense, aux coordonnées lat/long exactes associées au CP). Donc je souhaiterais que ma vue prennent en compte une distance par défaut si le filtre exposé «distance» est vide (mais que cette valeur ne s’affiche pas dans le champ). Ou que les coord lat/long ne soient pas utilisées dans ce cas là.
Avez-vous une idée de comment je dois m’y prendre ? Merci d’avance.

#

Bon, j’ai finalement trouvé une partie de la solution temporaire rapidement.
Dans location_views_handler_filter_proximity.inc, il faut remplacer dans la fonction query() :

$distance_meters = _location_convert_distance_to_meters($this->value['search_distance'], $this->value['search_units']);

par

if (empty($this->value['search_distance'])) {
   $distance_meters = _location_convert_distance_to_meters(5, $this->value['search_units']);
} else {
    $distance_meters = _location_convert_distance_to_meters($this->value['search_distance'], $this->value['search_units']);
}

Ici j’ai mis la valeur ‘5’.
Mais je pense que ce n’est jamais la même zone couverte par les codes postaux. Donc
j’aimerais mieux que la recherche par les coordonnées lat/long soit abandonnée dans ce cas, au profit d’une recherche dans le champ Code postal. Qu’en pensez-vous ?
Merci

#

Views propose pas mal de hooks pour modifier la requête à la demande, entre autre le très puissant views_query_alter, dans lequel on peut utiliser les méthodes de la classe view, comme $view->query->add_where ou add_table, en conditionnant tout ça à volonté.

On peut utiliser la variable $_SESSION pour récupérer les valeurs de filtres entrées et ainsi connaître le contexte d’exécution.

#

Ok merci Numerizen.
Je vais regarder ça.
Est-ce que tu pourrais détailler un peu, pour que je comprenne concrètement comment m’y prendre ? J’avoue que la surcharge de fonction c’est pas mon fort.
Merci.

#

Le mieux est de regarder les exemples existants, et non, je n’ai pas le temps de détailler, désolé.

Syndiquer le contenu