Jump to content
Sign in to follow this  
sarkis33

не отдает 404 при вводе несуществующей страницы пагинации

Recommended Posts

всем привет ..Подскажите ,как реализовать ,чтобы  при вводе несуществующей страницы пагинации , отдавало 404 ,а не 200й ответ ? (или подскажите в каком файле искать)
на данный момент в категории магазина  10 страниц , но стоит мне в ручную  написать в адресную строку любую большую цифру , как ответ 200,но  пишет ,что товара нет в этой категории 

Share this post


Link to post
Share on other sites

А зачем руками подставлять?

Но конечно же можно все...

В контроллере проверять  наличие несуществующей страницы и вызывать not_found

Share this post


Link to post
Share on other sites

А зачем руками подставлять?

Но конечно же можно все...

В контроллере проверять  наличие несуществующей страницы и вызывать not_found

Я бы уточнил: проверять количество записей в категории и тогда вызывать $this->getChild('error/not_found');  и addHeader(...404) если их ноль и есть && isset($this->request->get['page'])

Кстати не мешало бы в ocStore такое добавить

  • +1 1

Share this post


Link to post
Share on other sites

всем привет ..Подскажите ,как реализовать ,чтобы  при вводе несуществующей страницы пагинации , отдавало 404 ,а не 200й ответ ? (или подскажите в каком файле искать)

на данный момент в категории магазина  10 страниц , но стоит мне в ручную  написать в адресную строку любую большую цифру , как ответ 200,но  пишет ,что товара нет в этой категории 

