Граффити CMS: Поиск пользовательских полей - PullRequest
0 голосов
/ 15 января 2010

Я пытаюсь найти способ поиска в пользовательских полях сообщений. По сути, мне нужно найти пост, где post.CustomField1 == "some value"

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

1 Ответ

0 голосов
/ 26 января 2010

Как сказал 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 этого значения.

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

...