Перейти к содержимому


Фото
- - - - -

Правильные ЧПУ без .htaccess (URL rewrite средствами PHP)

simpla htaccess url rewrite php

  • Чтобы отвечать, сперва войдите на форум
46 ответов в теме

#1 a13x

a13x
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 26.11.2017 - 20:02

Подскажите пожалуйста, может кто уже реализовывал правильное отображение ссылок в ИМ на SIMPLA?

Под правильным я имею ввиду сохранение полной структуры путей, например:

http://test.ru/catal...ck/volvo/xc-90/

вместо того что по умолчанию используется в SIMPLA

http://test.ru/catalog/car/

http://test.ru/catalog/track/

http://test.ru/catalog/volvo/

http://test.ru/products/xc-90/

Может я зря всё это затеял и уже давным давно есть готовое решение, просто я его не нашёл?

 

p.s. конечно для апача всё же будет задействован файл .haccess, но всего с парой строк, где будет указан обработчик урлов.


Изменено: a13x, 26.11.2017 - 20:04


#2 shooroop

shooroop
  • Фрилансер
  • 547 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 26.11.2017 - 22:07

http://forum.simplac...тинг-на-симпле/



#3 shooroop

shooroop
  • Фрилансер
  • 547 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 26.11.2017 - 22:10

http://simpla-tuning...svobodnoj-forme



#4 Kosjak76

Kosjak76
  • Модератор
  • 3 608 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 26.11.2017 - 22:17

Я недавно делал новый вариант роутинга.

Пишите в скайп kosjak1976 - покажу пример.



#5 a13x

a13x
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 27.11.2017 - 12:40

http://forum.simplac...тинг-на-симпле/

Немного не то, надо переписывать сам движок и изменять получение параметров через $this->request->get

Сам сначала пошёл по этому пути но понял что это не по феншую, в итоге немного переписал класс REQUEST и добавил свой.

С генерацией изображений проблем нет, с категориями тоже. Сейчас допиливаю остальное.

 

 

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


 

Я недавно делал новый вариант роутинга.

Пишите в скайп kosjak1976 - покажу пример.

Спасибо, написал.

 

p.s. единственная засада только со smarty которая в шаблоне использует $smarty.get :(


Изменено: a13x, 27.11.2017 - 12:48


#6 a13x

a13x
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 28.11.2017 - 17:05

Вобщем решил сам писать. Покупать у Kosjak76 желания нет. Поэтому если кому-то будет актуально - пишите.

скайп webtask.pro или на почту lelik.177@yandex.ru

+ в дальнейшем хочу дописать модуль страницы, чтобы у страниц была вложенность (как у категорий через parent_id).


Изменено: a13x, 28.11.2017 - 17:08


#7 Noxter

Noxter
  • Фрилансер
  • 5 823 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 28.11.2017 - 17:07

Вобщем решил сам писать. Покупать у Kosjak76 желания нет. Поэтому если кому-то будет актуально - пишите.
скайп webtask.pro или на почту lelik.177@yandex.ru

Вопрос: зачем кому-то писать тебе? Лично у меня к Косте есть доверие в отличии от тебя и если бы пришлось выбирать я бы выбрал Костю, впрочем как и всегда :)

#8 a13x

a13x
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 28.11.2017 - 17:10

Вопрос: зачем кому-то писать тебе? Лично у меня к Косте есть доверие в отличии от тебя и если бы пришлось выбирать я бы выбрал Костю, впрочем как и всегда :)

Я не просил мне писать, я лишь хотел узнать может человек поделиться или нет. Из разговора я понял что он его продаёт отдельно. Вот и всё.



#9 Noxter

Noxter
  • Фрилансер
  • 5 823 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 28.11.2017 - 17:45


Я не просил мне писать, я лишь хотел узнать может человек поделиться или нет. Из разговора я понял что он его продаёт отдельно. Вот и всё.


А вы выходит не продаёте?

#10 a13x

a13x
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 28.11.2017 - 22:42

А вы выходит не продаёте?

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



#11 miltonmors

miltonmors
  • Забаненый
  • 91 сообщений
  • Программирование
  • Версия CMS:2.x
  • Откуда:Николаев

Опубликовано 29.11.2017 - 09:53

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

 

