Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

Data Model Questions /

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

DataObject search problem


Go to End


1966 Views

Avatar
NickJacobs

Community Member, 148 Posts

29 April 2010 at 7:28pm

HI, I have a search form which I just cannot get working....I keep getting a "Missing argument 1 for Page_Controller::results()" error. I'm hoping someone can see where I'm going wrong:

In my dataobject (Collection) I have:

static $db = array (
		'Fulltext' => 'Text',
		'Family' => 'Text',		
		'Genus' => 'Text',
		'Hybrid' => 'Text',
		'Species' => 'Text',		
		'Infraspecific' => 'Text',
		'Cultivar' => 'Text',
		'CultivarGroup' => 'Text',
		'Synonym' => 'Text',
		'CommonName' => 'Text',
		'Continent' => 'Text',
		'GeoRegion' => 'Text',
		'Herbarium' => 'Boolean',
		'IUCNCode' => 'Text',
		'Fieldx1' => 'Text',
		'Var' => 'Text'
	);

static $keywords_search_fields = array (
		'Family','Genus','Hybrid','Species','CommonName'
	);

the search form I have setup like so:

public function CollectionSearchForm()
	{
		$f = new Form(
			$this,
			"CollectionSearchForm",
			new FieldSet(
				$genus = new DropdownField('Genus','Genus', DataObject::get('Collection')->toDropdownMap('Genus','Genus')),
				$herbarium = new CheckboxField('Herbarium','Herbarium specimens only'),
				
				$keywords = new TextField('Keywords')
			),
			new FieldSet(
				new FormAction('doCollectionSearch','Search')
			)
		);
		$f->setFormMethod('get');
		$genus->setEmptyString('-- All --');
		if(isset($_REQUEST['Genus'])) $genus->setValue(urldecode($_REQUEST['Genus']));
		if(isset($_REQUEST['Herbarium'])) $herbarium->setValue(urldecode($_REQUEST['Herbarium']));	
		if(isset($_REQUEST['Keywords'])) $keywords->setValue(urldecode($_REQUEST['Keywords']));
		return $f;
	}
	
	public function doCollectionSearch($data, $form)
	{
		$filters = array();
		if(isset($data['Keywords']) && !empty($data['Keywords'])) {
			$k = $data['Keywords'];
			$keywords = array();
			foreach(Collection::$keywords_search_fields as $field)
				$keywords[] = $field . " LIKE '%{$k}%'";
			$keywords_clause = implode(" OR ", $keywords);
			$filters[] = "(".$keywords_clause.")";
		}
		if(isset($data['Genus']) && !empty($data['Genus'])) {
			$g = $data['Genus'];
			$filters[] = "Genus = '{$g}'";
		}
		
		if(isset($data['Herbarium']) && !empty($data['Herbarium'])) {
			$h = $data['Herbarium'];
			$filters[] = "Herbarium = {$h}";
		}		
		
		$where = implode(" AND ", $filters);
		
		if(!isset($_REQUEST['start'])) $_REQUEST['start'] = 0;
		$limit = $_REQUEST['start'].",10";
		return $this->customise(array(
			'Collections' => DataObject::get("Collection", $where, null, null, $limit)
		))->renderWith(array('Collection_results','Page'));
	}
	

Anyone see obvious errors???
thanks