21293 Posts in 5733 Topics by 2602 members
|
Page:
1
|
Go to End | |
| Author | Topic: | 1341 Views |
-
Search Form for certain class

25 June 2010 at 2:32am Last edited: 26 June 2010 4:15pm
Hello, in the tutorial 4 described how to create search form, but this is form searches around all DB, i found this recipe:
http://doc.silverstripe.org/recipes:removingassetsfromsearch?s[]=getsearchqueryBut it looks very dirty and results counting variables are staying the same.
So after reading silverstripe api, i found out that i can use FulltextSearchable::enable($class_names_array), but after adding it to the mysite/_config.php I got error on http://localhost/stable/dev/build?flush=1:
Fatal error: Uncaught exception 'Exception' with message 'FulltextSearchable::enable() I don't know the default search columns for class 'Page'' in /home/a2nt/work/www/stable/sapphire/search/FulltextSearchable.php:25 Stack trace: #0 /home/a2nt/work/www/stable/mysite/_config.php(48): FulltextSearchable::enable('Page') #1 /tmp/silverstripe-cache-home-a2nt-work-www-stable/manifest-main(6783): require_once('/home/a2nt/work...') #2 /home/a2nt/work/www/stable/sapphire/core/ManifestBuilder.php(66): require_once('/tmp/silverstri...') #3 /home/a2nt/work/www/stable/sapphire/core/Core.php(205): ManifestBuilder::include_manifest() #4 /home/a2nt/work/www/stable/sapphire/main.php(61): require_once('/home/a2nt/work...') #5 {main} thrown in /home/a2nt/work/www/stable/sapphire/search/FulltextSearchable.php on line 25
So I added to mysite/code/Page.php
class Page extends SiteTree {
..
static $indexes = array(
"SearchFields" => "fulltext (Title, MenuTitle, Content, MetaTitle, MetaDescription, MetaKeywords)",
"TitleSearchFields" => "fulltext (Title)",
"Sort" => true,
"Uniques" => "Unique('URLSegment')",
);
static $searchable_fields = array(
'Title',
'Content',
);
..But still I have that error, also I am interested in creation different types of search forms for example to search only in StaffPage classes.
-
Re: Search Form for certain class

26 June 2010 at 3:05am Last edited: 26 June 2010 4:15pm
Problem partly solved:
I can search by one field, but i want search with OR-condition by many fields so I tried to write that code:static $searchable_fields = array(
'Query' => array (
'Title' => "PartialMatchFilter",
'Content' => "PartialMatchFilter",
'MenuTitle' => "PartialMatchFilter",
'Content' => "PartialMatchFilter",
'URLSegment' => "PartialMatchFilter"
)
);but it's not working.
If I'll write: $context->getResults(array('Content' => $data['Query'],'Title' => $data['Query'])); I'll get search with AND-conditionNow my code looks like that:
class Page:
static $searchable_fields = array(
'Title' => "PartialMatchFilter",
'Content' => "PartialMatchFilter",
'MenuTitle' => "PartialMatchFilter",
'Content' => "PartialMatchFilter",
'URLSegment' => "PartialMatchFilter"
);
//Show in search results
static $summary_fields = array(
'Title',
'Menu',
'Content'
);class Page_Controller:
public function AdvSearchForm() {
// Create fields
$fields = new FieldSet(
new TextField('Query'),
new CheckboxSetField( 'Types', 'Search in',
array(
'Page' => 'Pages',
'Staff' => 'Staffs',
'News' => 'News'
), 'Page' )
);
// Create actions
$actions = new FieldSet(
new FormAction('AdvSearchResults', 'Submit')
);
$validator = new RequiredFields('Name','Types');
return new Form($this, 'AdvSearchForm', $fields, $actions,$validator);
}function AdvSearchResults($data, $form) {
//$data['Query'];
foreach ($data['Types'] as &$type) {
switch ($type) {
case 'Page':
$context = singleton($type)->getDefaultSearchContext();
$data[$type] = $context->getResults(array('Content' => $data['Query']));
break;
case 'Staff':
break;
case 'News':
break;
}
}return $this->customise($data)->renderWith(array('Page_AdvSearch', 'Page'));
}P.S. Plz, move the topic out from template questions
| 1341 Views | ||
|
Page:
1
|
Go to Top |

