CONTENT MANAGEMENT SYSTEM
Blox Logo
Blox CMS — блочный метод сайтостроения
.
 
Blox Help

←→

Пример: поиск с использованием Ajax

Функциональные возможности поисковой формы сайта можно улучшить, сделав поиск "живым". Пользователь начинает вводить фразу, и мгновенно отображаются результаты. Это действительно довольно удобно.

У нас будет простой блок с двумя текстовыми данными и поисковая форма с одним полем. Все подробности читайте в комментариях к коду.

classified.tdd

<?php

$titles[1] = 'Заголовок объявления';
$titles[2] = 'Текст объявления';

$types[1] = 'varchar(200)';
$types[2] = 'varchar(1000)';

$params['isMultiRec'] = true;
$params['part']['limit'] = 10;
$params['search']['atBeginning'] = true;
$params['search']['searchFields'] = array(1,2);

classified.tpl

<?php
# Форма поиска
if (!isset($_GET['ajaxSrc'])) # Не выводить, если запрос идет через Ajax
{
    # Инициализация функции Blox.ajax()
    Router::addToHead($GLOBALS['bloxUrl'].'/style/ajax.js');

    # Форма ввода поискового текста
    echo "
    <form action='?page=$page&block=$block' method='post'>
        <input
            type='text' name='search[1]'
            id='searchField'
            onkeyup='ajaxFunc($block)'
            value='{$search['searchTexts'][1]}'
        >
        # Когда Javascript отключен, команда на поисковый запрос делается через эту кнопку
        <input type='submit' value='Найти'>
    </form>
    ";
}

echo "<div id='ajaxDst'>";
# Вывод записей. Эта часть динамично изменяется при вводе текста в форму
foreach ($tab as $dat)
{
    echo "
    {$dat['edit']}
    <h3>$dat[1]</h3>
    <div>$dat[2]</div>
    <br />
    ";
}
echo "<div>";

classified.js


function ajaxFunc(block)
{
    // Извлечем поисковый текст из поля searchField
    var searchText = document.getElementById('searchField').value;

    // Закодируем для страховки поисковый текст, так как он будет передаваться через URL
    searchText = encodeURI(searchText);

    // С помощью Ajax получим код блока и поместим его в элемент шаблона ajaxDst
    Blox.ajax('?block='+block+'&ajaxSrc&s='+searchText, 'ajaxDst');
}

См. также