stworzyłem wyszukiwarkę, która wyszukuje dokładnie wprowadzony ciąg znaków z bazy danych np: wprowadzę "Ostrów Wielkopolski" znajduje ładnie. Nie wiem jak zrobić aby np: po wprowadzeniu "ostrow" również wyświetliło mi ten wynik.
akcja kontroler
CODE
public function searchAction()
{
$roomsDAO = new Rooms();
$searchForm = new SearchForm();
$filter = new Zend_Filter();
$filter->addFilter(new Zend_Filter_StripTags());
$filter->addFilter(new Zend_Filter_StringTrim());
$this->view->form = $searchForm;
$room_type_id = $filter->filter($this->_getParam('room_type_id'));
$province_id = $filter->filter($this->_getParam('province_id'));
$city = $filter->filter($this->_getParam('city'));
$data = array(
'province_id' => $province_id ? $province_id : null,
'city' => $city ? $city : null,
'room_type_id'=> $room_type_id ? $room_type_id : null
);
if($room_type_id or $province_id or $city){
$isSearch = true;
} else {
$isSearch = false;
}
$searchForm->populate($data);
$forPage = 2;
$filterInt = new Zend_Filter_Int();
$page = $filterInt->filter($this->_getParam('page'));
$page = $page ? $page : 1;
$paginator = Zend_Paginator::factory($roomsDAO->search($data));
$paginator->setCurrentPageNumber($page);
$paginator->setItemCountPerPage($forPage);
$rooms = $roomsDAO->itemsToRowset($paginator->getCurrentItems());
$photos = array();
foreach($rooms as $room)
{
$dirname = './files/rooms/' . $room->id. '/';
if (is_dir($dirname)) {
if ($dh = opendir($dirname)) {
$number = 1;
while (($filename = readdir($dh)) !== false) {
$filepath = $dirname . $filename;
if (!is_dir($filepath)) {
$findme = '_t.jpg';
$pos = strpos($filename, $findme);
if ($pos !== false) {
/* do wyswietlania wszystkich zdjęć
$photos[$room->id][] = $filename;
*/
/* do wyswietlania jednego zdjęcia */
$photos[$room->id] = $filename;
$photos2[$room->id] = substr($filename, 0, -6).'_o.jpg';
continue;
}
}
}
}
}
}
$this->view->photos = $photos;
$this->view->rooms = $roomsDAO->itemsToRowset($paginator->getCurrentItems());
$this->view->paginator = $paginator;
$this->view->query = $_SERVER['QUERY_STRING'];
$this->view->formData = $data;
$this->view->isSearch = $isSearch;
}
formularz
CODE
<?php
class SearchForm extends Zend_Form
{
public function __construct()
{
parent::__construct();
$this->setAttrib('method', 'get');
$this->setAttrib('action', '/index/search/page/1');
$this->setAttrib('onsubmit', 'return searchValidator();');
$province_id = new Zend_Form_Element_Select('province_id');
$province_id->setLabel('')
->addFilter('StripTags')
->setAttrib('class', 'text');
$provincesDAO = new Provinces();
$province_id->addMultiOption('', 'wybierz województwo');
$provinces = $provincesDAO->fetchAll();
foreach($provinces as $province){
$province_id->addMultiOption($province->id, $province->name);
}
$city = new Zend_Form_Element_Text('city');
$city->setLabel('')
->addFilter('StripTags')
->setValue('nazwa miasta')
->setAttrib('maxlength', '128')
->setAttrib('class', 'text')
->setAttrib('onfocus', 'if (this.value == \'nazwa miasta\') this.value = \'\'')
->setAttrib('onblur', "if (this.value == '') this.value = 'nazwa miasta'");
$room_type_id= new Zend_Form_Element_Select('room_type_id');
$room_type_id->setLabel('')
->addFilter('StripTags')
->setAttrib('class', 'text');
$roomsTypesDAO = new RoomsTypes();
$room_type_id->addMultiOption('', 'wybierz rodzaj sali');
$roomsTypes = $roomsTypesDAO->fetchAll();
foreach($roomsTypes as $roomType){
$room_type_id->addMultiOption($roomType->id, $roomType->name);
}
$submit = new Zend_Form_Element_Submit('Szukaj');
$this->addElements(array($province_id, $room_type_id, $submit, $city ));
$this->clearDecorators();
$this->setDecorators(
array(
'FormElements',
'Form'
)
);
$submit->setDecorators(
array(
'ViewHelper',
array('HtmlTag', array('tag' => 'p', 'class' => 'buttons', 'id' => 'p_submit'))
)
);
$province_id->setDecorators(
array(
'ViewHelper',
array('HtmlTag', array('tag' => 'p', 'id' => 'p_province_id'))
)
);
$city->setDecorators(
array(
'ViewHelper',
array('HtmlTag', array('tag' => 'p', 'id' => 'p_city'))
)
);
$room_type_id->setDecorators(
array(
'ViewHelper',
array('HtmlTag', array('tag' => 'p', 'id' => 'p_room_type_id'))
)
);
}
}