[Решено] Views и cookie

Главные вкладки

Аватар пользователя _Maxim_ _Maxim_ 23 декабря 2016 в 13:31

Добрый день!
Помогите, пожалуйста, найти решение.
Есть главная страница с картинками, созданная на views. Посетителю сайта на определенной странице добавляется в cookie значение. Как сделать, чтобы на главной странице проверялось наличие этой куки? И чтобы картинки на этой странице выводились в соответствии с этим значением.
Я так понимаю, нужно в sql-запрос views добавить условие проверки куки? Как это сделать? Или может есть другие варианты? Подскажите, пожалуйста.

Комментарии

Аватар пользователя VasyOK VasyOK 24 декабря 2016 в 15:03

http://florange-konsultant.ru/nizhnee-bele-komfort/nabila - javascript + cookie -- перключается режим сеткой/строками. Точно так же

Кусок из CSS:

.variants .views-row { /*строками*/
    clear: both;
    float: left;
    width: 100%;
}
 .kletkoi .variants .views-row { /*клеткой*/
    clear: none;
    float: left;
    width: 33.33%;
}

JS:

(function ($) {
 Drupal.behaviors.underwearTheme = {
  attach: function(context, settings) {                    
           
    function setMyCookie() {
      myCookieVal = $('.t-content').hasClass('kletkoi') ? 'isActive' : 'notActive';
      $.cookie('myCookieName', myCookieVal, { path: '/' });    
    }

    if ($.cookie('myCookieName') == 'isActive') {
        $('.t-content').addClass('kletkoi');    
    } else {
        $('.t-content').removeClass('kletkoi');
    }
   
    $(".t-kletkoi").click(function(){
        $(".t-content").toggleClass("kletkoi",true);
        $(".t-content").toggleClass("strokami",false);          
        setMyCookie();
    });
   
    $(".t-strokami").click(function(){
        $(".t-content").toggleClass("kletkoi",false);        
        $(".t-content").toggleClass("strokami",true);
        setMyCookie();  
    });  
   
  }
 };

думаю так же можно и картинку

Аватар пользователя _Maxim_ _Maxim_ 8 января 2017 в 3:26

Большое вам спасибо, что предложили помощь!

VasyOK, к сожалению ваше решение не подошло. Дело в том, что на странице есть pager и сортировка. И если выбрать отображение картинок только с определенным параметром, для примера возьмем размер картинок, то должны выводятся только изображения, соответствующие этому размеру. Можно, конечно, скрыть скриптом изображения других размеров, но тогда будут появляться пустые страницы пагинации. Думаю, в этом случае, нужно использовать sql-запросы в базу данных, чтобы pager сразу выводил только то, что нужно.

sas@drupal.org, потратив несколько часов я так и не понял, как использовать modules/user/user.module в данном случае.

Но все равно большое вам спасибо, что отозвались на просьбу о помощи!

Аватар пользователя _Maxim_ _Maxim_ 8 января 2017 в 3:28

Решил проблему так:

Отключил представления и создал те же страницы через hook_menu. В запрос:

$query = db_select('node', 'n')->extend('PagerDefault')->LIMIT(20);
...

добавил эти строки:

IF (isset($_COOKIE['sizes_sort'])) {
  $query->innerJoin('field_data_field_sizes', 'sizes', 'sizes.entity_id = n.nid');
  $query->condition("sizes.field_sizes_value", $_COOKIE['sizes_sort']);
}

Вопрос, частично, решился и на страницах, созданных через хук все заработало, как надо. Плюс это дало определенную гибкость в настройках фильтров. Но есть несколько страниц таксономии, на которых тоже должны действовать cookie. Для этого я внес такие же изменения в файл /modules/taxonomy/taxonomy.module

$query = db_select('taxonomy_index', 't');
IF (isset($_COOKIE['sizes_sort'])) {
  $query->innerJoin('field_data_field_sizes', 'sizes', 'sizes.entity_id = t.nid');
  $query->condition("sizes.field_sizes_value", $_COOKIE['sizes_sort']);
}

Единственная проблема такого подхода, при обновлении Drupal нужно будет снова прописывать этот код в /modules/taxonomy/taxonomy.module

Если знаете решение лучше - поделитесь, пожалуйста, им здесь. Буду благодарен!