Где воздух гор - там тишина снегов, молчание камней и дремлет сила

Программирование Web

Простой поисковый движок с помощью CodeIgniterа








Реализация поиска в фреймворке CodeIgniter выполняется быстро и достаточно просто. Достаточно воспользоваться встроенными в сам фреймворк средствами. Итак, приступим.
Предположим, что у нас нам нужно организовать поиск в таблице базы данных, содержащую статьи блога. Таблица будет иметь такую структуру:

CREATE TABLE `artciles ` (
`id` int(11) NOT NULL DEFAULT '0',
`title` varchar(255) DEFAULT NULL,
`body` text,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Далее все описываем по шагам.
1. Создаем новый проект (скачиваем последнюю версию фреймворка CodeIgniterа и помещаем ее на наш локальный сервер)
2. Редактируем файлы настроек. В файле «application/config/config.php» прежде всего устанавливаем базовый URL проекта:

$config['base_url']= 'http://localhost/ci_search';
Затем редактируем файл настроек базы данных «application/config/database.php»,где устанавливаем текущие настройки соединения с базой данных и имя используемой базы:

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'mydbuser';
$db['default']['password'] = 'mydbpwd';
$db['default']['database'] = 'blog';
Наконец, нужно прописать в файле «application/config/autoload.php» автоматическую загрузку библиотеки «database» и утилиты «url»:
$autoload['libraries'] = array('database');
$autoload['helper'] = array('url','form');
3.Создаем новый контроллер S_Engine (файл «application/controllers/c_engine.php»).В нем новый метод index, который будет загружать форму поиска:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class S_Engine extends CI_Controller {

function __construct()
{
parent::__construct();
}

public function index()
{
$this->load->view('s_from');
}

}

4.В этот же контроллер добавим новый метод search,который будет производить поиск:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class S_Engine extends CI_Controller {

function __construct()
{
parent::__construct();
}
public function index()
{
$this->load->view('s_from');
}

public function search() {
$data['page_title']="Search Engine";
$article_title = $this->input->post(‘title’);
$this->load->view('search_results', $data);
}
}

5.Теперь создаем новую модель Db_Search (файл «/application/models/db_search.php» и в ней метод getResults, который будет возвращать результаты поиска:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class DB_Search extends CI_Model {

function __construct() {
parent::__construct();
}
public function getResults($title,$body = TRUE) {
$this->db->like('title',$title);
$this->db->order_by('title');
$q = $this->db->get('articles');
if ($q->num_rows() >0 ){
$result = '<ul>';
foreach ($q->result() as $info) {
if ($body) {
$result .= '<li><i> Blog Article Title: </i> '.$info->title.'</br>';
$result .= '<i>Blog Article Body :</i> '.$info->body.'</li>';
} else {
$result .= '<li><i> Blog Article Title: </i> '.$info->title.'</li>';
}
}

$result .= '</ul>';
return $result;
}
else {
return 'Nothing found, sorry';
}
}
}

6.Затем подключаем новую модель в контроллер и редактируем метод search()
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class S_Engine extends CI_Controller {

function __construct()
{
parent::__construct();
$this->load->model('db_search');
}

public function index() {
$data['title']="Blog Article Search:";
$this->load->view('s_form', $data);
}
public function search() {
$data['page_title']="Search Results:";
$title = $this->input->post('title');
$data['search_results'] =$this->db_search->getResults($title);
$this->load->view('results', $data);
}
}

7.Теперь создадим новый файл типа view для формы поиска (файл «/application/views/s_form.php»):
<?='<h3> Search:</h3>';?>
<?=form_open('s_engine/search');?>
<?php $search = array('name'=>'title','id'=>'title','value'=>'');?>
<?=form_input($search);?>
<input type=submit value='Search'/>
</p>
<?=form_close();?>
И файл для отображения результатов поиска (файл «/application/views/results.php»):
<h2><?= $page_title;?></h2>
<div id="results">
<?= $search_results;?>
</div>

8.После устанавливаем контроллер по умолчанию в файле роутера «/application/config/routes.php»:
$route['default_controller'] = "s_engine";
9.Вводим в форму данные и видим что, все работает. Теперь усовершенствуем механизм поиска. Установим проверку ввода данных в форму. Для этого подключим в метод
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class S_Engine extends CI_Controller {

function __construct()
{
parent::__construct();
$this->load->model('db_search');
}

public function index()
{

$this->load->view('s_form');

}

public function search() {
$this->load->library('form_validation');
$this->form_validation->set_rules('title', 'title','trim|required|min_length[6]|max_length[80]');
$data['page_title']="Search Results:";
$title = $this->input->post('title');
if($this->form_validation->run() == FALSE) {
$this->load->view('s_form');
}
else
{
$data['search_results'] =$this->db_search->getResults($title);
$this->load->view('results', $data);
}
}
}

Производиться проверка ввода данных, в том числе защита этих данных, а также устанавливается минимальная и максимальная длина введенной строки. Если условие не удовлетворительные, то отображается вновь форма поиска, с сообщением об ошибке. Если же все в порядке, то показываются результаты поиска. В форму нужно добавить строку для отображения сообщений об ошибках:

<?php echo validation_errors(); ?>
<?=form_open('s_engine/search');?>
<?php echo "Search:" ?>
<?php $search = array('name'=>'title','id'=>'title','value'=>'');?>
<?=form_input($search);?>
<input type=submit value='Search'/>
</p>
<?=form_close();?>

Это все, поисковый движок вполне работоспособен и функционален.

Здесь нет комментариев


Новый комментарий:
























Яндекс.Метрика