Изменения hook_views_pre_view теряются после Ajax - PullRequest
0 голосов
/ 02 мая 2019

У меня есть веб-сайт с продуктами, и у каждого из этих продуктов есть категория и подкатегория.У каждой категории и подкатегории есть отдельная страница.

Мой обзор продукта - это представление с некоторыми открытыми фильтрами (Материал, Цвет, Категория, Подкатегория). Если пользователь находится на выделенной странице, например, на странице Категории, для открытого фильтра "Категория" установлен текущийидентификатор узла и фильтр скрыты (выставлено = ложь).

Это работает при начальной загрузке страницы.Однако, если я изменяю фильтры (изменяю Цветовой фильтр для ex), выполняется вызов Ajax, и категория фильтра снова отображается и больше не выбирается для идентификатора текущего узла.

 /*
     * If view is products and block_1
     */
    if($view->id() == 'products') {
        if($view->current_display == 'block_1'){
            //Get current node
            $current_node = \Drupal::routeMatch()->getParameter('node');

            //If current node is a category set the category filter and de-expose the filter
            if(!empty($current_node) AND $current_node->bundle()=="category"){
                $filters = $view->display_handler->getOption('filters');
                foreach ($filters as $key => &$filter){
                    if($key=="field_category_node_target_id"){
                        $filter["value"]=array($current_node->id());
                        $filter["exposed"]=false;
                    }
                    //Color and material should only be exposed on lower levels
                    if($key=="field_main_material_target_id"){
                        $filter["exposed"]=false;
                    }
                    if($key=="field_main_color_target_id"){
                        $filter["exposed"]=false;
                    }
                }
                $view->display_handler->overrideOption('filters', $filters);
            }
            //If current node is a subcategory set the subcategory filter and de-expose the filter
            if(!empty($current_node) AND $current_node->bundle()=="subcategory"){
                $filters = $view->display_handler->getOption('filters');
                foreach ($filters as $key => &$filter){
                    if($key=="field_category_node_target_id"){
                        $filter["exposed"]=false;
                    }
                    if($key=="field_subcategory_target_id"){
                        $filter["value"]=array($current_node->id());
                        $filter["exposed"]=false;
                    }
                }
                $view->display_handler->overrideOption('filters', $filters);
            }
        }
    }

Я хочу, чтобы вызов Ajax зацикливалсячерез этот крючок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...