Jump to content
Sign in to follow this  
WellChuck

Seo URL - Opencart 2.3.0.2

Recommended Posts

То-есть даже пытаться не стоит?

 

Может вы можете что-то в качестве альтернативы подкинуть?

На форуме есть неплохие темы, с вменяемым кодом

 

То что в том "позоре" - делается элементарно очень просто и не надо этой навозной кучи говнокода.

Явно автор темы не программист, а модулей "насшибал"  у бедолаг с подвалов Мумбаи

Share this post


Link to post
Share on other sites

Логично.

 

А код модуля действительно местами не очень. Ну и, за отсутствие поддержки ЧПУ действительно можно было бы от автора потребовать либо исправлений, либо компенсации.

Совершенно верно.

 

К чему я и клоню ТС - что если только в этом участке обнаружен такой говнокод то представляю что там дальше

Share this post


Link to post
Share on other sites
В 12.01.2017 в 02:38, WellChuck сказал:

Уважаемые гуру, очень нуждаюсь в вашей помощи!

 

Собственно возникла проблема с работоспособность seo url в Opencart 2.3.0.2. Точнее сами ссылки работают, проблема заключается в том, что перестает работать пагинация, сортировка и лимиты товаров на страницу категории. В одной из тем дали ссылку на такое решение.

Вот только проблем с появлением ?page={page}, у меня нет...

Ссылки генерируются, но не прожимаются  :mellow:


<a href="javascript:void(0);" onclick="oclayerednavigationajax.filter("http://site/kabel?page=2")">2</a>

Куда копать?

Что делать?  :mellow:

Была такая же проблема. Решение:в файле /catalog/view/javascript/opentheme/oclayerednavigation/oclayerednavigation.js

закоментируйте строки

 /* Modify pagination links */
    // paginationChangeAction: function () {
    //     $('.layer-category .custom-category .pagination a').each(function () {
    //         var href = $(this).attr('href');
    //         $(this).attr('onclick', 'oclayerednavigationajax.filter("'+ href +'")');
    //         $(this).attr('href', 'javascript:void(0);');
    //     });
    // }

Мне помогло.

Share this post


Link to post
Share on other sites
9 часов назад, s4ik сказал:

Решение:в файле /catalog/view/javascript/opentheme/oclayerednavigation/oclayerednavigation.js

закоментируйте строки

Это не решение, а заплатка ломающая аякс навигацию. Решение на предыдущей странице.

Share this post


Link to post
Share on other sites
В 07.08.2017 в 20:41, Dotrox сказал:

Это не решение, а заплатка ломающая аякс навигацию. Решение на предыдущей странице.

только небольшая поправка, код

<div id="content" class="<?php echo $class; ?>"><?php echo $content_top; ?>

нужно заменить на код

<div id="content" data-path="<?php echo $path; ?>" class="<?php echo $class; ?>"><?php echo $content_top; ?>

не в файле /catalog/view/theme/__шаблон__/template/product/category.tpl а в файле

catalog/view/theme/ваш_шаблон/template/extension/module/oclayerednavigation/occategory.tpl

а так в целом все ок, проверено, работает

Edited by dmal85

Share this post


Link to post
Share on other sites
В 07.08.2017 в 20:41, Dotrox сказал:

Это не решение, а заплатка ломающая аякс навигацию. Решение на предыдущей странице.

Возникла та же самая проблема с пагинацией и сортировкой на странице категории товаров. Сделала все по вашей инструкции, но проблема так и осталась. Ссылка при нажатии на следующую страницу выглядит: 

<a href="javascript:void(0);" onclick="oclayerednavigationajax.filter("javascript:void(0);")">2</a>

Подскажите, что делаю не так.

 

 

Share this post


Link to post
Share on other sites
12 минут назад, Melvich сказал:

Ссылка при нажатии на следующую страницу выглядит: 


<a href="javascript:void(0);" onclick="oclayerednavigationajax.filter("javascript:void(0);")">2</a>

Подскажите, что делаю не так.

Ссылка не должна так выглядеть.

Если она так выглядела изначально, значит у вас другая версия модуля и нужно заново разбираться.

Share this post


Link to post
Share on other sites

Ребят, кто подскажет как вернуть стандартную пагинацию? сейчас такая:

/index.php?route=extension/module/oclayerednavigation/category&path=85&page=2

Файл oclayerednavigation.js

$(document).ready(function() {
    oclayerednavigationajax.productViewChange();
    oclayerednavigationajax.paginationChangeAction();
});

