@pantey

Алгоритм вывода контента с использованием ajax и cookie в drupal 7?

Привет. Ситуация такая, необходимо организовать вывод контента, в зависимости от значения cookie. Т.е. есть два варианта отображения ноды, (строка и блок), вывод меняется в зависимости от значения cookie, т.е. тупо использую проверку на cookie в node.tpl.php (хоть в hook_node_view - не суть). Все это дело конечно работает, т.е. по клику по кнопкам изменяю значение cookie, дальше страница перезагружается и получаем необходимый нам формат вывода.

Теперь в чем сложность? Все это дело отказывается правильно работать при использовании ajax. Т.е. по правилам PHP - присвоенные Cookie доступны при следующей загрузке страницы. Сейчас у меня алгоритм такой,
  1. Событие по кнопке (click)
  2. Изменяю значение cookie
  3. Далее функция которая производит рендер ноды (а там соответственно идет проверка на значение cookie)

но при таком алгоритме, первоначально забирается то значение cookie, которое было при загрузке страницы, а не то, которое было изменено по клику по кнопке. Вопрос, как в ajax забрать измененное значение cookie?

пример кода модуля
<?php

/**
 * Implements hook_menu()
*/
function module_menu() {
  $items['domptabview'] = array(
    'page callback' => 'ajax_link_response',
    'access callback' => 'user_access',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );
  return $items;
}


/**
 * Отдаем полученный результат браузеру
 */
function ajax_link_response($type = 'ajax', $nid = 0) {
  $output = _module_load_noder($nid);
  if($type == 'ajax'){
    $commands = array();
    
    $commands[] = ajax_command_replace('#block-system-main .view-content', '<div class="view-content">' .$output .'</div>');
    $page = array(
      '#type' => 'ajax',
      '#commands' => $commands
    );
    ajax_deliver($page);
  }else{
    $output = '<div class="view-content">' . $output . '</div>';
    return $output;
  }
}

/**
 * Получаем содержимое ноды и возвращаем HTML
 */
function _module_load_noder($nid = 0) {
  // загрузили ноду
  $node = node_load($nid, NULL, false);
  if ($node) {
    $vnode = node_view($node, 'teaser');
    return drupal_render($vnode);
  }
}

Уточню, что значение cookie меняю через jquery.cookie, опять же по событию по кнопке. Пробовал и внутри ajax присваивать (setcookie()), результат тот же.
  • Вопрос задан
  • 2825 просмотров
Пригласить эксперта
Ответы на вопрос 1
@man1982
Отсылай значение cookie и на сервер. Чтобы оно приходило в ajax_link_response как переменная
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы