Как заставить страницы /product/ и /category/ отдавать нужное вместо 404 ошибки?

Мне нужно реанимировать страницы /product/ и /category/ , которые сейчас отдают 404.

На /category/ - вывести хочу "каталог", то есть все "категории" (картинка категории+заголовок категории) + фильтр

На /product/ - хочу вывалить все товары каталога + фильтр.

Как-то можно это сделать?

11 ответов

  • 1
    replicant 31 марта 2018 18:42 #

    Пример шаблона error.html в помощь

    {if $wa->currentUrl() == '/product/'}
            выводим то, что нужно вместо продукта
    {elseif $wa->currentUrl() == '/category/'}
            выводим то, что нужно вместо категории
    {else}
    <div>
        <h1>{if $error_code}Ошибка {$error_code}{/if}</h1>
        <h2>{if $error_message}[s`The requested resource is not available.`]{/if}</h2> 
    </div>
    {/if}
  • 1
    Игорь Шестаков 31 марта 2018 18:55 #

    Добрый вечер!

    Спасибо

    Но тогда нужные эти две страницы будут отдавать также 404, а для сео это плохо

    А насчет хтакцесс: некуда ведь направлять или типа создать страницу с нужными данными и туда редиректить?

    • +1
      replicant replicant 31 марта 2018 19:10 #

      Вам для людей это делать или для СЕО? Человеку-посетителю начхать на код ответа HTTP, если он в браузере увидит то, что ему надо, вместо ошибки. Именно для этого и делаются всякие заковыристые страницы ошибок, чтобы и ошибку дать роботу и посетитель не сбежал от ужаса.

      Хотите небольшой лайфхак? Заходите в магазин и создаете в нем страницу с адресом /product/ и делаете на ней контент. Аналогично создаете страницу /category/ и там тоже делаете то, что надо. После этого останется немного потанцевать с меню сайта, если эти страницы вылезут наружу и будут некрасиво торчать в навигации, но по уму их можно сделать функциональными, разместив там полезную инфу и назвав страницу правильно. Посетителю на URL наплевать, если там контент отображает, то он контент и читает, а не изучает УРЛы. В итоге и от кода 404 избавитесь и контент разместите и для СЕО плюс т.к. желанные УРЛы попадут в вожделенный индекс. Просто задействуйте эти УРЛы, чтобы не простаивали без дела.

      Что значит некуда редиректить? У вас целый сайт с магазином, а редиректить некуда? Да хоть на товар, хоть на категории, хоть на любую страницу по настроению. :)

  • 1
    Игорь Шестаков 31 марта 2018 19:22 #

    Ну понятно, что сайт для людей и им без разницы на ответы сервера и сео-штуки))

    Ну раз создам эти новые страницы, то конечно, сделаю редирект

    Только вопрос - это же будут контентные страницы - там разве можно переменные выводить? Ну для /category/ нужен весь список категорий с картинками, к примеру

    • +1
      replicant replicant 31 марта 2018 19:31 #

      Конечно можно. Я на страницу в магазине запросто выброшу вот такой код из шаблона дерева категорий с картинками и он будет работать. Проверено :) Кстати код вам может пригодиться для вашей задачи.

      {literal}<style type="text/css">
      .cat_first { font-size:1.25em; font-weight:bold; color:#282828; }
      .cat_first_mobile { font-size:2em; font-weight:bold; color:#282828; }
      .cat_first:hover { border-bottom:solid 1px #BE000090; color:#BE0000; }
      .cat_first_mobile:hover { border-bottom:solid 1px #BE000090; color:#BE0000; }
      .url_first { text-decoration:none; }
      .url_child { text-decoration:none; color:#000 !important; font-size:1em; }
      .url_child:hover { border-bottom:solid 1px #BE000090; color:#BE0000; }
      .url_child_mobile { text-decoration:none; color:#000 !important; font-size:1.8em; }
      .url_child_mobile:hover { border-bottom:solid 1px #BE000090; color:#BE0000; }
      .cat_first_image { max-width:150px; max-height:150px; }
      .cat_first_image_mobile { max-width:200px; max-height:200px; }
      .cat_first_image:hover { opacity:0.95; }
      .numer { color:#888; font-size:11px; font-weight:bold; }
      .basic_table { padding:0; margin:0; width:100%; background-color:#FFF;}
      .basic_table td { padding: 3px 5px;}
      .basic_table_mobile { padding:0; margin:0 auto; width:100%; background-color:#FFF;}
      .basic_table_mobile td { padding: 13px 10px;}
      .rzdl { color: #7e3e0066; margin: 0 5px; font-size: 15px; vertical-align: initial; }
      </style>{/literal}
      {strip}
      {if $wa->shop && $wa->shop->categories()}
          {if !$wa->isMobile()}
      <table class="basic_table" cellpading="0" cellspacing="0">
          {foreach $wa->shop->categories(28,2,true) as $c}
          {if $c@index is div by 2}
          <tr>{/if}
      	
      <td valign="middle" align="center" width="150px">
          <a href="{$c.url}" title="{$c.name}">
              <img class="cat_first_image" src="{shopCategoryImagesPlugin::getCategoryImageUrl($c.id)}" alt="{$c.name}" title="{$c.name}">
          </a>
      </td>
      <td valign="middle" align="left" width="50%">
              <a class="url_first" href="{$c.url}" title="{$c.name}">
              <span class="cat_first">{$c.name}</span></a>  {if $c.count}<sup><span class="numer">[{$c.count}]</span></sup>{/if}
              
          <div class="clear-both"></div>
          
          <span style="line-height: 22px;">
          {foreach $c.childs as $sc}
              <a class="url_child" href="{$sc.url}" title="{$sc.name}" >{$sc.name}</a>{if !$sc@last}<span class="rzdl"> | </span>{/if}
          {/foreach}
          </span>
      </td>
          {if ($c@index + 1) is div by 2}    
          </tr>{elseif $c@last}</tr>{/if}
      
          {/foreach}
      </table>
      
          {else}
      
      <table class="basic_table_mobile" cellpading="0" cellspacing="0">
          {foreach $wa->shop->categories(28,2,true) as $c}
          {if $c@index is div by 1}
          <tr>{/if}
      	
      <td valign="middle" align="center" width="200px">
          <a href="{$c.url}" title="{$c.name}">
              <img class="cat_first_image_mobile" src="{shopCategoryImagesPlugin::getCategoryImageUrl($c.id)}" alt="{$c.name}" title="{$c.name}">
          </a>
      </td>
          
      <td valign="middle" align="left" width="100%">
              <a class="url_first" href="{$c.url}" title="{$c.name}">
              <span class="cat_first_mobile">{$c.name}</span></a>{*  {if $c.count}<sup><span class="numer">[{$c.count}]</span></sup>{/if}*}
              
          <div class="clear-both" style="height:10px;"></div>
          
          <span style="line-height: 1.5;">
          {foreach $c.childs as $sc}
              <a class="url_child_mobile" href="{$sc.url}" title="{$sc.name}" >{$sc.name}</a>{if !$sc@last}<span class="rzdl"> | </span>{/if}
          {/foreach}
          </span>
      </td>
      
          {if ($c@index + 1) is div by 1}    
          </tr>{elseif $c@last}</tr>{/if}
      
          {/foreach}
      </table>
          {/if}
      {/if}
      {/strip}
    • +1
      replicant replicant 31 марта 2018 19:34 #

      Если сделаете страницы с такими УРЛами, то никакой редирект уже не нужен. Просто на этих УРЛах будет контент, а не ошибка 404. Все пойдет естественным путем.

  • 1
    Игорь Шестаков 31 марта 2018 19:37 #

    Хорошо - я понял

    Благодарю

    Только что-то ваш код у меня ничего не выводит)

    • +1
      replicant replicant 31 марта 2018 19:38 #

      28,2,true в двух местах в коде заменить не 0,0,true или что там у вас по ID категорий родителем идет (у меня такие ID родителя и глубина, у вас другие ...)

  • 1
    Игорь Шестаков 31 марта 2018 19:45 #

    пустой экран при 0,0, true )

    вот https://c2n.me/3T5TwkK - что-то с вывдом картинки не то

    • +1
      replicant replicant 31 марта 2018 19:48 #

      У меня изображения для категорий формируются плагином https://www.webasyst.ru/store/plugin/shop/category...

      У вас может быть другой метод или другой плагин. Тут придется править img src="" тоже под себя. Пока это можно в коде убрать или закомментировать. Это нормальный процесс адаптации. Плагин, кстати, клевый. Советую, если не пробовали.
  • 1
    Игорь Шестаков 31 марта 2018 19:49 #

    Я тоже увидел, что плагином

    спасибо!!

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите