Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

Fixed.

http://simpla-url-rewrite.webtask.pro/catalog/bytovaya-tehnika/pylesosy/pylesos-dyson-dc32-animalpro

 

Чтобы сделать урл без префикса, достаточно в файле Urewrite.php заменить метод на product_check() на этот

    public function product_check(){
        $prod_url = $this->lasturi;
        $product = $this->products->get_product((string)$prod_url);
        if(isset($product)){
            $this->module = "ProductView";
            $this->arguments["product_url"] = $prod_url;
        }
    }

и в файле-шаблоне design/html/products.tpl сделать ссылку на товар вида:

<a data-product="{$product->id}" href="{$rewrite->url}/{$product->url}">{$product->name|escape}</a>

везде где это необходимо.

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

В файле view/ProductView.php найти условие

if(empty($category))

и зменить на:

if(empty($category) && $br_cat != $this->rewrite->catalog->url)
Изменено пользователем a13x
Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 51
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Вообщем вы не поняли к чему я вел... 

 

Ладно. Уберите хотя бы фатал ерор с ресайза. Там явно нет переменной $this 

Ссылка на сообщение
Поделиться на другие сайты

Вообщем вы не поняли к чему я вел... 

 

Ладно. Уберите хотя бы фатал ерор с ресайза. Там явно нет переменной $this 

Убрал.

 

1. В файле URewrite.php найти case "files": и внизу убрать слово exit();

2. В файле resize/resize.php сделать так

$filename = $simpla->rewrite->arguments["file"];
$token = $simpla->rewrite->arguments["token"];
Изменено пользователем a13x
Ссылка на сообщение
Поделиться на другие сайты

 

Имеем дубли типа

http://simpla-url-rewrite.webtask.pro/catalog/bytovaya-tehnika/pylesosy/pylesos-dyson-dc32-animalpro

http://simpla-url-rewrite.webtask.pro/catalog/bytovaya-tehnika/pylesosy/pylesosy/pylesos-dyson-dc32-animalpro

http://simpla-url-rewrite.webtask.pro/catalog/bytovaya-tehnika/pylesosy/pylesosy/pylesosy/pylesos-dyson-dc32-animalpro

 

А все же, поясните глупому, зачем вся эта возня? Если хочется .htaccess  совсем не использовать, это еще понятно. Но пока вижу, что  .htaccess  сократили на 20-30 строк, но вместо этого написали горы нового кода, в котором еще ошибки править и править? Если это для адресов типа site.ru/catalog/cat_name1/cat_name2/prod_name, то это куда проще можно было бы сделать...

 

А в демо можете дать доступ к админке, чтоб проверить возможности некоторых ошибок?

Ссылка на сообщение
Поделиться на другие сайты

Почитайте про тег LINK атрибут REL=CANONICAL и вы поймёте что это не дубли.

 

А все же, поясните глупому, зачем вся эта возня?

Я уже писал выше. Во первых, это делается для удобства пользователей сайта, во вторых это правильнее в плане сео раскрутки, в третьих избавление от кучи ненужных строк в htaccess и простой установкой на nginx.

 

 

Если хочется .htaccess  совсем не использовать, это еще понятно. Но

пока вижу, что  .htaccess  сократили на 20-30 строк

Совсем не использовать нельзя, 1 строка будет полюбому, где вы будете указывать обработчик урлов, поэтому я сократил не НА столько, а ДО стольких то. Если его почистить то можно оставить всего 4 строки, при условии что у вас правильно настроен апач.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)$ /index.php?rewrite=$1 [L]

 

 

 

но вместо этого написали горы нового кода, в котором еще ошибки править и править?

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

Если это для адресов типа site.ru/catalog/cat_name1/cat_name2/prod_name, то это куда проще можно было бы сделать..

Например? Через htaccess? Спасибо, я уже видел этот кривой подход некоторых умельцев где идут строки длинной во весь экран с перечислением $1, $2, $3, $4 и так далее для разных урлов. Проблему можно решить по разному, кто-то решает так, флаг в руки.

 
А в демо можете дать доступ к админке, чтоб проверить возможности некоторых ошибок?

Я к админке не прикасался, она не тронута ни на грамм и должна работать как обычно. Насколько знаю там index.php файл всё обрабатывает и обработчик урлов не работает.

 

Ссылка на сообщение
Поделиться на другие сайты

Ну нечего делать человеку - пусть фигней страдает... Не мешайте))

Вбил себе в голову, что так будет лучше - это проблемы его и его врача.



catalog/bytovaya-tehnika/pylesosy/pylesosy/pylesosy/pylesos-dyson-dc32-animalpro

Офигительная ссылка! Я просто ору...