var oclayerednavigationajax = {

    /* Filter action */
    'filter' : function(filter_url) {
        var old_route = 'route=product/category';
        var new_route = 'route=extension/module/oclayerednavigation/category';
        if(filter_url.search(old_route) != -1) {
            filter_url = filter_url.replace(old_route, new_route);
        }

        if(filter_url.search(new_route) != -1) {
            $.ajax({
                url         : filter_url,
                type        : 'get',
                beforeSend  : function () {
                    $('.layered-navigation-block').show();
                    $('.ajax-loader').show();
                },
                success     : function(json) {
                    $('.filter-url').val(json['filter_action']);
                    $('.price-url').val(json['price_action']);
                    $('.custom-category').html(json['result_html']);
                    $('.layered').html(json['layered_html']);
                    oclayerednavigationajax.paginationChangeAction();
                    oclayerednavigationajax.productViewChange();
                    $('.layered-navigation-block').hide();
                    $('.ajax-loader').hide();
                }
            });
        }

    },

    /* Use again and update ajaxComplete from common.js */
    'productViewChange' : function() {
        // Product List
        $('#list-view').click(function() {
            $('#content .product-layout > .clearfix').remove();

            $('#content .product-layout').attr('class', 'product-layout product-list col-xs-12');

            localStorage.setItem('display', 'list');
        });

        // Product Grid
        $('#grid-view').click(function() {
            $('#content .product-layout > .clearfix').remove();

            // What a shame bootstrap does not take into account dynamically loaded columns
            cols = $('#column-right, #column-left').length;

            if (cols == 2) {
                $('#content .product-layout').attr('class', 'product-layout product-grid col-md-6 col-sm-12 col-xs-12 two-items');
            } else if (cols == 1) {
                $('#content .product-layout').attr('class', 'product-layout product-grid col-md-4 col-sm-6 col-xs-12 three-items');
            } else {
                $('#content .product-layout').attr('class', 'product-layout product-grid col-md-3 col-sm-6 col-xs-12 four-items');
            }

            localStorage.setItem('display', 'grid');
        });

        if (localStorage.getItem('display') == 'list') {
            $('#list-view').trigger('click');
        } else {
            $('#grid-view').trigger('click');
        }
    },
    
    /* Modify pagination links */
    // paginationChangeAction: function () {
    //     $('.layer-category .custom-category .pagination a').each(function () {
    //         var href = $(this).attr('href');
    //         // $(this).attr('onclick', 'oclayerednavigationajax.filter("'+ href +'")');
    //         // $(this).attr('href', 'javascript:void(0);');
    //     });
    // }

};

 

Share this post


Link to post
Share on other sites
2 часа назад, wlll сказал:

 


    /* Modify pagination links */
    // paginationChangeAction: function () {
    //     $('.layer-category .custom-category .pagination a').each(function () {
    //         var href = $(this).attr('href');
    //         // $(this).attr('onclick', 'oclayerednavigationajax.filter("'+ href +'")');
    //         // $(this).attr('href', 'javascript:void(0);');
    //     });
    // }

 

Если этот код у вас действительно закомментирован, то ссылки пагинации не должны подменяться, но должна быть ошибка js поскольку выше есть вызов этой функции.

 

Посмотрите в консоли браузера: если ошибка есть - значит ссылки ещё раньше подменяются модификаторами (или оно так изначально в шаблоне), если ошибки нет - значит у вас используется код не из этого файла.

Share this post


Link to post
Share on other sites
23 часа назад, Dotrox сказал:

Ссылка не должна так выглядеть.

Если она так выглядела изначально, значит у вас другая версия модуля и нужно заново разбираться.

 

Ссылка изначально так выглядела до внесения правок. Файл oclayerednavigation.js совпадает с файлом автора.

$(document).ready(function() {
    oclayerednavigationajax.productViewChange();
    oclayerednavigationajax.paginationChangeAction();
});

var oclayerednavigationajax = {

    /* Filter action */
    'filter' : function(filter_url) {
        var old_route = 'route=product/category';
        var new_route = 'route=extension/module/oclayerednavigation/category';
        if(filter_url.search(old_route) != -1) {
            filter_url = filter_url.replace(old_route, new_route);
        }

        if(filter_url.search(new_route) != -1) {
            $.ajax({
                url         : filter_url,
                type        : 'get',
                beforeSend  : function () {
                    $('.layered-navigation-block').show();
                    $('.ajax-loader').show();
                },
                success     : function(json) {
                    $('.filter-url').val(json['filter_action']);
                    $('.price-url').val(json['price_action']);
                    $('.custom-category').html(json['result_html']);
                    $('.layered').html(json['layered_html']);
                    oclayerednavigationajax.paginationChangeAction();
                    oclayerednavigationajax.productViewChange();
                    $('.layered-navigation-block').hide();
                    $('.ajax-loader').hide();
                }
            });
        }

    },

    /* Use again and update ajaxComplete from common.js */
    'productViewChange' : function() {
        // Product List
        $('#list-view').click(function() {
            $('#content .product-layout > .clearfix').remove();

            $('#content .product-layout').attr('class', 'product-layout product-list col-xs-12');

            localStorage.setItem('display', 'list');
        });

        // Product Grid
        $('#grid-view').click(function() {
            $('#content .product-layout > .clearfix').remove();

            // What a shame bootstrap does not take into account dynamically loaded columns
            cols = $('#column-right, #column-left').length;

            if (cols == 2) {
                $('#content .product-layout').attr('class', 'product-layout product-grid col-md-6 col-sm-12 col-xs-12 two-items');
            } else if (cols == 1) {
                $('#content .product-layout').attr('class', 'product-layout product-grid col-md-4 col-sm-6 col-xs-12 three-items');
            } else {
                $('#content .product-layout').attr('class', 'product-layout product-grid col-md-3 col-sm-6 col-xs-12 four-items');
            }

            localStorage.setItem('display', 'grid');
        });

        if (localStorage.getItem('display') == 'list') {
            $('#list-view').trigger('click');
        } else {
            $('#grid-view').trigger('click');
        }
    },
    
    /* Modify pagination links */
    paginationChangeAction: function () {
        $('.layer-category .custom-category .pagination a').each(function () {
            var href = $(this).attr('href');
            $(this).attr('onclick', 'oclayerednavigationajax.filter("'+ href +'")');
            $(this).attr('href', 'javascript:void(0);');
        });
   }

};

При комментировании строк , как советовали выше, пагинация слетает.

Share this post


Link to post
Share on other sites
52 минуты назад, Melvich сказал:

При комментировании строк , как советовали выше, пагинация слетает.

Вероятно, у вас другая версия шаблона или конфликт с чем-то. Надо на сайт глянуть.

Share this post


Link to post
Share on other sites
26 минут назад, Melvich сказал:

У вас таки другая версия шаблона. Тут изначально на странице ссылки пагинации ведут на этот модуль, потому пагинация и слетает при комментировании кода.

 

Вообще, у вас там с вёрсткой какая-то жуть творится (доктайпа нет, содержимое head в body, незакрытые теги). Плюс, есть куски js, которые по несколько раз повторяются, например, тот, который в конец страницы воткнут (я так понимаю, это бесконечный скролл товаров), в нём ещё и ошибка:

autoscroller.loading = ;

Вероятно, там из php должно было значение подставится, но не подставилось.

Share this post


Link to post
Share on other sites

Прокрутка на сайте тоже не сработала, а ошибка с пагинацией возникла до ее добавления.

Верстка вся шаблонная, ее не трогала. Есть ли смысл возиться с этим шаблоном и его модулями, жалко потраченного на него времени! Или проще все снести и создать сайт заново с вменяемым шаблоном?

Share this post


Link to post
Share on other sites
В 13.12.2017 в 15:55, wlll сказал:

Ребят, кто подскажет как вернуть стандартную пагинацию? сейчас такая:

/index.php?route=extension/module/oclayerednavigation/category&path=85&page=2

Файл oclayerednavigation.js

Спойлер


$(document).ready(function() {
    oclayerednavigationajax.productViewChange();
    oclayerednavigationajax.paginationChangeAction();
});

