2010-06-16 6 views
2

Fond: J'ai un formulaire de recherche complexe qui stocke la requête et son hachage dans un cache. Une fois le cache défini, je redirige vers quelque chose comme /searchresults/e6c86fadc7e4b7a2d068932efc9cc358 où cette grande chaîne longue à la fin est le hash md5 de ma requête. Je dois faire un nouvel argument pour que les points de vue sachent à quoi sert le hachage. La raison de tout cela est parce que mon formulaire de recherche original est complexe et a beaucoup d'arguments à considérer pour les mettre tous dans le chemin et s'attendre à faire le filtrage avec les arguments de vues normales.Drupal Views api, ajouter un argument simple

Maintenant pour ma question. J'ai lu la documentation de vues 2 mais je n'ai pas compris comment accomplir cet argument personnalisé. Il ne me semble pas que cela devrait être aussi dur que cela me semble être. Laissant de côté toute connaissance de l'API de Veiws, il semblerait que tout ce dont j'ai besoin est une fonction de rappel qui prendra l'argument du chemin comme seul argument et retournera une liste d'ID de nœud à filtrer.

Quelqu'un peut-il me diriger vers une solution ou me donner un exemple de code?

Merci pour votre aide! Vous êtes géniaux.

PS. Je suis sûr que mon design est le meilleur que je puisse trouver, ne laissons pas tomber ma question et ne vérifions pas ma logique de conception si nous pouvons l'aider.

Répondre

1

Ce n'est pas aussi simple que vous voudriez le faire.

Dans les vues, les arguments sont utilisés pour renvoyer des objets, un utilisateur fx, un noeud, un terme, un objet personnalisé. Vous pouvez donc créer du code personnalisé pour obtenir l'objet de requête. Ce ne serait que le premier pas. Vous devez ensuite obtenir les informations de l'objet de requête. Vous pouvez soit essayer de créer une liaison de relation personnalisée avec les nœuds, soit créer votre propre filtre pour rendre le SQL nécessaire. Cela peut rapidement devenir un puits de temps confus.

Au lieu de cela, je suggère que vous utilisez hook_views_query_alter, ce qui vous permettra de modifier la requête. Puisque vous avez déjà le SQL, il suffit de vérifier le hachage, et si c'est le cas, modifiez la requête. Devrait être une chose assez simple à faire. La seule chose qui est un peu difficile, c'est que vous devez faire la requête avec l'objet de requête que les vues utilisent, mais ce n'est pas si difficile à comprendre.

+0

Merci pour votre réponse. En fait, il m'a fallu seulement quelques heures pour que l'on comprenne les points de vue jusqu'à ce que j'accomplisse ce dont j'ai besoin. Je ne l'ai jamais maîtrisé, mais ça marche! Si j'avais reçu votre réponse à temps, vous auriez pu me sauver une heure ou deux ... eh bien. :) – Icode4food