a13x Posted November 26, 2017 Report Share Posted November 26, 2017 (edited) Подскажите пожалуйста, может кто уже реализовывал правильное отображение ссылок в ИМ на SIMPLA?Под правильным я имею ввиду сохранение полной структуры путей, например:http://test.ru/catalog/car/track/volvo/xc-90/вместо того что по умолчанию используется в SIMPLAhttp://test.ru/catalog/car/http://test.ru/catalog/track/http://test.ru/catalog/volvo/http://test.ru/products/xc-90/Может я зря всё это затеял и уже давным давно есть готовое решение, просто я его не нашёл? p.s. конечно для апача всё же будет задействован файл .haccess, но всего с парой строк, где будет указан обработчик урлов. Edited November 26, 2017 by a13x Quote Link to post Share on other sites
shooroop Posted November 26, 2017 Report Share Posted November 26, 2017 http://forum.simplacms.ru/topic/7565-%D1%80%D0%BE%D1%83%D1%82%D0%B8%D0%BD%D0%B3-%D0%BD%D0%B0-%D1%81%D0%B8%D0%BC%D0%BF%D0%BB%D0%B5/ Quote Link to post Share on other sites
shooroop Posted November 26, 2017 Report Share Posted November 26, 2017 http://simpla-tuning.com/adresatsiya-v-svobodnoj-forme Quote Link to post Share on other sites
Kosjak76 Posted November 26, 2017 Report Share Posted November 26, 2017 Я недавно делал новый вариант роутинга.Пишите в скайп kosjak1976 - покажу пример. Quote Link to post Share on other sites
a13x Posted November 27, 2017 Author Report Share Posted November 27, 2017 (edited) http://forum.simplacms.ru/topic/7565-%D1%80%D0%BE%D1%83%D1%82%D0%B8%D0%BD%D0%B3-%D0%BD%D0%B0-%D1%81%D0%B8%D0%BC%D0%BF%D0%BB%D0%B5/Немного не то, надо переписывать сам движок и изменять получение параметров через $this->request->getСам сначала пошёл по этому пути но понял что это не по феншую, в итоге немного переписал класс REQUEST и добавил свой.С генерацией изображений проблем нет, с категориями тоже. Сейчас допиливаю остальное. http://simpla-tuning.com/adresatsiya-v-svobodnoj-formeТут надо просто разрешить спецсимволы в урле, что вобщем то тоже не то да и глупо это в плане SEO оптимизации. Я недавно делал новый вариант роутинга.Пишите в скайп kosjak1976 - покажу пример.Спасибо, написал. p.s. единственная засада только со smarty которая в шаблоне использует $smarty.get Edited November 27, 2017 by a13x Quote Link to post Share on other sites
a13x Posted November 28, 2017 Author Report Share Posted November 28, 2017 (edited) Вобщем решил сам писать. Покупать у Kosjak76 желания нет. Поэтому если кому-то будет актуально - пишите.скайп webtask.pro или на почту lelik.177@yandex.ru+ в дальнейшем хочу дописать модуль страницы, чтобы у страниц была вложенность (как у категорий через parent_id). Edited November 28, 2017 by a13x Quote Link to post Share on other sites
Noxter Posted November 28, 2017 Report Share Posted November 28, 2017 Вобщем решил сам писать. Покупать у Kosjak76 желания нет. Поэтому если кому-то будет актуально - пишите. скайп webtask.pro или на почту lelik.177@yandex.ruВопрос: зачем кому-то писать тебе? Лично у меня к Косте есть доверие в отличии от тебя и если бы пришлось выбирать я бы выбрал Костю, впрочем как и всегда Quote Link to post Share on other sites
a13x Posted November 28, 2017 Author Report Share Posted November 28, 2017 Вопрос: зачем кому-то писать тебе? Лично у меня к Косте есть доверие в отличии от тебя и если бы пришлось выбирать я бы выбрал Костю, впрочем как и всегда Я не просил мне писать, я лишь хотел узнать может человек поделиться или нет. Из разговора я понял что он его продаёт отдельно. Вот и всё. Quote Link to post Share on other sites
Noxter Posted November 28, 2017 Report Share Posted November 28, 2017 Я не просил мне писать, я лишь хотел узнать может человек поделиться или нет. Из разговора я понял что он его продаёт отдельно. Вот и всё.А вы выходит не продаёте? Quote Link to post Share on other sites
a13x Posted November 28, 2017 Author Report Share Posted November 28, 2017 А вы выходит не продаёте?я пока не дописал. продавать не собирался, кому надо с тем поделюсь. у меня хватает работы за которую я получаю деньги. Quote Link to post Share on other sites
miltonmors Posted November 29, 2017 Report Share Posted November 29, 2017 я пока не дописал. продавать не собирался, кому надо с тем поделюсь. у меня хватает работы за которую я получаю деньги. А открыто на форуме не поделитесь? Как раз кому надо, те и будут использовать, чтоб каждый желающий индивидуально Вас не дергал. Заодно народ и потестирует... Quote Link to post Share on other sites
Gruzin Posted November 29, 2017 Report Share Posted November 29, 2017 А открыто на форуме не поделитесь? Как раз кому надо, те и будут использовать, чтоб каждый желающий индивидуально Вас не дергал. Заодно народ и потестирует...Отличное предложение. Quote Link to post Share on other sites
a13x Posted November 29, 2017 Author Report Share Posted November 29, 2017 А открыто на форуме не поделитесь? Как раз кому надо, те и будут использовать, чтоб каждый желающий индивидуально Вас не дергал. Заодно народ и потестирует...Да без проблем. Думаю через недельку выложу. Описание будет дано под последнюю версию симплы т.к. у меня шаблон сильно модифицирован поэтому сложно понять где оригинал, а где доработки, поэтому разверну оригинал и там всё сделаю. Quote Link to post Share on other sites
a13x Posted December 5, 2017 Author Report Share Posted December 5, 2017 Сделал основную часть.Ссылка на я.диск 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.php4. Зайти по адресу сайта и в конце урла дописать "?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 Quote Link to post Share on other sites
mishanya Posted December 5, 2017 Report Share Posted December 5, 2017 (edited) пока все не смотрел, но есть проблема. любой товар доступен по любой ссылке вида /catalog/что-то там/товар_какоетоади например можно такcatalog/wegwegwg/pylesos-dyson-dc23-pink-id24catalog/bytovaya-tehnika/pylesos-dyson-dc23-pink-id232322235catalog/bytovaya-tehnika/pylesosy/pylesos-dyson-dc23-pink-id999999catalog/herherher/pylesos-dyson-dc23-pink-id6666666 а можно еще куча вариантов. всеровно выдаст этот товар. айди в конце ничего не играет, как и часть между catalog/ и названием товара. Edited December 5, 2017 by mishanya Quote Link to post Share on other sites
a13x Posted December 5, 2017 Author Report Share Posted December 5, 2017 (edited) В файле 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); /********** хлебные крошки и проверка на категории / бренд ***********/ Edited December 5, 2017 by a13x Quote Link to post Share on other sites
a13x Posted December 5, 2017 Author Report Share Posted December 5, 2017 (edited) пока все не смотрел, но есть проблема. любой товар доступен по любой ссылке вида /catalog/что-то там/товар_какоетоади например можно такcatalog/wegwegwg/pylesos-dyson-dc23-pink-id24catalog/bytovaya-tehnika/pylesos-dyson-dc23-pink-id232322235catalog/bytovaya-tehnika/pylesosy/pylesos-dyson-dc23-pink-id999999catalog/herherher/pylesos-dyson-dc23-pink-id6666666 а можно еще куча вариантов. всеровно выдаст этот товар. айди в конце ничего не играет, как и часть между catalog/ и названием товара.Этот id идентификатор того что ты заходишь в товар, а не в категорию. Впринципе можно сделать чтобы товар искался по этому ID, а не по ссылке как сейчас. Я оставил именно ссылку т.к. она изначально была в системе.Нет, можно конечно сделать и без ID, тогда надо на несуществующей категории проверять товар. Может в дальнейшем так и сделаю, а пока оставлю так Edited December 5, 2017 by a13x Quote Link to post Share on other sites
Kosjak76 Posted December 5, 2017 Report Share Posted December 5, 2017 Зачем вот это все? не понимаю...Наплодить кучу дублей, а потом бороться с ними через каноникал? Какой-то бред.Не проще сразу при сохранении товара сформировать полный урл видаhttp://routing.simpla.pp.ua/mobilnye-telefony/samsung-s5570-galaxy-mini-2И потом прямо по нему проверять?А генерить РАЗНЫЕ ссылки и крошки для ОДНОГО товара - это глупость и не имеет смысла. Quote Link to post Share on other sites
a13x Posted December 5, 2017 Author Report Share Posted December 5, 2017 (edited) Все эти дубли отдаются через rel canonical, а надо это для визуализации и наглядности.Все дубли проверяются и в canonical отдаётся ссылка вида: /catalog/item-name-id5 Не проще сразу при сохранении товара сформировать полный урл видаНет, не проще, потому что товар может принадлежать к разным категориям и должен вызываться одинаково из разных категорий, а по вашей ссылке, товар будет привязан только к одной. А генерить РАЗНЫЕ ссылки и крошки для ОДНОГО товара - это глупость и не имеет смысла. видимо вы не очень хорошо знакомы с сео раскруткой Edited December 5, 2017 by a13x Quote Link to post Share on other sites
mishanya Posted December 5, 2017 Report Share Posted December 5, 2017 (edited) Этот id идентификатор того что ты заходишь в товар, а не в категорию. Впринципе можно сделать чтобы товар искался по этому ID, а не по ссылке как сейчас. Я оставил именно ссылку т.к. она изначально была в системе. да, только он не проверяется никак. там можно ставить любой айди и будет норм выдавать ссылку.можно проверять сначала является конечная ссылка товаром или нет без айди. а потом уже остальное. Edited December 5, 2017 by mishanya Quote Link to post Share on other sites
a13x Posted December 5, 2017 Author Report Share Posted December 5, 2017 (edited) да, только он не проверяется никак. там можно ставить любой айди и будет норм выдавать ссылку.можно проверять сначала является конечная ссылка товаром или нет без айди. а потом уже остальное.Согласен, надо будет переписать эту часть и отказаться от ID вобще, либо проверять по этому ID Edited December 5, 2017 by a13x Quote Link to post Share on other sites
yr4ik Posted December 5, 2017 Report Share Posted December 5, 2017 как то вроде многовато правок по движку... А почему не сделать разбор реврайта прямо в классе request? Или же в его конструкторе вызвать иницализацию api rewrite с дальнейшей подменой глобальных _POST и _GET. Тогда, я думаю, не придется столько править файлов. что касается ссылки catalog.Можно сделать ссылку вида /catalog/категория1/категория2/product_продукт3далее при разборе если в последней части урл начинается с "product_" - значит это товар и просто проверяем цепочку url категорий Quote Link to post Share on other sites
a13x Posted December 5, 2017 Author Report Share Posted December 5, 2017 (edited) далее при разборе если в последней части урл начинается с "product_" - значит это товарВсё правильно, я этот вариант тоже начал рассматривать, не знаю зачем я с ID заморочился. А почему не сделать разбор реврайта прямо в классе request? Или же в егоконструкторе вызвать иницализацию api rewrite с дальнейшей подменойглобальных _POST и _GET. Тогда, я думаю, не придется столько правитьфайлов.Везде где есть запросы не через класс request - придётся править. Я пока нашёл это в двух местах - index.php и resize.php. Во всех остальных местах всё через класс request обрабатывается.Слишком объёмный конструктор получится + много данных надо передавать в смарти, поэтому мне было проще сделать новый класс.По поводу объёмных модификаций, то иначе не получается. Хотел как можно меньше затрагивать файлы, но это минимум который получился. На моём шаблоне правок гораздо больше.Если получится оптимизировать - напишите своё решение, буду рад взглянуть. Edited December 5, 2017 by a13x Quote Link to post Share on other sites
yr4ik Posted December 5, 2017 Report Share Posted December 5, 2017 (edited) ну делайте разбор в своем api. Что мешает ? 1) делаете в __construct класса Request первой строкой $this->rewrite->init(); 2) в методе rewrite->init делаете весь разбор с записью данных в _GET.К примеру товар, по результату, что бы массив получался вида:$_GET['module'] = 'ProductView';$_GET['product_url'] = 'url_product/'; и тд. Тогда в дальнейшем зачем вся эта куча правок? PS: только блок на админку нужно сделать Edited December 5, 2017 by yr4ik Quote Link to post Share on other sites
a13x Posted December 6, 2017 Author Report Share Posted December 6, 2017 ну делайте разбор в своем 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 связан с проверками категорий, товаров и прочего. Поэтому что-то ещё лучше оптимизировать врядли получится, но если вы сможете, то напишите Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.