А открыто на форуме не поделитесь? Как раз кому надо, те и будут использовать, чтоб каждый желающий индивидуально Вас не дергал. Заодно народ и потестирует...



#12 Gruzin

Gruzin
  • Пользователь
  • 260 сообщений
  • Верстка, Пользователь
  • Версия CMS:2.x
  • Откуда:Минск

Опубликовано 29.11.2017 - 09:59

А открыто на форуме не поделитесь? Как раз кому надо, те и будут использовать, чтоб каждый желающий индивидуально Вас не дергал. Заодно народ и потестирует...

Отличное предложение.



#13 a13x

a13x
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 29.11.2017 - 17:51

А открыто на форуме не поделитесь? Как раз кому надо, те и будут использовать, чтоб каждый желающий индивидуально Вас не дергал. Заодно народ и потестирует...

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



#14 a13x

a13x
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 05.12.2017 - 18:51

Сделал основную часть.

Ссылка на я.диск https://yadi.sk/d/Me7I94uX3QLnXz

Тестовая версия http://simpla-url-rewrite.webtask.pro/

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

Итак, что осталось от .htaccess

 

AddDefaultCharset UTF-8
Options -Indexes
DirectoryIndex index.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)$ /index.php?rewrite=$1 [L] 

Какие изменения затронуты:

Контролеры:

1. Добавить класс URewrite.php (файл в архиве, в папке api)

2. В api/Simpla.php в конец списка классов добавить 'rewrite' => 'URewrite'

3. Создать 2 страницы для каталога и брендов и прописать их ID в файд api/URewrite.php

4. Зайти по адресу сайта и в конце урла дописать "?add_active_features=1", система добавит в каталог активные фильтры.

 

Файл IndexView.php

Найти

        $module = $this->request->get('module', 'string');
        $module = preg_replace("/[^A-Za-z0-9]+/", "", $module);

и после дописать

        //передаем в шаблон объект со ссылками, нужная вещь!
        $this->design->assign('rewrite', $this->rewrite);