Очень удобно для пользователей сайта.

Ссылка на сообщение
Поделиться на другие сайты

Ну нечего делать человеку - пусть фигней страдает... Не мешайте))

Вбил себе в голову, что так будет лучше - это проблемы его и его врача.

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

 

p.s. Только ты почему то сам сделал этот же модуль и продаёшь его, а мне вдруг врач нужен :lol: Попахивает двойными стандартами

Изменено пользователем a13x
Ссылка на сообщение
Поделиться на другие сайты

Да мне пофиг))

И если ты ВНИМАТЕЛЬНО прочитаешь первое сообщение той темы - ты поймешь, почему твое решение НЕ ПОДОЙДЕТ.

Ссылка на сообщение
Поделиться на другие сайты

Да мне пофиг))

И если ты ВНИМАТЕЛЬНО прочитаешь первое сообщение той темы - ты поймешь, почему твое решение НЕ ПОДОЙДЕТ.

Я аргументировал все свои ответы, а если вы чего-то не знаете, то это уже ваши проблемы. В СИМПЛА изначально идёт проверка на дубли, я лишь её переделал поскольку бренды и категории теперь не смешаны как это было раньше. А теперь вопрос, ПОЧЕМУ МОЁ РЕШЕНИЕ НЕ ПОДОЙДЁТ? получится аргументированно ответить или нет?

Систему битрикс по вашему наверно тоже дураки разрабатывали :lol:

Ссылка на сообщение
Поделиться на другие сайты

 

P.S: до сих пор использую древнюю версию 1.4, так как в своё время кучу всего переписал в движке, а в новых версиях этих вещей до сих пор нет, и мне лень заново писать. Поэтому прошу не предлагать переходить на новую версию.

Достаточно аргументировано?

Ссылка на сообщение
Поделиться на другие сайты

Достаточно аргументировано?

:lol: вполне. надеюсь у него не Windows XP.  я почему то думал что речь идёт про сам модуль.

Ссылка на сообщение
Поделиться на другие сайты
http://simpla-url-rewrite.webtask.pro/catalog/bytovaya-tehnika/pylesosy/bytovaya-tehnika/pylesosy/bytovaya-tehnika/pylesos-dyson-dc23-pink

И даже такая ссылка - это нормально?

Если разделены Бренды и Категории - сделай в Категории поле full_url, например.

И пиши в него полный урл категории вида bytovaya-tehnika/pylesosy

А по нему уже и проверяй.

http://prntscr.com/hk83t4

Я так делал в одном проекте. Это намного удобнее и не будет такого.

Ссылка на сообщение
Поделиться на другие сайты

Или даже без поля в базе.

Собирать этот урл у категории в том месте, где собирается path

Но мне с хранением в базе было удобнее.

Просто попробуй - и удивишься, насколько все станет проще и удобней. и уйдет половина дублей.

Ссылка на сообщение
Поделиться на другие сайты

Я уже писал выше. Во первых, это делается для удобства пользователей сайта, во вторых это правильнее в плане сео раскрутки, в третьих избавление от кучи ненужных строк в htaccess и простой установкой на nginx.

 

1. для удобства пользователей сайта,

2. правильнее в плане сео раскрутки,

3. избавление от кучи ненужных строк в htaccess,

4. простой установкой на nginx.

 

1. А в чем состоит удобство для пользователей? По-моему, они в большинстве случаев на URL внимания не обращают вообще.

 

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

2.1 site.ru/products/product_url

2.2 site.ru/catalog/cat1/cat2/product_url

2.2 site.ru/product_url - вообще без меток для разбора

2.4 site.ru/goods/product_url - со своей метки

А у Вас получается специфичная адресация. А надо бы более гибко.

 

3. И чем Вам эти строки помешали?

 

4. Тут еще есть некоторый смысл. Но и при существующей системе давно известно решение на порядок проще:

http://forum.simplacms.ru/topic/3243-simpla-cms-i-nginx/

 

 

А в демо можете дать доступ к админке, чтоб проверить возможности некоторых ошибок?
Я к админке не прикасался, она не тронута ни на грамм и должна работать как обычно. Насколько знаю там index.php файл всё обрабатывает и обработчик урлов не работает.

 

Даже если она работает как обычно, то результат зависит от данных, которые в ней введены.

Было интересно, в частности, создать товар с URL pylesosy и посмотреть, как будет при Вашей разработке определяться адрес bytovaya-tehnika/pylesosy - он подходит как для товара, так и для категории.

Подозреваю, тут в любом случае будет ошибка - одна из страниц - товара или категории - будет недоступна в принципе. Вот спеца по СЕО обрадуете...

Ссылка на сообщение
Поделиться на другие сайты

Помоему никто не будет создавать товар с таким же названием как у категории. Вы слишком категоричны + всегда для этого можно будет ввести префикс идентификации товара.

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

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

3. тем что при переносе на nginx их надо переписывать

4. решение есть и будет всегда, мой метод лишь объединяет всё это в одном, и конфиг нгинкса что вы скинули у меня выглядит так:

    location ~ (api|config|design/html|payment|smarty|view) {
        deny all;
    }

    location / {
         try_files $uri @urewrite;
    }
    location @urewrite {
        index index.php;
        rewrite ^/(.+)$ /index.php?rewrite=$1 last;
    }

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

Изменено пользователем a13x
Ссылка на сообщение
Поделиться на другие сайты

 

http://simpla-url-rewrite.webtask.pro/catalog/bytovaya-tehnika/pylesosy/bytovaya-tehnika/pylesosy/bytovaya-tehnika/pylesos-dyson-dc23-pink

И даже такая ссылка - это нормально?

Если разделены Бренды и Категории - сделай в Категории поле full_url, например.

И пиши в него полный урл категории вида bytovaya-tehnika/pylesosy

А по нему уже и проверяй.

http://prntscr.com/hk83t4

Я так делал в одном проекте. Это намного удобнее и не будет такого.

По ссылке согласен, где то упустил проверку....допилил.

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

 

Чтобы исправить множественное вложение категорий, которое кроме как руками не вызвать, достаточно прописать в файле view/ProductView.php доп.проверку:

Найти код:

 

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;
} 

и зменить на:

 

foreach($category->path AS $key => $cat){
    $urikey = $key + 1;        //0 - /catalog/, поэтому +1
    $url[] = $uri[$urikey];
    $full_url = $this->rewrite->catalog->url."/".implode("/", $url);
    $this->breadcrumbs[] = [$cat->name, $full_url];
    if($cat->url != $uri[$urikey])
        return false;
}
$url_to_prod = $full_url."/".$this->rewrite->lasturi;
if($this->rewrite->url != $url_to_prod){
    header("Location: /".$url_to_prod, true, 301);
    exit();
} 
Изменено пользователем a13x
Ссылка на сообщение
Поделиться на другие сайты

1. В симпле же если я зайду в товар, то по крошкам я увижу каталог и бренд, но не полную иерархию категорий товара

 

Как это? Вот, например, в товаре http://demo.simplacms.ru/products/pylesos-dyson-dc23-pink видна полная иерархия и еще бренд. Если вдруг последний не нравится, легко убрать пару строк в шаблоне.

Давным-давно сделано и чудесно работает...

 

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

 

Хорошо, сколько Вам времени надо, чтоб дописать в стиле

2.2 site.ru/product_url - вообще без меток для разбора

для товаров, категорий, блога и страниц?

Если можно, допишите на демо.

Идеально, если будет переключатель для разных стилей URL - обычный Ваш и стиль 2.2.

Подозреваю, что быстро без ошибок не сделаете.

 

3. тем что при переносе на nginx их надо переписывать

4. мой метод лишь объединяет всё это в одном

 

3,4. Так сравните Ваше решение и способ, при котором надо переписать стандартно парочку конфигурационнных файлов. То есть Вы придумали решение на порядок более сложное, чем было известно ранее...

Помоему никто не будет создавать товар с таким же названием как у категории. Вы слишком категоричны + всегда для этого можно будет ввести префикс идентификации товара.

 

Программист не должен заниматься такими глупостями, как фантазировать, кто и как будет называть. Он должен стремиться к тому, чтоб его продукт работал корректно ВО ВСЕХ случаях, или хотя бы в большинстве.

 

5. А сейчас, как я понимаю, имеем очевидный недостаток: этот азбучный момент - защита от одинаковых URL - у Вас вообще не планировался...

Изменено пользователем Пастухов
Ссылка на сообщение
Поделиться на другие сайты

 

5. А сейчас, как я понимаю, имеем очевидный недостаток: этот азбучный момент - защита от одинаковых URL - у Вас вообще не планировался...

О чём сейчас речь? Какие одинаковые урлы?

 

Программист не должен заниматься такими глупостями, как фантазировать,

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

работал корректно ВО ВСЕХ случаях, или хотя бы в большинстве.

Я не хочу спорить, я лишь основываюсь на более чем 10-ти летнем опыте работы в этой сфере. Мне в принципе всё равно кто что должен и нет, я привык делать так, как будет удобно в дальнейшем мне и заказчику, так и делаю. По работе мне приходится продумывать ВСЕ мелочи, включая и такие, и в 99% случаев ни один нормальный человек не будет называть товар ПЫЛЕСОСЫ.

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

 

