2010-01-15 7 views
0

J'essaie de trouver un moyen de rechercher dans les champs personnalisés des messages. Fondamentalement, ce dont j'ai besoin est de trouver un poste où post.CustomField1 == "une certaine valeur"Graffiti CMS: recherche champs personnalisés

J'ai recherché et cherché et creusé à travers le code source Graffiti CMS (graffiticms.codeplex.com) et ne peut pas comprendre comment je ferais cela.

+0

Essayez-vous de le faire dans le code craie/macro, ou en réécrivant le C#? La solution sera différente. –

Répondre

0

Comme l'a dit EJB, la solution varie selon l'endroit où vous voulez implémenter la recherche. Si vous souhaitez trouver un article avec une valeur de champ personnalisée, en recherchant uniquement les articles affichés sur la page actuelle (comme index.view ou une vue de catégorie), vous pouvez le faire avec Chalk dans un modèle comme celui-ci :

#foreach($post in $posts) 
    #if($post.Custom("CustomField1") == "some value") 
    display or do something with $post 
    #end 
#end 

Vous pouvez également utiliser l'API pour parcourir tous les messages et vérifier la valeur personnalisée. Malheureusement, Graffiti CMS ne dispose pas d'une méthode intégrée pour interroger la base de données pour les publications basées sur une valeur de champ personnalisé spécifique. Cependant, vous pouvez utiliser le moteur de recherche Lucene intégré. Si vous souhaitez activer la recherche d'une valeur de champ personnalisée particulière à l'aide de la recherche, vous devez apporter quelques modifications au code source de la classe Graffiti.Core.SearchIndex. Dans la méthode CreateDocument ajouter la valeur du champ personnalisé au document indexé comme ceci:

doc.Add(Field.Text("CustomField1", t.Custom("CustomField1") ?? string.Empty)); 

Ensuite, dans la méthode GetQueryParser ajouter cette clé à la liste des champs de recherche sur:

return new MultiFieldQueryParser(new string[] { "body", "title", "CustomField1" }, a); 

Avec les deux changements ci-dessus, vous seriez en mesure de faire une recherche pour "une certaine valeur" et le faire retourner tous les messages avec la valeur de CustomField1 de cela.

Espérons que ça aide!

+0

Aucun d'entre eux sont la solution exacte que je cherche, mais je pense que ce dernier va fonctionner. Merci. –

Questions connexes