Привет. Ситуация такая, необходимо организовать вывод контента, в зависимости от значения cookie. Т.е. есть два варианта отображения ноды, (строка и блок), вывод меняется в зависимости от значения cookie, т.е. тупо использую проверку на cookie в node.tpl.php (хоть в hook_node_view - не суть). Все это дело конечно работает, т.е. по клику по кнопкам изменяю значение cookie, дальше страница перезагружается и получаем необходимый нам формат вывода.
Теперь в чем сложность? Все это дело отказывается
правильно работать при использовании ajax. Т.е. по правилам PHP - присвоенные Cookie доступны при следующей загрузке страницы. Сейчас у меня алгоритм такой,
- Событие по кнопке (click)
- Изменяю значение cookie
- Далее функция которая производит рендер ноды (а там соответственно идет проверка на значение 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()), результат тот же.