Поиск с использованием Jquery Ui Autocmplete

Статей в интернете на эту тему очень, но я все же решил написать свой вариант, своими слова. Первое, что нам будет необходимо сделать, это подключить jQuery и jQuery UI. Для этого, качаем их отсюда и отсюда. Скачивать jQuery Ui полностью или только виджет Autocomlete это дело ваше.

Теперь можно подключить скачанное:

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery-ui.js"></script>

Далее сам скрипт Autocomplite :

$(function() {
    var cache = {},
    lastXhr;
    $( "#autocomplete" ).autocomplete({
        minLength: 1,
        source: function( request, response ) {
            var term = request.term;
            if ( term in cache ) {
                response( cache[ term ] );
                return;
            }lastXhr = $.getJSON( "http://teaseo.ru/search.php", request, function( data, status, xhr ) {
                cache[ term ] = data;
                if ( xhr === lastXhr ) {
                    response( data );
                }
            });
        }
    });
});

Параметр minLength задает минимальное количество символов при котором срабатывает автокомплит. Файл search.php расположенный по адресу http://teaseo.ru/search.php должен выдавать предварительные результаты поиска в формате json. Как пример, файл search.php:

<?php
    function get_update_date($search)
    {
        $query = "SELECT name FROM table WHERE name LIKE ".$search."%'";
        $rt = mysql_query($query);
        while($nt = mysql_fetch_array($rt)){
            $new[] = $nt['name'];
        }
        return $new;
    }
    function prep_json($array)
    {
        foreach($array as $key => $val){
            $new[$key]['label'] = $val;
            $new[$key]['id'] = $key;
            $new[$key]['value'] = $val;
        }
        return $new;
    }
    if($_GET('term')){
        echo json_encode(prep_json(get_update_date(trim(strip_tags($_GET('term'))))));     
    } 
?>

Пример для Codeigniter 2.0.X. И так, в модель Data добавляем две следующие функции:

<?php
    function get_update_name($name = '')
    {
        $this->db->select('name');
        $this->db->like('name',$name,'after');
        $query = $this->db->get('table');
        return $query->result_array();         
    }
    function pre_json($array)
    {
        foreach($array as $key => $val){
            $new[$key]['label'] = $val['name'];
            $new[$key]['id'] = $key;
            $new[$key]['value'] = $val['name'];
        }
        return $new;
    }
?>

В контроллере

<?ph
$search = $this->Data->get_update_name(trim(strip_tags($this->input->get('term'))));
$info['result'] = $this->Data->pre_json($search);
?>

И в view :

<?php
echo json_encode($result);
?>

И не забываем присвоить форме id =»autocomplete»

Codeigniter, проверка пароля из базы при помощи Ajax jQuery на примере PyroCMS

Все очень просто и понятно на странице формой пишем следующий скрипт:

$('input[name=password]').bind('keyup focus', function() {

$.post(base_url + 'index.php/ajax/confirm_database', {
server: $('input[name=hostname]').val(),
username: $('input[name=username]').val(),
password: $('input[name=password]').val()
}, function(data) {
if (data.success == 'true') {
$('#confirm_db').html(data.message).removeClass('failure').addClass('success');
}
else {
$('#confirm_db').html(data.message).removeClass('success').addClass('failure');
}
}, 'json'
);

});

проверка будет производиться по средством вызова скрипта index.php/ajax/confirm_database на стороне сервера:

<?php
public function confirm_database()
{

$server = $this->input->post('server');
$username = $this->input->post('username');
$password = $this->input->post('password');
$port = $this->input->post('port');

$host = $server . ':' . $port;

$link = @mysql_connect($host, $username, $password, TRUE);

if ( ! $link )
{
$data['success'] = 'false';
$data['message'] = lang('db_failure').mysql_error();
}
else
{
$data['success'] = 'true';
$data['message'] = lang('db_success');
}

// Set some headers for our JSON
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

echo json_encode($data);

}
?>

Codeigniter аутентификация через Ldap

Так, как последнее время я работаю используя Codeigniter, то соответственно начал искать модуль для LDAP аутентификации, в итоге, поиски привели меня на Хабр. Статья оказалась полезной, и помогла начать работу с библиотекой adldap.php

В процессе создания внутреннего сайта одной из российских компаний, возникла необходимость ограничить доступ пользователей к некоторым страницам, функциям. Так как все пользователи в домене, то и на сайте есть смысл использовать доменную аутентификацию.

Найти самостоятельно информацию в принципе не трудно. Поисковые системы еще ни кто не отменял. Я просто решил собрать найденные кусочки и объединить их в один, на русском языке.

Допустим, что CI уже установлен и настроен. Добавим библиотеку и конфигурационный файл.Конечно, существуют некоторые функции в самом PHP, но использовать их не всегда рационально. За основу возьмем библиотеку adLDAP. В ней есть все необходимое и даже больше.

Первым делом создадим конфигурационный файл, например adldap.php и положим его в \system\application\config\

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

$config['account_suffix'] = '@dom.ru';
$config['base_dn'] = 'DC=dom,DC=ru';
$config['domain_controllers'] = array ("DC01.dom.ru");
$config['ad_username'] = 'web_user';
$config['ad_password'] = 'web_passS8';
$config['real_primarygroup'] = true;
$config['use_ssl'] = false;
$config['use_tls'] = false;
$config['recursive_groups'] = true;
?>

Далее необходимо добавить библиотеку. Но как сделать так, что бы ей можно было пользоваться в CI, как остальными? За нас это уже сделал один программист, и предоставил для общественного пользования (онутверждает, что лицензия не нарушена). Ее мы и добавим в \system\libraries\ и назовем, например Adldap.php.

После выше описанных манипуляций библиотекой можно пользоваться в Codeigniter-е, как и другими, например:

<?php
$this->load->library('Adldap');
$this->adldap->authenticate($username, $password);
?>

Напишем небольшой код авторизации

Сделать это проще простого.
Во-первых, создадим форму для ввода логина и пароля:

<?php
<form_ action=«info.dom.ru/login/gateway» method=«post»>
<input_ name=«username» type=«text» value=«Логин»>
<input_ name=«password» type=«password» value=«Пароль»>
<input_ type=«submit» name=«submit» value=«Войти» />
</form_>
?>

Во-вторых, контролер и саму функцию для авторизации в домене. Но домен большой и пользователей много и если просто проверять пароль и логин, то к ограниченным частям сайта будут иметь все члены домена.

Для более тонкой настройки нужен еще один параметр для проверки — группа (Active Directory). Назовем ее, например Web_Group, и добавим нужных нам пользователей:

<?php
//Создаем контроллер
class login extends Controller {

//Функция для проверки логина, пароля и группы
function gateway() {

//Подключаем библиотеку
$this->load->library('Adldap');

//Проверяем логин и пароль
$authUser = $this->adldap->authenticate($this->input->post('username'), $this->input->post('password'));

//проверяем наличие пользователя в группе
$groupinfo = $this->adldap->user_ingroup($this->input->post('username'), 'Web_Group', 'NULL');

//В случае если $authUser и $groupinfo истина
if ($authUser === true and $groupinfo === true) {

//Осталось только добавить информацию в массив сессии о том, что проверка успешна и доступ к определенным ресурсам открыт
$data = array('username' => $this->input->post('username'), 'usergroup_access' => 'Web_Group', 'is_logged_in' => true);
$this->session->set_userdata($data);
redirect();
} else {
echo "Ошибка авторизации";
}
}
}
?>

Вот и все. Теперь в любой другой функции можно делать проверку и в зависимости от результата предоставлять или не предоставлять доступ.
Примерно это должно выглядеть так:

<?php
function view_data() {

//Вытаскиваем и проверяем прошел или нет пользователь авторизацию
if ($this->session->userdata('is_logged_in') == true) {

echo "Доступ к данным открыт";

} else {

echo "Доступ закрыт";
}
}
?>

Теперь осталось только дописать функцию уничтожения сессии (Logout):

<?php
function logout() {
$this->session->sess_destroy();
redirect();
}
?>

CodeIgniter Мои впечатления

Моему увлечению PHP не так уж много, всего около полу года, при этом, я стал замечать, что обрастаю небольшими файликами с постоянно необходимыми функциями — удалить, записать в MySQL, или функциями для форм, и так далее. И я начал задумываться о фреймворке. Выбор сначала пал на PHPCake, потратив какое-то время, и насладившись всеми прелестями документации класса — «Пойди туда не зная куда, и может быть, ты найдешь то, что тебе нужно» я решил обратить свое внимание на CodeIgniter(CI).

Установка оказалась очень простой — качаем и разархивируем пакет. Загружаем папку CI на сервер. открываем файл application/config/config.php и устанавливаем базовый URL. В application/config/database.php настраиваем подключение к базе. И конечно же, не забываем про минимальные требования, это PHP версии 5.1.6.

Для начинающих, я бы рекомендовал ознакомиться с видео уроками по настройке и установке CI — ссылка

Что я могу сказать, по прошествии недели я был готов приступить к работе, достаточно подробно изучив мануал, который, замечу, написан грамотно, четко и структурировано. А главное, простота использования, все что нужно — это создать контроллер, загрузить библиотеки, обработать и получить данные из Модели затем отправить результаты в Вид. К тому же CI отличается завидной скоростью работы, практически не влияя на общую производительность.

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

Скачать CI вы можете здесь — http://codeigniter.com/