3,4. Так сравните Ваше решение и способ, при котором надо переписать стандартно парочку конфигурационнных файлов. То есть Вы придумали решение на порядок более сложное, чем было известно ранее...

Пусть будет так, но я придумал решение которое не зависит от вебсервера (апач или нгинкс), решение которое ПРАВИЛЬНО отображает иерархию категорий. Да, может оно местами где-то сложно написано, но уж как есть.

 

 

Хорошо, сколько Вам времени надо, чтоб дописать в стиле

2.2 site.ru/product_url - вообще без меток для разбора

для товаров, категорий, блога и страниц?

Если можно, допишите на демо.

Идеально, если будет переключатель для разных стилей URL - обычный Ваш и стиль 2.2.

Подозреваю, что быстро без ошибок не сделаете.

Вся суть заключается лишь в проверке нет ли такой страницы, если нет то проверка по товару, если нет то проверка по блогу и так далее, но этот подход УЖЕ неправильный. У каждой страницы, у которой есть вложения должен быть свой адрес /catalog/, /blog/, /page/ и тп. Если для page сделали дефолтно (без префикса), то зачем это менять и что-то добавлять?

Суть этого модуля совсем не в этом.

 

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

Всё что мне надо это ссылка такого вида: http://demo.simplacms.ru/catalog/pylesosy/pylesos-dyson-dc23-pink со всеми вложениями, а этого по умолчанию нет

Изменено пользователем a13x
Ссылка на сообщение
Поделиться на другие сайты

О чём сейчас речь? Какие одинаковые урлы?

Я не хочу спорить, я лишь основываюсь на более чем 10-ти летнем опыте работы в этой сфере. Мне в принципе всё равно кто что должен и нет, я привык делать так, как будет удобно в дальнейшем мне и заказчику, так и делаю. По работе мне приходится продумывать ВСЕ мелочи, включая и такие, и в 99% случаев ни один нормальный человек не будет называть товар ПЫЛЕСОСЫ.

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

 

"объясню ему как правильно называть товары" - Вот это и есть халтура программистская. А то он и так не знает, как называть - несколько символов на клавиатуре набрать.

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

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

 

 

1. Так что в итоге? Вам не нравится в хлебных крошках бренд. Вы не догадались, что это убирается элементарно в шаблоне, в вместо простенького действия проводите сложную доработку, которая для хлебных крошек ничего нового не добавляет - там и раньше был путь. Выходит, никакого добавочного удобства для посетителя доработка не несет.

 

 

 

 

Ссылка на сообщение
Поделиться на другие сайты

Я уже писал что делает этот модуль и для чего он. Не вижу смысла повторяться. Если вас всё устраивает, значит он вам не нужен.

 

p.s. файл categories.tpl конечно же должен быть без одинакового вывода при проверке род. категории, а именно:

{if $categories}
{if !isset($url)}{assign url $rewrite->catalog->url}{/if}
{if isset($prevurl)}{assign var="url" value="$url/$prevurl"}{/if}
<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}
 

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

Изменено пользователем a13x
Ссылка на сообщение
Поделиться на другие сайты

 

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

Это не про товар, а про категорию.

У категории же путь всегда одинаковый, правильно?

Ссылка на сообщение
Поделиться на другие сайты

Это не про товар, а про категорию.

У категории же путь всегда одинаковый, правильно?

Да, правильно, можно и так реализовать, но тогда надо будет писать костыли для смарти на проверку активных категорий (когда добавляется класс active). В моём случае я проверяю по функции in_array(категория, массив категорий урла)

class="{if $c->url|in_array:$rewrite->uri}selected{/if}"

а вот как в вашем случае будет, это надо подумать, но в целом можно и так задачу решить, тут уж кто как хочет.

Ссылка на сообщение
Поделиться на другие сайты
  • 3 месяца спустя...
  • 2 года спустя...

Отличное решение

нужно еще сделать в фильтрации и сортировке с:

http://simpla-url-rewrite.webtask.pro/catalog/mobilnye-telefony?4=Android+2.3

на:

http://simpla-url-rewrite.webtask.pro/catalog/mobilnye-telefony/Android_2.3

Ссылка на сообщение
Поделиться на другие сайты

Отличное решение

нужно еще сделать в фильтрации и сортировке с:

http://simpla-url-rewrite.webtask.pro/catalog/mobilnye-telefony?4=Android+2.3

на:

http://simpla-url-rewrite.webtask.pro/catalog/mobilnye-telefony/Android_2.3

Могу предложить платное решение потому как тут простой маленькой инструкцией не обойтись, нужно вносить огромное количество изменений в движке и БД.
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...