Добрый день. Мне помогло вот это: В файле /catalog/controller/error/not_found.php после строки public function index() { вставляем

//                            $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . ' 404 Not Found');

                               header("HTTP/1.1 404 Not Found");

Вот код в мое файле:

<?php   

class ControllerErrorNotFound extends Controller {
public function index() {
// $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . ' 404 Not Found');
header("HTTP/1.1 404 Not Found");

Share this post


Link to post
Share on other sites

 

Добрый день. Мне помогло вот это: В файле /catalog/controller/error/not_found.php после строки public function index() { вставляем

//                            $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . ' 404 Not Found');

                               header("HTTP/1.1 404 Not Found");

Вот код в мое файле:

<?php   

class ControllerErrorNotFound extends Controller {
public function index() {
// $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . ' 404 Not Found');
header("HTTP/1.1 404 Not Found");

 

 

Так дело в том что not_found даже вызываться не будет (посмотрите первый пост)  :)

Share this post


Link to post
Share on other sites

Что то типа того

 

        if ($page < 1 || $page > ceil($product_total / $limit)) {
            $this->document->setTitle($this->language->get('text_error'));
            $data['heading_title'] = $this->language->get('text_error');
            $data['text_error'] = $this->language->get('text_error');
            $data['button_continue'] = $this->language->get('button_continue');
            $data['continue'] = $this->url->link('common/home');
            
            $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . ' 404 Not Found');
                
            $data['column_left'] = $this->load->controller('common/column_left');
            $data['column_right'] = $this->load->controller('common/column_right');
            $data['content_top'] = $this->load->controller('common/content_top');
            $data['content_bottom'] = $this->load->controller('common/content_bottom');
            $data['footer'] = $this->load->controller('common/footer');
            $data['header'] = $this->load->controller('common/header');            
                
            $this->response->setOutput($this->load->view('information/not_found', $data));
        } else {
            $this->response->setOutput($this->load->view('product/category', $data));
        } 

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  

  • Similar Content

    • By Blackseabreathe
      Opencart 3.0.3.3, default theme
       
      Привет всем.
      Стояла задача сделать простой магазин. Но какой магазин без ajax подгрузки товаров в аля 2К20, а?
      Сам я не то чтобы был полный ноль в js, нет, что-то в целом понимаю. Однако, сначала я искал готовые бесплатные плагины, но на мою версию опенкарт в общей сумме плагинов как кот наплакал, а для ajax подгрузки товаров их вообще 2, и то, один из них триальной версии на 3 дня потом плати монету. Пытался установить от shopunity ajax free filter, но мне не зашел, хотя бы на том, что там уродский вывод пунктов фильтров если выбираешь выводить как select. Ну и в целом плагин имеет много моментов, мне непонравившихся. Мне всё  это не подходило и я решил сделать сам.
      Конечно, я хотел сделать это быстрее, поэтому искав в интете все по запросу ajax фильтрация товаров OpenCart 3, я может что-то и находил полезное, но этого было недостаточно. Однако одну функцию я все таки спер оттуда, так как свою писать было лень, да и зачем второй велосипед нужен?! Чтобы никто не писал потом что "эту функцию ты стырил оттуда-то".
       
      Скрипт на jquery, если кто-то может переписать на ванила js, будет хорошо, Ну или если кто-то сможет заменить .load на $.ajax было бы удобней, но да ладно, перейдем к сути. Строго не судите, я не гуру jq, если есть что подправить, напишите это в комментах без грязи. Делюсь своим способом ajax фильтрации товаров opencart3 и ajax сортировка
       
       
      <!--ajax фильтрация ++--> 0. Сначала я бы предложил для фильтров поставить плагин fixfilter opecart3x чтобы изменить логику фильтрации or/and. (Но не обязательно)
      1. в category.twig (catalog/view/theme/default/template/product/category.twig) делаем обертку для вывода товаров <div id="pp" class="products_products">...тут уже цикл с выводом товаров..</div> //обернули 2. Тут же в селекте #input-sort убрать метод "onchange location = this", он нам уже не нужен 3. в category.php (catalog/controller/product/category.php) найти способы сортировки, например сортировка по умолчанию $data['sorts'][] = array( 'text' => $this->language->get('text_default'), 'value' => 'p.sort_order-ASC', //'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $url) //копируем строку и комментируем ее на всякий случай 'href' => '&sort=p.sort_order&order=ASC',// вставляем ее ниже и изменяем на такой вид ); Тоже самое проделать со всеми другими способами сортировки, которые нужны. Мне нужны были только по цене вверх, вниз и по умолчанию; и то "по умолчанию" всегда переименовываю в "рекомендуем". 4. Идем в filter.twig (catalog/view/theme/default/template/extension/module/filter.twig) Тут уже кому как надо, а у меня стояла задача сделать вместо чекбоксов select. Собственно я изменил вывод фильтра на: <div class="the_filters df aj"> {% for filter_group in filter_groups %} <div id="filter-group{{ filter_group.filter_group_id }}" class="filtr_group"> <select name="filter[]" id="filters{{filter_group.filter_group_id}}" class="ajax_select"> <option value="{{ filter_group.name }}" disabled selected>{{ filter_group.name }}</option> {% for filter in filter_group.filter %} {% if filter.filter_id in filter_category %} <option value="{{ filter.filter_id }}" selected>{{ filter.name }}</option> {% else %} <option value="{{ filter.filter_id }}">{{ filter.name }}</option> {% endif %} {% endfor %} </select> </div> {% endfor %} <div class="part filtr_group"><button type="button" id="reset_filter">Сбросить</button></div></div> Тут должно быть все понятно, тупо из чекбокс переделал в селект, который потом подхватывает плагин select2. Кстати, рекомендую его для кастомизации селектов. Это все что будет в этом файле из разметки. Ниже будут скрипты: <script type="text/javascript"> $(document).on('change', '.filtr_group .ajax_select',function(){//обновление без кнопки "применить", если успели заметить что в разметке кнокпку убрал filter = []; //создаем резервуар для фильтров $('.filtr_group .ajax_select').each(function(element) { // каждый выбранный фильтр filter.push($(this).val()); //записываем в резервуар }); $('#pp').css('opacity', '0.3'); // самый простой способ дать уровень прозрачности блоку с товарами $('#pp').prepend('<div class="loading"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background-image: none; display: block; shape-rendering: auto; background-position: initial initial; background-repeat: initial initial;" width="100px" height="100px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"><circle cx="50" cy="50" r="0" fill="none" stroke="#3e6d8d" stroke-width="2"><animate attributeName="r" repeatCount="indefinite" dur="1s" values="0;29" keyTimes="0;1" keySplines="0 0.2 0.8 1" calcMode="spline" begin="-0.5s"></animate><animate attributeName="opacity" repeatCount="indefinite" dur="1s" values="1;0" keyTimes="0;1" keySplines="0.2 0 0.8 1" calcMode="spline" begin="-0.5s"></animate></circle><circle cx="50" cy="50" r="0" fill="none" stroke="#4b9bbe" stroke-width="2"><animate attributeName="r" repeatCount="indefinite" dur="1s" values="0;29" keyTimes="0;1" keySplines="0 0.2 0.8 1" calcMode="spline"></animate><animate attributeName="opacity" repeatCount="indefinite" dur="1s" values="1;0" keyTimes="0;1" keySplines="0.2 0 0.8 1" calcMode="spline"></animate></circle></svg></div>'); // для интуитивности делаем прелоудер href = '{{action}}&filter='+filter.join(','); //тут мы берем текущую ссыль, которая конфигурируется в category.php и добавляем к ней фильтры с разделением div = $(document).find('#pp'); //куда будем загружать новые товары $(div).load(href+'#pp .product-layout', {limit: 16}, //загружаем методом jq load с лимитом 16, у кого отличается в админке кол-во вывода товаров на фронте, то изменить здесь function (responseText, textStatus, xhr) { if (textStatus == "error") { //если ошибка, то выводим текст ошибки, но я немного сделал по-своему var cn = $('header nav li a.current_page').text(); //находим название категории (но по факту текст в теге <a></a> с классом current_page) var cn_href = $('header nav li a.current_page').attr('href'); //далее берем у нее ссыль $.jGrowl('Упс, что-то пошло не так, пробуем вернуть Вас в главную категорию ' + '"'+cn+'"'); // ну и выводим соответственно текст ошибки и setTimeout(function(){window.location.replace(cn_href);}, 5000); //возвращаем покупателя главную той категории, в которой он был, но можно только вывести текст ошибки, тут уже кому как } if($('#pp .product-layout').length <= 0) { // если нет товаров по выбранной нами фильтрации, то $('#pp').text('Нет товаров, которые соответствуют критериям поиска'); //вывести этот текст } if (textStatus == "success") { // ну а если ответ успешный, то $('#pp').css('opacity', '1'); // убираем непрозрачность у блока с товарами $(document).find('.loading').remove(); //убираем прелоудер } }); setLocation(href); // адресную строку меняем в соответствие с выбранными фильтрами (функция будем ниже) return false; }); //ajax сортировка $(document).on('change', '#product_category #input-sort', function(){ //при изменении селекта сортировки + я изменил id #product-category на #product_category, а то через тире выделять неудобно filter = []; // создали резервуар фильтров $('.filtr_group .ajax_select').each(function(element) { filter.push($(this).val()); // в резервуар записали фильтры }); $('#pp').css('opacity', '0.3'); // непрозрачность установили $('#pp').prepend('<div class="loading"><?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background-image: none; display: block; shape-rendering: auto; background-position: initial initial; background-repeat: initial initial;" width="100px" height="100px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"><circle cx="50" cy="50" r="0" fill="none" stroke="#3e6d8d" stroke-width="2"><animate attributeName="r" repeatCount="indefinite" dur="1s" values="0;29" keyTimes="0;1" keySplines="0 0.2 0.8 1" calcMode="spline" begin="-0.5s"></animate><animate attributeName="opacity" repeatCount="indefinite" dur="1s" values="1;0" keyTimes="0;1" keySplines="0.2 0 0.8 1" calcMode="spline" begin="-0.5s"></animate></circle><circle cx="50" cy="50" r="0" fill="none" stroke="#4b9bbe" stroke-width="2"><animate attributeName="r" repeatCount="indefinite" dur="1s" values="0;29" keyTimes="0;1" keySplines="0 0.2 0.8 1" calcMode="spline"></animate><animate attributeName="opacity" repeatCount="indefinite" dur="1s" values="1;0" keyTimes="0;1" keySplines="0.2 0 0.8 1" calcMode="spline"></animate></circle></svg></div>'); //прелоудер показали var sortBy = $(this).val(); // находим значение выбранного option в сортировке, то чей вывод мы изменяли в (контроллере) category.php var action = $('header nav li a.current_page').attr('href'); // берем адрес главной категории, в который находимся, так как {{action}} тут работать уже не так будет как надо// ну или найти адрес другим методом js/jq var url = action+sortBy+'&filter='+filter.join(','); // собираем в переменную куски - адрес главной категории + значение выбранной сортировки + фильтры, если есть //alert(url); // на момент тестов отслеживал какой адрес в итоге получается $(document).find('#pp').load(url+'#pp .product-layout', {limit: 16}, // опять загружаем с лимитом 16 function (responseText, textStatus, xhr) {//если ошибка, отдаем текст if (textStatus == "error") { $.jGrowl('Произошла ошибка'); } if($('#pp .product-layout').length <= 0) { // если нечего загружать, сообщаем $('#pp').text('Нет товаров, которые соответствуют критериям поиска'); } if (textStatus == "success") { // если все у всех ок, то $('#pp').css('opacity', '1'); // снимаеи непрозрачность $(document).find('.loading').remove(); // убираем прелоудер $.jGrowl('Успешная сортировка');//отдаем сообщение, тоже на момент тестов } }); setLocation(url); // записываем в адрес строку получившийся адрес return false; }); //ajax адрес в адресную строку function setLocation(curLoc){ try { history.pushState(null, null, curLoc); return; } catch(e) {} location.hash = '#' + curLoc; } /// тут тоже должно быть все ясно как ясный день </script>  
      Дальше хочу сделать ajax пагинацию и написать скрипт сброса фильтров, наверное позже дополню в тему
       
       
    • By Otvet
      399.00 руб · Срок продления: 50.00 руб за 12 месяцев
      Скачать/Купить дополнение


      [SEO] Full IndeX : Улучшение индексации
      Модуль призван улучшить индексацию. Управляет множеством факторов и решает большой ряд мелких недочетов Opencart.
       
      ! Внимание БОЛЬШИЕ цветные буквы не просто так в тексте
       Указывайте домен при покупке 
       
      Что такое продление и для чего: Читаем
       
       
       
      Что делает модуль:
      исправляет косяки вида сайт/категория/инфо которые присутствуют у 99% редиректы с некорректных страниц по типу сайт/категория/?page=-1 позволяет устранить большой ряд дублей уникализация страниц сайт/категория/бренд способствует распределению веса и более полной перелинковке позволяет убрать или управлять выводом атрибутов prev | next  (с 21.03.2018 Google официально перестал учитывать) исправление ссылок и багов пагинаций уникализирует страницы (они перестают быть дублями), в том числе: шаблоны мета-данных, шаблон заголовков, скрытие/закрытие сквозных блоков валидация и исправление значений стандартных параметров позволяет гибко управлять выводом canonical, с учетом таких факторов как тип url и путь в url, когда нужно и где нужно управление get-параметрами (редиректы, canonical, seo_pro) позволяет полноценно использовать определенные seo-фильтры позволяет убирать "хвосты" в индексе позволяет блокировать индексации отзывов как отдельного документа и сделать в то же время более полную индексацию отзывов способствует заполнению анкор листа товаров на страницах 2 и далее посадочные страницы категория/бренд, для исключения дублей и использования в продвижении фикс кучи мелких проблем и недоработок в опенкарт фикс большой проблемы опенкарт - "мусорных" ссылок на теги (с версии 5.0) и многое другое  
      ЕЩЕ больше функционала:
       
      Для более продуктивной борьбы с дублями так же крайне желательно наличие SEO_Pro и правильного robots.txt
       
      [bonus] Sitemap Lite (OCMOD только для opencart 2.x):
      заменяет оригинальный catalog/controller/feed/google_sitemap.php
      ускоренная генерация благодаря собственной функции выборки товаров (~ в 10 раз) добавление lastmod (значительно ускоряет индексацию) устранение дублей товаров валидация яндексом фикс &amp при использовании seo_pro т.к. бонус, не подпадает под стандартную поддержку если нужна скорость, функционал, поддержка - рекомендую приобрести #FX Sitemap  
      Для автоматического заполнения SEO URL (ЧПУ) можно установить это дополнение: https://opencartforum.com/files/file/2833-автоматическое-заполнение-чпу-ocmod/ и/или https://opencartforum.com/files/file/5570-fx-url-generator-free/
       
       
       
      Добавил Otvet Добавлено 15.08.2015 Категория SEO, карта сайта, оптимизация Системные требования умение читать инструкцию, работающий установщик, iq > 70 Метод активации Автоматическая активация
      Через официальный сайт дополнения Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1 ocStore 3.0
      2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1
      1.5.3.1
      1.5.2.1
      1.5.1.3 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х Обращение к серверу разработчика Нет Старая цена 490  
    • By Otvet
      Модуль призван улучшить индексацию. Управляет множеством факторов и решает большой ряд мелких недочетов Opencart.
       
      ! Внимание БОЛЬШИЕ цветные буквы не просто так в тексте
       Указывайте домен при покупке 
       
      Что такое продление и для чего: Читаем
       
       
       
      Что делает модуль:
      исправляет косяки вида сайт/категория/инфо которые присутствуют у 99% редиректы с некорректных страниц по типу сайт/категория/?page=-1 позволяет устранить большой ряд дублей уникализация страниц сайт/категория/бренд способствует распределению веса и более полной перелинковке позволяет убрать или управлять выводом атрибутов prev | next  (с 21.03.2018 Google официально перестал учитывать) исправление ссылок и багов пагинаций уникализирует страницы (они перестают быть дублями), в том числе: шаблоны мета-данных, шаблон заголовков, скрытие/закрытие сквозных блоков валидация и исправление значений стандартных параметров позволяет гибко управлять выводом canonical, с учетом таких факторов как тип url и путь в url, когда нужно и где нужно управление get-параметрами (редиректы, canonical, seo_pro) позволяет полноценно использовать определенные seo-фильтры позволяет убирать "хвосты" в индексе позволяет блокировать индексации отзывов как отдельного документа и сделать в то же время более полную индексацию отзывов способствует заполнению анкор листа товаров на страницах 2 и далее посадочные страницы категория/бренд, для исключения дублей и использования в продвижении фикс кучи мелких проблем и недоработок в опенкарт фикс большой проблемы опенкарт - "мусорных" ссылок на теги (с версии 5.0) и многое другое  
      ЕЩЕ больше функционала:
       
      Для более продуктивной борьбы с дублями так же крайне желательно наличие SEO_Pro и правильного robots.txt
       
      [bonus] Sitemap Lite (OCMOD только для opencart 2.x):
      заменяет оригинальный catalog/controller/feed/google_sitemap.php
      ускоренная генерация благодаря собственной функции выборки товаров (~ в 10 раз) добавление lastmod (значительно ускоряет индексацию) устранение дублей товаров валидация яндексом фикс &amp при использовании seo_pro т.к. бонус, не подпадает под стандартную поддержку если нужна скорость, функционал, поддержка - рекомендую приобрести #FX Sitemap  
      Для автоматического заполнения SEO URL (ЧПУ) можно установить это дополнение: https://opencartforum.com/files/file/2833-автоматическое-заполнение-чпу-ocmod/ и/или https://opencartforum.com/files/file/5570-fx-url-generator-free/
       
       
       
    • By ceskf
      SEO-Pagination
      Скачать/Купить дополнение Модуль немного исправляет пагинацию.
      Когда мы на странице поиска или на странице категории, и там есть много товаров то к URL при переходе с остальных страниц на первую добавляетсья page=1
      Старница без такой конструкции и с ней являютсья идентичными, что приводит к тому что одна старница на разных URl.
      Данный модуль удаляет из ссылки на первыю старницу page=1
      Версии
      1.5.Х
      2.Х
      Для версии
      1.5.Х нужен vqmod.
      Добавил ceskf Добавлено 20.07.2015 Категория SEO, карта сайта, оптимизация  
    • By legioner26
      Разработан модификатор с пагинацией для опций в админ панели.
      Данный модификатор предназначен для интернет магазинов с большим списком параметров в опциях, с которыми сложно работать и подгружают сайт.
      Установив модификатор Вы получите список параметров опции в превычном постраничном для Вас виде, также при удалении параметра в админ панели не надо жать на кнопку сохранить, все происходит автоматически.
      В архиве 2 папки
      ОС 2.0-2.1 - Для версий 2.0-2.1
      ОС 2.2-2.3 - Для версий 2.2-2.3
       
      Установка:
      Устанавливаете модификатор через "Установка расширений", далее в модификаторах чистим кеш и обновляем.
  • 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.