Вед-дев, Сео, Манимейкинг

Drupal 7 Ajax Framework простой пример

В Drupal 7 есть встроенный Ajax фреймворк (в Drupal 6 он назывался ahah), при помощи которого можно не писать ни единной строчки js кода.

Здесь вы можете более подробнее ознакомиться с ним https://api.drupal.org/api/drupal/includes!ajax.inc/group/ajax/7

Сегодня мы рассмотрим самый простой пример использования ajax фреймворка. Мы будем делать обычную ссылку при клике на которую будет показываться какой-либо блок друпала. Всё это нужно делать в своём модуле.

Ссылка в блоке

Чтобы ссылка была аджаксофицирована, нужно использовать класс use-ajax и путь который мы укажем в hook_menu(). Мы будем показывать нашу ссылку в блоке, для этого нужно использовать 2 хука: hook_block_info() и hook_block_view()

function custom_block_view($delta = '') {
  switch($delta) {
    case 'your_block':
      $block = array(
        'subject' => t('Simple ajax link'),
        'content' => '<a href="/ajax-block/nojs" class="use-ajax">Click me!</a>',
      );

      // ajax framework
      drupal_add_library('system', 'drupal.ajax');
      drupal_add_library('system', 'jquery.form');
      break;
  }
  return $block;
}

Если вы незнаете как правильно создавать блоки в модуле, то посмотрите тут.

hook_menu()

function custom_menu() {
  $items = array();

  $items['ajax-block'] = array(
   'title' => 'Ajax test callback',
   'type' => MENU_CALLBACK,
   'page callback' => 'ajax_link_callback', // содержимое, которое появляется при нажатии на нашу ссылку
   'delivery callback' => 'ajax_deliver',
   'access arguments' => array('access content'),
  );
}

Ajax callback

function ajax_link_callback($mode = NULL) {

  if ($mode != 'ajax') {
    drupal_set_message('Turn Javascript');
    drupal_goto(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '<front>');
  }

  $commands = array();

  $commands[] = ajax_command_html('.region', block_loader());

  return array('#type' => 'ajax', '#commands' => $commands);
}

block_loader()

function block_loader() {
  $block = block_load('block', 1);
  $content = render(_block_get_renderable_array(_block_render_blocks(array($block))));

  return $content;
}

Это самый простой пример использования Ajax фреймворка. Далее будут более сложные примеры =)



Комментарии (3)

Здравствуйте! Опять я. Сделала все по примеру, но при клике на ссылку вылезает ошибка clip2net.com/s/78UnPK. Такое возможно из-за версии jQuery Update? На сайте установлено jQuery Update.
Спасибо.

Ой, последняя фраза не удалась, вот так: На сайте установлено jQuery 1.5.2 and jQuery UI 1.8.11.

Доброй ночи, это не из-за версии jQuery. Проверьте ваш код на ошибки еще раз, а также, можно попробовать заместо блока при клике, вывести обычный текст для проверки.

Разделы

Подписаться

Подписка на RSS-лента последние записи из Блога

Комменты

  • Olzhas 10 месяцев 3 недели назад
    Спасибо. С Новым Годом! 
  • Den 11 месяцев 2 недели назад
    В первой функции, при создании переменной $li_previous нужно поменять '←' с NULL, в $li_next сделать тоже самое. 
  • Гость 11 месяцев 2 недели назад
    Если все ровно так как было описано, то нет никаких сомнений что домен увел сам регистратор. Потому что вероятность того 
  • Валерий 1 год 1 неделя назад
    да можно делать импорт-экспорт только лишь в оболочке на входя на mysql сервер 
  • admin 1 год 2 недели назад
    Валерий, а зачем вам именно так делать экспорт? Если я не ошибаюсь, то там нет какой-либо команды чтобы сделать экспорт 
  • Валерий 1 год 2 недели назад
    захожу на mysql через ssh по команде  
  • admin 1 год 2 недели назад
    Добрый вечер, какой у вас клиент? 
  • Валерий 1 год 2 недели назад
    Здравстуйте, есть команда чтобы сделать экспорт базы внутри mysql клиента? 
  • Eduard 1 год 1 месяц назад
    Видать, домен хороший был. Заявление пробывали писать на мошенника? 
  • Stas 1 год 2 месяца назад
    Ошибка в ключе квантификатора - replace(/будешь|пить/ig, "хлеб"); Указать -g для прохода по всем совпадениям!