2010-08-26 2 views
2

La version simple de ma question: J'ai besoin d'un champ de référence de nœud CCK pour rechercher deux champs différents dans un nœud. Quelle est la meilleure façon de faire cela?Configuration de la référence de nœud Drupal autosuggest pour effectuer une recherche sur deux champs distincts

Contexte Certains

Je gère un calendrier pour un programme de thérapie physique. Chaque conférence a une liste de lecture. Les lectures sont leur propre type de contenu et le cours a un champ de référence de nœud autosuggère qui ne recherche actuellement que le titre de la lecture. J'en ai besoin aussi pour chercher sur un autre champ cck, l'auteur des lectures.

J'ai essayé de faire ceci une vue faite sur commande, mais j'ai besoin d'un titre très simple ou d'une recherche d'auteur, et nous sommes coincés avec ET pour un peu plus longtemps. Y at-il un travail autour? Ai-je besoin de créer un petit module pour le faire? Si oui, où un bon endroit pour commencer à apprendre comment faire cela? (J'ai fait des modules personnalisés avant mais aucun qui implique l'interfaçage avec views/cck). Je ne suis pas vraiment sûr de savoir où aller avec ça maintenant.

Merci pour l'aide!

Répondre

1

Il n'y a pas vraiment de moyen d'y parvenir, car la seule recherche dans le titre est une "caractéristique" du module Node Reference (qui fait partie de CCK). Toutefois, vous pouvez créer une vue personnalisée pour fournir les résultats de la saisie semi-automatique et utiliser hook_views_query_alter() pour modifier la requête exécutée par la vue. La vue que vous créez doit être sélectionnée dans la page de configuration du champ. Ci-dessous un exemple d'implémentation qui modifie la requête pour rechercher à la fois le titre et le corps des noeuds. Vous aurez probablement besoin de le personnaliser un peu pour obtenir exactement ce que vous voulez.

function mymodule_views_query_alter(&$view, &$query) { 

    if ($view->name == 'my_custom_view' && $view->current_display == 'content_references_1') { 

     // Remove the original title constraint 
     unset($query->where[0]['clauses'][2]); 

     // Duplicate the argument (keyword to search for), so 
     // it is passed to both the title and the other field 
     $query->where[0]['args'][] = $query->where[0]['args'][1]; 

     // Add the custom where clause 
     $view->query->add_where(0, "(node.title LIKE '%%%s%%' OR node_revisions.body LIKE '%%%s%%')"); 

    } 

} 
+0

Oui! Je vous remercie. C'était infiniment utile. Il m'a fallu beaucoup de temps pour comprendre tout mais je l'ai maintenant. Je vous remercie! – mattmcmanus

Questions connexes