Далее надо изменить класс REQUEST (api/Request.php) найти строки:

    public function get($name, $type = null)
    {
        $val = null;

и после добавить:

        /* *************************************** */
        //query = "/catalog/cars/truck/"
        $query = $this->rewrite->query;
        //arg = "?minprice=12&maxprice=15&status=1"
        $arg = $this->rewrite->arguments;

        //ищем get параметр по query string
        $val = (isset($query[$name]) ? $query[$name] : "");
        //если не нашлось то..
        if(empty($val)){
            //ищем get параметр в массиве arg
            $val = (isset($arg[$name]) ? $arg[$name] : "");
            //если опять нет, то проверяем на модуль
            if(empty($val))
                if($name == "module")
                    $val = $this->rewrite->module;
        }
        /* *************************************** */

Файл index.php заменить

    $_GET['page_url'] = '404';
    $_GET['module'] = 'PageView';

на

    $view->rewrite->module = "PageView";
    $view->rewrite->arguments["page_url"] = "404";

 

 

Файл resize/resize.php заменить:

require_once('../api/Simpla.php');
$filename = $_GET['file'];
$token = $_GET['token'];

на

require_once('api/Simpla.php');
$filename = $this->arguments["file"];
$token = $this->arguments["token"];

 

 

Открыть файл view/ProductsView.php и перед

    function fetch(){

добавить

public $breadcrumbs = array();

Далее, добавить 2 новых метода, в конец файла перед последней "}"

    public function brand_check(){
        //запрос не в бренд
        if($this->rewrite->uri[0] != $this->rewrite->brands->url)
            return false;
        $brand_url = $this->rewrite->lasturi;
        $brand = $this->brands->get_brand((string)$brand_url);
        if(empty($brand)){
            if($brand_url == $this->rewrite->brands->url){
                $this->breadcrumbs[] = [$this->rewrite->brands->name, $this->rewrite->brands->url];
                $brand = $this->rewrite->brands;
                $brand->current_url = $this->rewrite->brands->url;
            }
            else
                return false;
        }
        else{
            $this->breadcrumbs[] = [$this->rewrite->brands->name, $this->rewrite->brands->url];
            $this->breadcrumbs[] = [$brand->name, $this->rewrite->brands->url."/".$brand->url];
            $brand->current_url = $this->rewrite->brands->url."/".$brand->url;
            $this->design->assign('category', $brand);
        }
        $this->design->assign('brand', $brand);
        return $brand;
    }

    public function category_check(){
        $category_url = $this->rewrite->uri;

        //берем последний аргумент из урла
        $lastcat = $this->rewrite->lasturi;

        //делаем запрос в базу
        $category = $this->categories->get_category((string) $lastcat);

        //запрос не в каталог
        if($this->rewrite->uri[0] != $this->rewrite->catalog->url)
            return false;

        //поставляем сразу хлебную крошку
        $this->breadcrumbs[] = [$this->rewrite->catalog->name, $this->rewrite->catalog->url];
        if(empty($category) || (!$category->visible && empty($_SESSION['admin']))){
            if($lastcat == $this->rewrite->catalog->url){
                $category = $this->rewrite->catalog;
                $category->current_url = $this->rewrite->catalog->url;
            }
            else
                return false;
        }
        else{
            //проверяем что все предыдущие категории существуют и принадлежат свои родителям
            unset($category_url[0]);    //т.к. не является категорий - catalog
            foreach($category_url AS $key => $query_url){
                $pathid = $key - 1;
                $url[] = $category->path[$pathid]->url;
                $this->breadcrumbs[] = [$category->path[$pathid]->name, $this->rewrite->catalog->url."/".implode("/", $url)];
                if($query_url != $category->path[$pathid]->url)
                    return false;
            }
            $category->current_url = $this->rewrite->catalog->url."/".implode("/", $url);
        }
        $this->design->assign('category', $category);
        return $category;
    }


Далее найти строки

        $filter = array();
        $filter['visible'] = 1;

и после добавить

        $category = $this->brand_check();
        if(empty($category)){
            //если его нет, то запрашиваем категории
            $category = $this->category_check();
            //если и их нет, то вовзращаем
            if(empty($category))
                return false;
            else
                if(isset($category->children))
                    $filter['category_id'] = $category->children;
        }
        else
            $filter['brand_id'][] = $category->id;


Проверки:

        if (!empty($brand_url))
        {
        ............
        }
        и
        if (!empty($category_url))
        {
        ............
        }

можно удалить.

В конце метода fetch(), перед

        $this->body = $this->design->fetch('products.tpl');

добавить:

        //вывод правильной ссылки на товар (правильного урла)
        //под вопросом !!!, возможно не нужна уже не помню.
        $this->design->assign('current_url', $category->current_url);
        //крошки
        $this->design->assign('breadcrumbs', $this->breadcrumbs);

Далее, в этом же методе fetch() найти переменную $category->children и поставить перед ней @ чтобы получилось @$category->children

Данная переменная встречается 2 раза, ну или можете сами дописать проверку на её существование.


 
Дальше наодим файл view/productView.php а там находим:
        if(empty($product) || (!$product->visible && empty($_SESSION['admin'])))
            return false;
и после добавляем
        /********** хлебные крошки и проверка на категории / бренд ***********/
        $uri = $this->rewrite->uri;
        //передаем в шаблон массив со ссылками (URL строкой разбитой по /) для активации выбранных меню
        $this->design->assign('rewrite', $this->rewrite);
        $num = count($uri) - 2;            //берем ПРЕДпоследний аргумент из урла - категорию или бренд
        $br_cat = $uri[$num];
        if($uri[0] == $this->rewrite->brands->url){    //для брендов
            $this->breadcrumbs[] = [$this->rewrite->brands->name, $this->rewrite->brands->url];
            $brand = $this->brands->get_brand((string) $br_cat);
            if(empty($brand))
                return false;
            $this->breadcrumbs[] = [$brand->name, $this->rewrite->brands->url."/".$brand->url];
        }
        else{    //для категорий
            $category = $this->categories->get_category((string) $br_cat);
            $this->breadcrumbs[] = [$this->rewrite->catalog->name, $this->rewrite->catalog->url];
            if(isset($category->path)){
                foreach($category->path AS $key => $cat){
                    $urikey = $key + 1;        //0 - /catalog/, поэтому +1
                    $url[] = $uri[$urikey];
                    $this->breadcrumbs[] = [$cat->name, $this->rewrite->catalog->url."/".implode("/", $url)];
                    if($cat->url != $uri[$urikey])        //проверка всех категорий урла на правильную вложенность
                        return false;
                }
            }
        }
        $this->breadcrumbs[] = [$product->name, ""];    //добавляем хлебную крошку к товару
        $this->design->assign('breadcrumbs', $this->breadcrumbs);
        /********** хлебные крошки и проверка на категории / бренд ***********/

 

и также перед функцией fetch() добавляем public $breadcrumbs = array();

На этом с контролером всё.

Далее шаблон.

файл design/html/products.tpl, этот код:

{* Канонический адрес страницы *}
{if $category && $brand}
{$canonical="/catalog/{$category->url}/{$brand->url}" scope=parent}
{elseif $category}
{$canonical="/catalog/{$category->url}" scope=parent}
{elseif $brand}
{$canonical="/brands/{$brand->url}" scope=parent}
{elseif $keyword}
{$canonical="/products?keyword={$keyword|escape}" scope=parent}
{else}
{$canonical="/products" scope=parent}
{/if}

меняем на:

{if $brand}
{$canonical="/{$rewrite->brands->url}/{$brand->url}" scope=parent}
{elseif $keyword}
{$canonical="/{$rewrite->catalog->url}?keyword={$keyword|escape}" scope=parent}
{else}
{$canonical="/{$rewrite->catalog->url}" scope=parent}
{/if}

Далее это:

{* Фильтр по брендам *}
{if $category->brands}
<div id="brands">
    <a href="catalog/{$category->url}" {if !$brand->id}class="selected"{/if}>Все бренды</a>
    {foreach $brand->brands as $b}
        <a data-brand="{$b->id}" href="{if $rewrite->uri[1]}{$rewrite->prevurl}{else}{$rewrite->url}{/if}/{$b->url}"><img src="{$config->brands_images_dir}{$b->image}" alt="{$b->name|escape}"></a>
    {/foreach}

    {foreach $category->brands as $b}
        {if $b->image}
        <a data-brand="{$b->id}" href="catalog/{$category->url}/{$b->url}"><img src="{$config->brands_images_dir}{$b->image}" alt="{$b->name|escape}"></a>
        {else}
        <a data-brand="{$b->id}" href="catalog/{$category->url}/{$b->url}" {if $b->id == $brand->id}class="selected"{/if}>{$b->name|escape}</a>
        {/if}
    {/foreach}
</div>
{/if}

меняем на

{* Фильтр по брендам *}
{if $category->brands}
<div id="brands">
    <a href="{$rewrite->catalog->url}" {if !$brand->id}class="selected"{/if}>Все бренды</a>
    {foreach $category->brands as $b}
        <a style="{if $b->url|in_array:$rewrite->uri}font-weight:bold;{/if}" data-brand="{$b->id}" href="{$rewrite->brands->url}/{$b->url}"><img src="{$config->brands_images_dir}{$b->image}" alt="{$b->name|escape}"></a>
    {/foreach}
</div>
{/if}

 

Ищем

<div id="path">
    <a href="/">Главная</a>
    {if $category}
    {foreach $category->path as $cat}
    → <a href="catalog/{$cat->url}">{$cat->name|escape}</a>
    {/foreach}
    {if $brand}
    → <a href="catalog/{$cat->url}/{$brand->url}">{$brand->name|escape}</a>
    {/if}
    {elseif $brand}
    → <a href="brands/{$brand->url}">{$brand->name|escape}</a>
    {elseif $keyword}
    → Поиск
    {/if}
</div>

и заменяем на

<div id="path">
    <a href="/">Главная</a>
    {if $breadcrumbs}
    {assign "numbrc" $breadcrumbs|count-1}
    {foreach from=$breadcrumbs key=i item=arr}
        {if $numbrc == $i} → {$arr[0]|escape}{else} → <a href="/{$arr[1]}">{$arr[0]|escape}</a>{/if}
    {/foreach}
    {/if}
</div>

Ищем

<!-- Название товара -->
<h3 class="{if $product->featured}featured{/if}"><a data-product="{$product->id}" href="products/{$product->url}">{$product->name|escape}</a></h3> 

и меняем на

 

<!-- Название товара -->
<h3 class="{if $product->featured}featured{/if}"><a data-product="{$product->id}" href="{$rewrite->url}/{$product->url}{$rewrite->prefix}{$product->id}">{$product->name|escape}</a></h3> 


Тоже самое и для картинки

 

<a href="products/{$product->url}"><img src="{$product->image->filename|resize:200:200}" alt="{$product->name|escape}"/></a> 

на

 

<a href="{$rewrite->url}/{$product->url}{$rewrite->prefix}{$product->id}"><img src="{$product->image->filename|resize:200:200}" alt="{$product->name|escape}"/></a>

Находим файл index.tpl а в нем

 

            <div id="catalog_menu">
            {* Рекурсивная функция вывода дерева категорий *}
            {function name=categories_tree}
            {if $categories}
            <ul>
            {foreach $categories as $c}
                {* Показываем только видимые категории *}
                {if $c->visible}
                    <li>
                        {if $c->image}<img src="{$config->categories_images_dir}{$c->image}" alt="{$c->name|escape}">{/if}
                        <a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}" data-category="{$c->id}">{$c->name|escape}</a>
                        {categories_tree categories=$c->subcategories}
                    </li>
                {/if}
            {/foreach}
            </ul>
            {/if}
            {/function}
            {categories_tree categories=$categories}
            </div>

меняем на

            <div id="catalog_menu">
            {include file='categories.tpl' categories=$categories}
            </div>

 

Дальше создаём собственно этот файл categories.tpl, который мы инклудили

{if $categories}
{if !isset($url)}{assign url $rewrite->catalog->url}{/if}
{if isset($prevurl)}{assign var="url" value="$url/$prevurl"}{/if}
{if $categories[0]->level == 1}
<ul>{foreach item=c from=$categories}
    {if $c->visible}
        <li>
            <a class="{if $c->url|in_array:$rewrite->uri}selected{/if}" href="{$url}/{$c->url}">{$c->name}</a>
            {include file='categories.tpl' prevurl=$c->url categories=$c->subcategories}
        </li>
    {/if}
    {/foreach}</ul>
{else}
<ul>{foreach item=c from=$categories}
    {if $c->visible}
        <li>
              <a class="{if $c->url|in_array:$rewrite->uri}selected{/if}" href="{$url}/{$c->url}">{$c->name}</a>
            {include file='categories.tpl' prevurl=$c->url categories=$c->subcategories}
        </li>
    {/if}
    {/foreach}</ul>
{/if}
{/if}

 

И последнее, находим файл product.tpl и меняем

{$canonical="/products/{$product->url}" scope=parent}

на

 

{$canurl = "{$rewrite->catalog->url}/{$rewrite->lasturi}"}
{if $rewrite->url != $canurl}
    {$canonical="/{$canurl}" scope=parent}
{/if}

Далее заменяем хлебные крошки по примеру файла products.tpl

 

Вобщем на этом всё. Если будут вопросы - пишите.

Да, небольшая инструкция, везде в коде где вы будете получать переменные $_GET, надо будет перепрописать их, например:

$menu = $_GET["menu"];

по новому будет выглядеть

$menu = $this->rewrite->arguments["menu"];

Либо получать их через системный клас request->get



#15 mishanya

mishanya
  • Фрилансер
  • 2 434 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 05.12.2017 - 19:03

пока все не смотрел, но есть проблема. любой товар доступен по любой ссылке вида /catalog/что-то там/товар_какоетоади

 

например можно так

catalog/wegwegwg/pylesos-dyson-dc23-pink-id24

catalog/bytovaya-tehnika/pylesos-dyson-dc23-pink-id232322235

catalog/bytovaya-tehnika/pylesosy/pylesos-dyson-dc23-pink-id999999

catalog/herherher/pylesos-dyson-dc23-pink-id6666666

 

а можно еще куча вариантов. всеровно выдаст этот товар. айди в конце ничего не играет, как и часть между catalog/ и названием товара.


Изменено: mishanya, 05.12.2017 - 19:05


#16 a13x

a13x
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 05.12.2017 - 19:09

В файле view/productView.php сделать так, помечено комментарием

        /********** хлебные крошки и проверка на категории / бренд ***********/
        $uri = $this->rewrite->uri;
        //передаем в шаблон массив со ссылками (URL строкой разбитой по /) для активации выбранных меню
        $this->design->assign('rewrite', $this->rewrite);
        $num = count($uri) - 2;            //берем ПРЕДпоследний аргумент из урла - категорию или бренд
        $br_cat = $uri[$num];
        if($uri[0] == $this->rewrite->brands->url){    //для брендов
            $this->breadcrumbs[] = [$this->rewrite->brands->name, $this->rewrite->brands->url];
            $brand = $this->brands->get_brand((string) $br_cat);
            if(empty($brand))
                return false;
            $this->breadcrumbs[] = [$brand->name, $this->rewrite->brands->url."/".$brand->url];
        }
        else{    //для категорий
            $category = $this->categories->get_category((string) $br_cat);
            /****************************/
            if(empty($category))
                return false;
            /****************************/
            $this->breadcrumbs[] = [$this->rewrite->catalog->name, $this->rewrite->catalog->url];
            if(isset($category->path)){
                foreach($category->path AS $key => $cat){
                    $urikey = $key + 1;        //0 - /catalog/, поэтому +1
                    $url[] = $uri[$urikey];
                    $this->breadcrumbs[] = [$cat->name, $this->rewrite->catalog->url."/".implode("/", $url)];
                    if($cat->url != $uri[$urikey]){        //проверка всех категорий урла на правильную вложенность
                        return false;
                    }
                }
            }
        }
        $this->breadcrumbs[] = [$product->name, ""];    //добавляем хлебную крошку к товару
        $this->design->assign('breadcrumbs', $this->breadcrumbs);
        /********** хлебные крошки и проверка на категории / бренд ***********/

Изменено: a13x, 05.12.2017 - 19:11


#17 a13x

a13x
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 05.12.2017 - 19:13

пока все не смотрел, но есть проблема. любой товар доступен по любой ссылке вида /catalog/что-то там/товар_какоетоади

 

например можно так

catalog/wegwegwg/pylesos-dyson-dc23-pink-id24

catalog/bytovaya-tehnika/pylesos-dyson-dc23-pink-id232322235

catalog/bytovaya-tehnika/pylesosy/pylesos-dyson-dc23-pink-id999999

catalog/herherher/pylesos-dyson-dc23-pink-id6666666

 

а можно еще куча вариантов. всеровно выдаст этот товар. айди в конце ничего не играет, как и часть между catalog/ и названием товара.

Этот id идентификатор того что ты заходишь в товар, а не в категорию. Впринципе можно сделать чтобы товар искался по этому ID, а не по ссылке как сейчас. Я оставил именно ссылку т.к. она изначально была в системе.

Нет, можно конечно сделать и без ID, тогда надо на несуществующей категории проверять товар. Может в дальнейшем так и сделаю, а пока оставлю так


Изменено: a13x, 05.12.2017 - 19:20


#18 Kosjak76

Kosjak76
  • Модератор
  • 3 608 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 05.12.2017 - 19:13

Зачем вот это все? не понимаю...

Наплодить кучу дублей, а потом бороться с ними через каноникал? Какой-то бред.

Не проще сразу при сохранении товара сформировать полный урл вида

http://routing.simpl...0-galaxy-mini-2

И потом прямо по нему проверять?

А генерить РАЗНЫЕ ссылки и крошки для ОДНОГО товара - это глупость и не имеет смысла.



#19 a13x

a13x
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 05.12.2017 - 19:15

Все эти дубли отдаются через rel canonical, а надо это для визуализации и наглядности.

Все дубли проверяются и в canonical отдаётся ссылка вида: /catalog/item-name-id5

Не проще сразу при сохранении товара сформировать полный урл вида

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

А генерить РАЗНЫЕ ссылки и крошки для ОДНОГО товара - это глупость и не имеет смысла.

:lol: видимо вы не очень хорошо знакомы с сео раскруткой


Изменено: a13x, 05.12.2017 - 19:46


#20 mishanya

mishanya
  • Фрилансер
  • 2 434 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 05.12.2017 - 19:20

Этот id идентификатор того что ты заходишь в товар, а не в категорию. Впринципе можно сделать чтобы товар искался по этому ID, а не по ссылке как сейчас. Я оставил именно ссылку т.к. она изначально была в системе.

 

да, только он не проверяется никак. там можно ставить любой айди и будет норм выдавать ссылку.

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


Изменено: mishanya, 05.12.2017 - 19:20






Также с меткой «simpla, htaccess, url, rewrite, php»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых