Задать вопрос
@pantey

Получить значение куки через ajax?

Всем привет. Туплю.
Ситуация в следующем, есть созданное представление (view), которая выводит ноды. Данное представление имеет возможность сортировки, значение для сортировки храню в куках, которые забираю в hook_views_query_alter и на основе данного значения использую ту или иную сортировку для вьюхи.
function hook_views_query_alter(&$view, &$query) {
  if($view->name == 'product'){

    # Сортировка полей
    $sorting_field = 'default';
    if(isset($_COOKIE['sorting_field'])){
      $sorting_field = $_COOKIE['sorting_field'];
    }

    $sort_default = $view->query->orderby[0];
    $sort_price_asc = $view->query->orderby[1];
    $sort_price_desc = $view->query->orderby[2];

    unset($view->query->orderby[0]);
    unset($view->query->orderby[1]);
    unset($view->query->orderby[2]);

    # Дефолтная сортировка (по дате)
    if($sorting_field == 'default'){
      $view->query->orderby[0] = $sort_default;
    }

    # Сортировка по цене (по возрастанию)
    if($sorting_field == 'price_asc'){
      $view->query->orderby[1] = $sort_price_asc;
    }

    # Сортировка по цене (по убыванию)
    if($sorting_field == 'price_desc'){
      $view->query->orderby[1] = $sort_price_desc;
    }

  }
}

на данном этапе все отлично. Так же, естественно, есть кастомная форма из модуля, которая содержит варианты сортировки
function hook_form($form, &$form_state){

  $form = array();

  # Ctools autosubmit
  ctools_add_js('auto-submit');
  $form['#attributes']['class'][] = 'ctools-auto-submit-full-form';

  # Сортировка
  $sorting_options = array(
    'price_asc' => 'цена 1',
    'price_desc' => 'цена 2',
    'default' => 'без сортировки'
  );

  $form['sorting'] = array(
    '#type' => 'select',
    '#title' => 'Сортировать по:',
    '#options' => $sorting_options,
    '#default_value' => isset($_COOKIE['sorting_field']) ? $_COOKIE['sorting_field'] : 'default',
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Сортировать',
    '#ajax' => array(
      'callback' => 'skate_product_sort_form_submit',
      'event' => 'click',
    ),
    '#attributes' => array('class' => array('ctools-use-ajax', 'ctools-auto-submit-click')),
  );

  return $form;

}

и соответственно submit
function hook_form_submit($form, &$form_state){

  # Время хранения cookie
  # По умолчанию на 30 дней
  $time_cookie = time()+60*60*24*30;

  # Домен
  $domain = str_replace('http://', '', $GLOBALS['base_root']);

  # Сохраняем в куки сортировку по полю
  $sort_field = $form_state['values']['sorting'];
  setcookie('sorting_field', $sort_field, $time_cookie, '/', $domain);

  $commands = array();

  # Результат представления
  $result_output = views_embed_view('product', 'page');
  $commands[] = ajax_command_invoke('.selector', 'html', array($result_output));

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

}

Теперь вопрос, как заставить работать это дело через AJAX, ведь новое значение в куках будет доступно только после обновления страницы. Или есть возможность, так же обновить HTTP заголовки через AJAX, до вызова hook_views_query_alter ? Может гуру решали подобное ?
  • Вопрос задан
  • 170 просмотров
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

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