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

←→

Простые примеры использования Ajax

Общий пример

Ниже приведен самый общий пример использования Ajax.

test.tpl

<?php
    # Подключения файла ajax.js в заголовке страницы 
    Router::addToHead($GLOBALS['bloxUrl'].'/style/ajax.js');

    # Кнопка управления
    echo "<span onclick='Blox.ajax(\"templates/src.htm\", \"dst\");'>Заменить</span>";
?>

dst.tpl

<?php
    . . .
    # Контейнер назначения
    echo "<div id='dst'>Содержимое по умолчанию</div>";
    . . .
?>

src.htm (источник контента)

Этот html-код будет вставлен<br />
в элемент <i>dst</i><br />
блока с шаблоном <i>dst.tpl</i>.

В данном примере источник выдает статичный контент. На практике для генерации контента лучше использовать php-файлы. Однако, если в этом php-файле нужно обращаться к базе данных или сессии, то придется писать скрипты для подключения базы данных и сессии, а также учесть другие мелочи (в частности, учесть особенности кодировки UTF-8).

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

Блок, как источник контента

Обратиться можно к любому блоку сайта, даже к блокам на других страницах (кроме скрытых).

test.tpl

<?php
    Router::addToHead($GLOBALS['bloxUrl'].'/style/ajax.js');
    echo "<span onclick='Blox.ajax(\"?block=2\", \"dst\");'>Заменить</span>";
?>

dst.tpl

<?php
    . . .
    echo "<div id='dst'>Содержимое по умолчанию</div>";
    . . .
?>

Как использовать блок в качестве источника, читайте в статье Вывод отдельного блока.

Блок, как назначение контента
(содержимое блока заменяется другим блоком)

В приведенном ниже примере содержимое блока 24 заменяется блоком 25.

test.tpl

<?php
    echo "<span onclick='Blox.ajax(\"?block=25\", \"24\");'>Заменить</span>";
?>

dst.tpl

dst.tdd

<?php
    # Это блок 24
    echo "Содержимое по умолчанию";
?>
<?php
    $params['ajax'] = true;
?>

Чтобы назначением сделать весь блок, нужно:
  • в дескриптор шаблона добавить параметр $params['ajax']=true;;
  • во втором аргументе функции Blox.ajax() указать номер блока, а не id.

Когда в дескрипторе шаблона объявлен параметр $params['ajax'], блок при выводе автоматически помещается в контейнер вида <div id='BloxAjaxDstBlock24'>...</div>, где, 24 - номер блока. То есть, специально создавать элемент назначения не требуется.

Не требуется также специально инициализировать функцию Blox.ajax(), это будет сделано автоматически.

Обновление блока (источник и назначение совпадают)

Наиболее простой и одновременно наиболее полезный пример применения Ajax в системе Blox CMS демонстрирует следующий код:

test.tpl

<?php
    echo "
    <span onclick='Blox.ajax(\"?block=$block&sort[1]\");'>Сортировать</span>
    ";
?>

test.tdd

<?php
    $types[1] = 'varchar(255)';
    $params['ajax'] = true;
?>

Как Вы, наверное, заменили, у функции Blox.ajax() здесь используется только один аргумент, который является обычным запросом к блоку.

Как обновлять блок с помощью Ajax

  1. В дескрипторе шаблона блока, который должен обновляться сделайте запись: $params['ajax'] = true;
  2. В шаблоне управляющего блока создайте элемент, вызывающий JavaScript функцию Blox.ajax('?block=...'). В качестве аргумента этой функции используйте обычный запрос* к блоку, который должен обновляться.

Одновременное обновление нескольких блоков

test0.tpl

<?php echo "
    <span
    onclick='Blox.ajax(\"?block=2&sort[1]\"); Blox.ajax(\"?block=3&pick[1]=Иванов\")'
    >Кликни</span>
"; ?>

test1.tdd

test2.tdd

<?php
    $types[1] = 'varchar(255)';
    $params['ajax'] = true;
?>
<?php
    $types[1] = 'varchar(255)';
    $params['ajax'] = true;
?>

Примечания

  • Во всех примерах управляющим элементов служит тег <span>, в стиль которого необходимо добавить свойства курсора. Впрочем, на практике используется другой код, приведенный в следующей статье – там используется тег <a>.