2010-01-15 7 views
0

Я пытаюсь найти способ поиска по пользовательским полям сообщений. В принципе, мне нужно найти сообщение, где post.CustomField1 == «некоторое значение»Граффити CMS: Поиск пользовательских полей

Я искал и искал и просматривал исходный код Graffiti CMS (graffiticms.codeplex.com) и не мог выяснить, как я это сделаю.

+0

Вы пытаетесь сделать это в коде мела/макроса или переписав C#? Решение будет другим. –

ответ

0

Как сказал EJB, решение зависит от того, где вы хотите реализовать поиск.

Если вы хотите найти сообщение с конкретным значением поля, поиск только сообщений, отображаемых на текущей странице (например, index.view или вида категории), вы можете сделать это с помощью Chalk в шаблоне, подобном этому :

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

Вы также можете использовать API для повторения всех сообщений и проверки пользовательского значения. К сожалению, у Graffiti CMS нет встроенного метода для запроса базы данных для сообщений на основе определенного значения настраиваемого поля.

Однако вы можете использовать встроенную поисковую систему Lucene. Если вы хотите включить поиск определенного настраиваемого значения поля с помощью поиска, вам нужно сделать пару настроек в исходном коде класса Graffiti.Core.SearchIndex. В методе CreateDocument добавить значение настраиваемого поля в индексированной документа, как это:

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

Затем в методе GetQueryParser добавить этот ключ в список полей для поиска по:

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

С двумя изменения выше, вы сможете выполнить поиск «некоторого значения» и вернуть ему сообщения с значением CustomField1.

Надеюсь, что это поможет!

+0

Ни одно из них не является точным решением, которое я ищу, но я думаю, что последнее будет работать. Благодарю. –

Смежные вопросы