var oclayerednavigationajax = {

    /* Filter action */
    'filter' : function(filter_url) {
        var old_route = 'route=product/category';
        var new_route = 'route=extension/module/oclayerednavigation/category';
        if(filter_url.search(old_route) != -1) {
            filter_url = filter_url.replace(old_route, new_route);
        }

        if(filter_url.search(new_route) != -1) {
            $.ajax({
                url         : filter_url,
                type        : 'get',
                beforeSend  : function () {
                    $('.layered-navigation-block').show();
                    $('.ajax-loader').show();
                },
                success     : function(json) {
                    $('.filter-url').val(json['filter_action']);
                    $('.price-url').val(json['price_action']);
                    $('.custom-category').html(json['result_html']);
                    $('.layered').html(json['layered_html']);
                    oclayerednavigationajax.paginationChangeAction();
                    oclayerednavigationajax.productViewChange();
                    $('.layered-navigation-block').hide();
                    $('.ajax-loader').hide();
                }
            });
        }

    },

    /* Use again and update ajaxComplete from common.js */
    'productViewChange' : function() {
        // Product List
        $('#list-view').click(function() {
            $('#content .product-layout > .clearfix').remove();

            $('#content .product-layout').attr('class', 'product-layout product-list col-xs-12');

            localStorage.setItem('display', 'list');
        });

        // Product Grid
        $('#grid-view').click(function() {
            $('#content .product-layout > .clearfix').remove();

            // What a shame bootstrap does not take into account dynamically loaded columns
            cols = $('#column-right, #column-left').length;

            if (cols == 2) {
                $('#content .product-layout').attr('class', 'product-layout product-grid col-md-6 col-sm-12 col-xs-12 two-items');
            } else if (cols == 1) {
                $('#content .product-layout').attr('class', 'product-layout product-grid col-md-4 col-sm-6 col-xs-12 three-items');
            } else {
                $('#content .product-layout').attr('class', 'product-layout product-grid col-md-3 col-sm-6 col-xs-12 four-items');
            }

            localStorage.setItem('display', 'grid');
        });

        if (localStorage.getItem('display') == 'list') {
            $('#list-view').trigger('click');
        } else {
            $('#grid-view').trigger('click');
        }
    },
    
    /* Modify pagination links */
    // paginationChangeAction: function () {
    //     $('.layer-category .custom-category .pagination a').each(function () {
    //         var href = $(this).attr('href');
    //         // $(this).attr('onclick', 'oclayerednavigationajax.filter("'+ href +'")');
    //         // $(this).attr('href', 'javascript:void(0);');
    //     });
    // }

};

 

 

 

Скорей всего урлы подменяются в файле oclayerednavigation.php, но не могу найти где именно. Кто подскажет?

Спойлер

<?php

class ControllerExtensionModuleOclayerednavigation extends Controller
{
    /**
     * Load layered navigation block
     */
    public function index() {
        if (isset($this->request->get['path'])) {
            $parts = explode('_', (string)$this->request->get['path']);
        } else {
            $parts = array();
        }

        $category_id = end($parts);

        $this->load->model('catalog/category');

        $category_info = $this->model_catalog_category->getCategory($category_id);

        $data = array();

        if ($category_info) {
            $this->load->language('extension/module/oclayerednavigation');
			
			$data['text_byprice'] = $this->language->get('text_byprice');

            $data['heading_title'] = $this->language->get('heading_title');

            $data['button_filter'] = $this->language->get('button_filter');

            $url = '';

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            $data['action'] = str_replace('&amp;', '&', $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . $url);
            $data['clear_action'] = str_replace('&amp;', '&', $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id);

            if (isset($this->request->get['filter'])) {
                $data['filter_category'] = explode(',', $this->request->get['filter']);
            } else {
                $data['filter_category'] = array();
            }

            $this->load->model('catalog/product');

            // Min price and Max price of product collection
            /* Begin */
            $min_price = 10000000;  // Set the large number
            $max_price = 0;         // Set the small number

            $data['products'] = array();

            $filter_data = array(
                'filter_category_id' => $category_id
            );

            $results = $this->model_catalog_product->getProducts($filter_data);

            foreach($results as $result) {
                $price = (float) $result['price'];

                if($price < $min_price) {
                    $min_price = $price;
                }

                if($price > $max_price) {
                    $max_price = $price;
                }
            }

            $rate = (float) $this->currency->getValue($this->session->data['currency']);

            $data['min_price'] = ceil($min_price * $rate);
            $data['max_price'] = round($max_price * $rate);

            $data['currency_symbol'] = $this->currency->getSymbolLeft($this->session->data['currency']);
            /* End */

            $data['filter_groups'] = array();

            $filter_groups = $this->model_catalog_category->getCategoryFilters($category_id);

            if ($filter_groups) {
                foreach ($filter_groups as $filter_group) {
                    $childen_data = array();

                    foreach ($filter_group['filter'] as $filter) {
                        $filter_data = array(
                            'filter_category_id' => $category_id,
                            'filter_filter'      => $filter['filter_id']
                        );

                        $childen_data[] = array(
                            'filter_id' => $filter['filter_id'],
                            'name'      => $filter['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
                            'e_name'    => $filter['name']
                        );
                    }

                    $data['filter_groups'][] = array(
                        'filter_group_id' => $filter_group['filter_group_id'],
                        'name'            => $filter_group['name'],
                        'filter'          => $childen_data
                    );
                }
            }
        }

            return $this->load->view('extension/module/oclayerednavigation/oclayerednavigation.tpl', $data);
    }

    /**
     * Load Layer after filter
     */
    public function layer() {
        if (isset($this->request->get['path'])) {
            $parts = explode('_', (string)$this->request->get['path']);
        } else {
            $parts = array();
        }

        $category_id = end($parts);

        $this->load->model('catalog/category');

        $category_info = $this->model_catalog_category->getCategory($category_id);

        if ($category_info) {
            $this->load->language('extension/module/oclayerednavigation');
			$data['text_byprice'] = $this->language->get('text_byprice');

            $data['clear_action'] = str_replace('&amp;', '&', $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id);

            if (isset($this->request->get['filter'])) {
                $data['filter_category'] = explode(',', $this->request->get['filter']);
            } else {
                $data['filter_category'] = array();
            }

            $this->load->model('catalog/product');

            // Min price and Max price of product collection
            /* Begin */
            $min_price = 10000000;  // Set the large number
            $max_price = 0;         // Set the small number

            $data['products'] = array();

            $filter_data = array(
                'filter_category_id' => $category_id
            );

            $rate = (float) $this->currency->getValue($this->session->data['currency']);

            $results = $this->model_catalog_product->getProducts($filter_data);

            foreach($results as $result) {

                $price = (float) $result['price'];

                if($price < $min_price) {
                    $min_price = $price;
                }

                if($price > $max_price) {
                    $max_price = $price;
                }

            }

            $data['min_price'] = ceil($min_price * $rate);
            $data['max_price'] = round($max_price * $rate);

            if  (isset($this->request->get['price'])) {
                $price_data = $this->request->get['price'];
            } else {
                $price_data = '';
            }

            if (isset($this->request->get['price'])) {
                $price_data = explode(',', $price_data);
                $data['current_min_price'] = $price_data[0];
                $data['current_max_price'] = $price_data[1];
            } else {
                $data['current_min_price'] = $data['min_price'];
                $data['current_max_price'] = $data['max_price'];
            }

            $data['currency_symbol'] = $this->currency->getSymbolLeft($this->session->data['currency']);
            /* End */

            $data['filter_groups'] = array();

            $filter_groups = $this->model_catalog_category->getCategoryFilters($category_id);

            if ($filter_groups) {
                foreach ($filter_groups as $filter_group) {
                    $childen_data = array();

                    foreach ($filter_group['filter'] as $filter) {
                        $filter_data = array(
                            'filter_category_id' => $category_id,
                            'filter_filter'      => $filter['filter_id']
                        );

                        $childen_data[] = array(
                            'filter_id' => $filter['filter_id'],
                            'name'      => $filter['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
                            'e_name'    => $filter['name']
                        );
                    }

                    $data['filter_groups'][] = array(
                        'filter_group_id' => $filter_group['filter_group_id'],
                        'name'            => $filter_group['name'],
                        'filter'          => $childen_data
                    );
                }
            }
        }

            return $this->load->view('extension/module/oclayerednavigation/oclayerednavigationfilter.tpl', $data);
    }

    /**
     * Load category view
     */
    public function category() {

        $this->load->language('product/category');

        $this->load->model('catalog/category');

        $this->load->model('catalog/product');

        $this->load->model('tool/image');

        $json = array();

        if  (isset($this->request->get['price'])) {
            $price_data = $this->request->get['price'];
        } else {
            $price_data = '';
        }

        if (isset($this->request->get['filter'])) {
            $filter = $this->request->get['filter'];
        } else {
            $filter = '';
        }

        if (isset($this->request->get['sort'])) {
            $sort = $this->request->get['sort'];
        } else {
            $sort = 'p.sort_order';
        }

        if (isset($this->request->get['order'])) {
            $order = $this->request->get['order'];
        } else {
            $order = 'ASC';
        }

        if (isset($this->request->get['page'])) {
            $page = $this->request->get['page'];
        } else {
            $page = 1;
        }

        if (isset($this->request->get['limit'])) {
            $limit = $this->request->get['limit'];
        } else {
            $limit = $this->config->get($this->config->get('config_theme') . '_product_limit');
        }

        if (isset($this->request->get['path'])) {
            $url = '';

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            if (isset($this->request->get['price'])) {
                $url .= '&price=' . $this->request->get['price'];
            }

            $path = '';

            $parts = explode('_', (string)$this->request->get['path']);

            $category_id = (int)array_pop($parts);

        } else {
            $category_id = 0;
        }

        $category_info = $this->model_catalog_category->getCategory($category_id);

        if ($category_info) {
            $data['text_refine'] = $this->language->get('text_refine');
            $data['text_empty'] = $this->language->get('text_empty');
            $data['text_quantity'] = $this->language->get('text_quantity');
            $data['text_manufacturer'] = $this->language->get('text_manufacturer');
            $data['text_model'] = $this->language->get('text_model');
            $data['text_price'] = $this->language->get('text_price');
            $data['text_tax'] = $this->language->get('text_tax');
            $data['text_points'] = $this->language->get('text_points');
            $data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0));
            $data['text_sort'] = $this->language->get('text_sort');
            $data['text_limit'] = $this->language->get('text_limit');

            $data['button_cart'] = $this->language->get('button_cart');
            $data['button_wishlist'] = $this->language->get('button_wishlist');
            $data['button_compare'] = $this->language->get('button_compare');
            $data['button_continue'] = $this->language->get('button_continue');
            $data['button_list'] = $this->language->get('button_list');
            $data['button_grid'] = $this->language->get('button_grid');

            if ($category_info['image']) {
                $data['thumb'] = $this->model_tool_image->resize($category_info['image'], $this->config->get($this->config->get('config_theme') . '_image_category_width'), $this->config->get($this->config->get('config_theme') . '_image_category_height'));
            } else {
                $data['thumb'] = '';
            }

            $data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
            $data['compare'] = $this->url->link('product/compare');

            $url = '';

            if (isset($this->request->get['filter'])) {
                $url .= '&filter=' . $this->request->get['filter'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['price'])) {
                $url .= '&price=' . $this->request->get['price'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            $data['categories'] = array();

            $results = $this->model_catalog_category->getCategories($category_id);

            foreach ($results as $result) {
                $filter_data = array(
                    'filter_category_id'  => $result['category_id'],
                    'filter_sub_category' => true
                );

                $data['categories'][] = array(
                    'name'  => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
                    'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $result['category_id'] . $url
                );
            }

            $data['products'] = array();

            $rate = (float) $this->currency->getValue($this->session->data['currency']);

            // Min and Max Price
            $filter_price = array();
            if (isset($this->request->get['price'])) {
                $price_data = explode(',', $price_data);
                $filter_price['min_price'] = ceil($price_data[0] / $rate - 1);
                $filter_price['max_price'] = round($price_data[1] / $rate);
            }

           // var_dump($filter_price);die;
            $filter_data = array(
                'filter_category_id' => $category_id,
                'filter_filter'      => $filter,
                'filter_price'       => $filter_price,
                'sort'               => $sort,
                'order'              => $order,
                'start'              => ($page - 1) * $limit,
                'limit'              => $limit
            );

            $product_total = $this->model_catalog_product->getTotalProducts($filter_data);

            $results = $this->model_catalog_product->getProducts($filter_data);
			
			/* Get new product */
            $filter_data = array(
                    'sort'  => 'p.date_added',
                    'order' => 'DESC',
                    'start' => 0,
                    'limit' => 10
            );
    
            $new_results = $this->model_catalog_product->getProducts($filter_data);
            /* End */

            foreach ($results as $result) {
                if ($result['image']) {
                    $image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
                } else {
                    $image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
                }

                if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
                    $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
                } else {
                    $price = false;
                }

                if ((float)$result['special']) {
                    $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
                } else {
                    $special = false;
                }

                if ($this->config->get('config_tax')) {
                    $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
                } else {
                    $tax = false;
                }

                if ($this->config->get('config_review_status')) {
                    $rating = (int)$result['rating'];
                } else {
                    $rating = false;
                }
				
				$is_new = false;
                if ($new_results) {
                    foreach($new_results as $new_r) {
                        if($result['product_id'] == $new_r['product_id']) {
                            $is_new = true;
                        }
                    }
                }
				
				if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
					$price_num = $this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax'));
				} else {
					$price_num = false;
				}

				if ((float)$result['special']) {
					$special_num = $this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'));
				} else {
					$special_num = false;
				}
				
				/// Product Rotator /
				$product_rotator_status = (int) $this->config->get('ocproductrotator_status');
				if($product_rotator_status == 1) {
				 $this->load->model('catalog/ocproductrotator');
				 $this->load->model('tool/image');
			 
				 $product_id = $result['product_id'];
				 $product_rotator_image = $this->model_catalog_ocproductrotator->getProductRotatorImage($product_id);
			 
				 if($product_rotator_image) {
				  $rotator_image = $this->model_tool_image->resize($product_rotator_image, $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height')); 
				 } else {
				  $rotator_image = false;
				 } 
				} else {
				 $rotator_image = false;    
				}
				/// End Product Rotator /
				
				$result['name'] = strlen($result['name']) > 40 ? substr($result['name'],0,40)."..." : $result['name'];
				
				$data['tags'] = array();

				if ($result['tag']) {
					$tags = explode(',', $result['tag']);

					foreach ($tags as $tag) {
						$data['tags'][] = array(
							'tag'  => trim($tag),
							'href' => $this->url->link('product/search', 'tag=' . trim($tag))
						);
					}
				}

                $data['products'][] = array(
                    'product_id'  => $result['product_id'],
                    'thumb'       => $image,
                    'name'        => $result['name'],
                    'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..',
                    'price'       => $price,
                    'special'     => $special,
                    'tax'         => $tax,
					'tags'		  => $data['tags'],
                    'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
                    'rating'      => $result['rating'],
					'is_new'      => $is_new,
                    'rotator_image' => $rotator_image,
					'price_num'       => $price_num,
					'special_num'     => $special_num,
                    'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
                );
            }
			
			$data['text_new'] = $this->language->get('text_new');
			$data['text_sale'] = $this->language->get('text_sale');
			$data['text_byprice'] = $this->language->get('text_byprice');

            $url = '';

            if (isset($this->request->get['filter'])) {
                $url .= '&filter=' . $this->request->get['filter'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            if (isset($this->request->get['price'])) {
                $url .= '&price=' . $this->request->get['price'];
            }

            $data['sorts'] = array();

            $data['sorts'][] = array(
                'text'  => $this->language->get('text_default'),
                'value' => 'p.sort_order-ASC',
                'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . '&sort=p.sort_order&order=ASC' . $url
            );

            $data['sorts'][] = array(
                'text'  => $this->language->get('text_name_asc'),
                'value' => 'pd.name-ASC',
                'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . '&sort=pd.name&order=ASC' . $url
            );

            $data['sorts'][] = array(
                'text'  => $this->language->get('text_name_desc'),
                'value' => 'pd.name-DESC',
                'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . '&sort=pd.name&order=DESC' . $url
            );

            $data['sorts'][] = array(
                'text'  => $this->language->get('text_price_asc'),
                'value' => 'p.price-ASC',
                'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . '&sort=p.price&order=ASC' . $url
            );

            $data['sorts'][] = array(
                'text'  => $this->language->get('text_price_desc'),
                'value' => 'p.price-DESC',
                'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . '&sort=p.price&order=DESC' . $url
            );

            if ($this->config->get('config_review_status')) {
                $data['sorts'][] = array(
                    'text'  => $this->language->get('text_rating_desc'),
                    'value' => 'rating-DESC',
                    'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . '&sort=rating&order=DESC' . $url
                );

                $data['sorts'][] = array(
                    'text'  => $this->language->get('text_rating_asc'),
                    'value' => 'rating-ASC',
                    'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . '&sort=rating&order=ASC' . $url
                );
            }

            $data['sorts'][] = array(
                'text'  => $this->language->get('text_model_asc'),
                'value' => 'p.model-ASC',
                'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . '&sort=p.model&order=ASC' . $url
            );

            $data['sorts'][] = array(
                'text'  => $this->language->get('text_model_desc'),
                'value' => 'p.model-DESC',
                'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . '&sort=p.model&order=DESC' . $url
            );

            $url = '';

            if (isset($this->request->get['filter'])) {
                $url .= '&filter=' . $this->request->get['filter'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['price'])) {
                $url .= '&price=' . $this->request->get['price'];
            }

            $data['limits'] = array();

            $limits = array_unique(array($this->config->get($this->config->get('config_theme') . '_product_limit'), 25, 50, 75, 100));

            sort($limits);

            foreach($limits as $value) {
                $data['limits'][] = array(
                    'text'  => $value,
                    'value' => $value,
                    'href'  => $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . $url . '&limit=' . $value
                );
            }

            $url = '';

            if (isset($this->request->get['filter'])) {
                $url .= '&filter=' . $this->request->get['filter'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            if (isset($this->request->get['price'])) {
                $url .= '&price=' . $this->request->get['price'];
            }

            $pagination = new Pagination();
            $pagination->total = $product_total;
            $pagination->page = $page;
            $pagination->limit = $limit;
            $pagination->url = $this->config->get('config_url') . 'index.php?route=product/category&path=' . $category_id . $url . '&amp;page={page}';

            $data['pagination'] = $pagination->render();

            $data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($product_total - $limit)) ? $product_total : ((($page - 1) * $limit) + $limit), $product_total, ceil($product_total / $limit));

            if ($limit && ceil($product_total / $limit) > $page) {
                $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page + 1), true), 'next');
            }

            $data['sort'] = $sort;
            $data['order'] = $order;
            $data['limit'] = $limit;

            $json['result_html'] = $this->load->view('extension/module/oclayerednavigation/occategoryfilter.tpl', $data);

            $url = '';

            if (isset($this->request->get['price'])) {
                $url .= '&price=' . $this->request->get['price'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            $json['filter_action'] =  str_replace('&amp;', '&', $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . $url);

            $url = '';

            if (isset($this->request->get['filter'])) {
                $url .= '&filter=' . $this->request->get['filter'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            $json['price_action'] =  str_replace('&amp;', '&', $this->config->get('config_url') . 'index.php?route=extension/module/oclayerednavigation/category&path=' . $category_id . $url);

            $json['layered_html'] = $this->layer();

        } else {

            $json['result_html'] = "No No No";

        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));

    }

}

Спасибо!

Уже разобрался! Правил базу данных в phpmyadmin

Edited by wlll

Share this post


Link to post
Share on other sites
В 19.12.2017 в 14:27, wlll сказал:

Скорей всего урлы подменяются в файле oclayerednavigation.php, но не могу найти где именно. Кто подскажет?

Нет. Они либо изначально в шаблоне уже модифицированные, либо изменяются через модификаторы.

Share this post


Link to post
Share on other sites
В 16.01.2017 в 21:49, Dotrox сказал:

В /catalog/controller/product/category.php после


if (isset($this->request->get['path'])) {

Добавляете:


$data['path'] = $this->request->get['path'];

В /catalog/view/theme/__шаблон__/template/product/category.tpl строку


 <div id="content" class="<?php echo $class; ?>"><?php echo $content_top; ?>

Дополняете до такого вида:


 <div id="content" data-path="<?php echo isset($path) ? $path : ''; ?>" class="<?php echo $class; ?>"><?php echo $content_top; ?>

А затем уже правите js. Перед


if(filter_url.search(new_route) != -1) {

Добавляете:


if(filter_url.search(new_route) == -1) {    
    var query = '?' + (typeof($('#content').attr('path')) != 'undefined') ? 'path=' + $('#content').attr('path') : '';
    var i = filter_url.search('?');
    if(i > -1){
        query += filter_url.slice(i+1);
    }

    filter_url = new_route + query;
}

Подскажите пожалуйста, какой именно js файл нужно править? oclayerednavigation.js?

Edited by hdysgtsycilw

Share this post


Link to post
Share on other sites
On 1/16/2017 at 8:49 PM, Dotrox said:

В /catalog/controller/product/category.php после


if (isset($this->request->get['path'])) {

Добавляете:


$data['path'] = $this->request->get['path'];

В /catalog/view/theme/__шаблон__/template/product/category.tpl строку


 <div id="content" class="<?php echo $class; ?>"><?php echo $content_top; ?>

Дополняете до такого вида:


 <div id="content" data-path="<?php echo isset($path) ? $path : ''; ?>" class="<?php echo $class; ?>"><?php echo $content_top; ?>

А затем уже правите js. Перед


if(filter_url.search(new_route) != -1) {

Добавляете:


if(filter_url.search(new_route) == -1) {    
    var query = '?' + (typeof($('#content').attr('path')) != 'undefined') ? 'path=' + $('#content').attr('path') : '';
    var i = filter_url.search('?');
    if(i > -1){
        query += filter_url.slice(i+1);
    }

    filter_url = new_route + query;
}

 

Приветствую! Такая же проблема с пагинацией и фильтрами. Не могу только понять, почему мне не помогает этот код. 

В контенте data-path пустой выводится. А category.php вообще пробовал стереть полностью - ничего не меняется, товары также отображаются)

Share this post


Link to post
Share on other sites
9 часов назад, barsukov сказал:

А category.php вообще пробовал стереть полностью - ничего не меняется, товары также отображаются)

После внесения любых правок надо обновлять кеш окмод!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.