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

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


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

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

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

http://test.ru/catalog/car/track/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
Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 51
  • Дата создания
  • Последний ответ

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

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

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

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

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

 

 

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

 

 

 

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

Ссылка на я.диск 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

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

пока все не смотрел, но есть проблема. любой товар доступен по любой ссылке вида /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
Ссылка на сообщение
Поделиться на другие сайты

В файле 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
Ссылка на сообщение
Поделиться на другие сайты

пока все не смотрел, но есть проблема. любой товар доступен по любой ссылке вида /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
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

http://routing.simpla.pp.ua/mobilnye-telefony/samsung-s5570-galaxy-mini-2

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

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

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

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

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

 

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

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

 

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

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

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

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

 

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

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

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

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

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

Согласен, надо будет переписать эту часть и отказаться от ID вобще, либо проверять по этому ID :D

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

как то вроде многовато правок по движку...

 

А почему не сделать разбор реврайта прямо в классе request? Или же в его конструкторе вызвать иницализацию api rewrite с дальнейшей подменой глобальных _POST и _GET. Тогда, я думаю, не придется столько править файлов. 

 

что касается ссылки catalog.

Можно сделать ссылку вида /catalog/категория1/категория2/product_продукт3

далее при разборе если в последней части урл начинается с "product_" - значит это товар

 

и просто проверяем цепочку url категорий 

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

 

далее при разборе если в последней части урл начинается с "product_" - значит это товар

Всё правильно, я этот вариант тоже начал рассматривать, не знаю зачем я с ID заморочился.

 

 

А почему не сделать разбор реврайта прямо в классе request? Или же в его

конструкторе вызвать иницализацию api rewrite с дальнейшей подменой

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

файлов.

Везде где есть запросы не через класс request - придётся править. Я пока нашёл это в двух местах - index.php и resize.php. Во всех остальных местах всё через класс request обрабатывается.

Слишком объёмный конструктор получится + много данных надо передавать в смарти, поэтому мне было проще сделать новый класс.

По поводу объёмных модификаций, то иначе не получается. Хотел как можно меньше затрагивать файлы, но это минимум который получился. На моём шаблоне правок гораздо больше.

Если получится оптимизировать - напишите своё решение, буду рад взглянуть.

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

ну делайте разбор в своем api. Что мешает ?

 

1) делаете в __construct класса Request первой строкой $this->rewrite->init();

 

2) в методе rewrite->init делаете весь разбор с записью данных в _GET.

К примеру товар, по результату, что бы массив получался вида:

$_GET['module'] = 'ProductView';

$_GET['product_url'] = 'url_product/';

 

и тд. 

Тогда в дальнейшем зачем вся эта куча правок? 

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

 

ну делайте разбор в своем api. Что мешает ?

 

1) делаете в __construct класса Request первой строкой $this->rewrite->init();

 

2) в методе rewrite->init делаете весь разбор с записью данных в _GET.

К примеру товар, по результату, что бы массив получался вида:

$_GET['module'] = 'ProductView';

$_GET['product_url'] = 'url_product/';

 

и тд. 

Тогда в дальнейшем зачем вся эта куча правок? 

 
PS: только блок на админку нужно сделать

Куча правок не относится к получению гет запросов, всё что связано с гет правится в классе request и в дальнейшем убираются из файлов переменные, которые определяются через этот GET (всего в 2-ух файлах). 50% остального кода это шаблонный вывод и ещё процентов 45 связан с проверками категорий, товаров и прочего.  Поэтому что-то ещё лучше оптимизировать врядли получится, но если вы сможете, то напишите ;)

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

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

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

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

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

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

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

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

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

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