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

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

Сам роутинг 

<?php
    $this->routes = array(
        # Каталог товаров
        array(
            'pattern' => '~^/catalog/([^/]+)/?$~',
            'class' => 'ProductsView',
            'aliases' => array('category'),
        ),
        array(
            'pattern' => '~^/catalog/([^/]+)/([^/]+)/?$~',
            'class' => 'ProductsView',
            'aliases' => array('category', 'brand'),
        ),
        array(
            'pattern' => '~^/products/([^/]+)/?$~',
            'class' => 'ProductView',
            'aliases' => array('product_url'),
        ),
        array(
            'pattern' => '~^/products/?$~',
            'class' => 'ProductsView',
        ),
        array(
            'pattern' => '~^/brands/([^/]+)/?$~',
            'class' => 'ProductsView',
            'aliases' => array('brand'),
        ),
        array(
            'pattern' => '~^/brands/([^/]+)/page_([^/]+)/?$~',
            'class' => 'ProductsView',
            'aliases' => array('brand', 'page'),
        ),
        # Поиск товаров
        array(
            'pattern' => '~^/search/([^/]+)/?$~',
            'class' => 'ProductsView',
            'aliases' => array('keyword'),
        ),
        array(
            'pattern' => '~^/search/?$~',
            'class' => 'ProductsView',
        ),
        # Блог
        array(
            'pattern' => '~^/blog/([^/]+)/?$~',
            'class' => 'BlogView',
            'aliases' => array('url'),
        ),
        array(
            'pattern' => '~^/blog/?$~',
            'class' => 'BlogView',
        ),
        # Корзина и заказы
        array(
            'pattern' => '~^/cart/?$~',
            'class' => 'CartView',
            'method' => 'cart',
        ),
        array(
            'pattern' => '~^/cart/([^/]+)/?$~',
            'class' => 'CartView',
            'aliases' => array('add_variant'),
        ),
        array(
            'pattern' => '~^/cart/remove/([^/]+)/?$~',
            'class' => 'CartView',
            'aliases' => array('delete_variant'),
        ),
        array(
            'pattern' => '~^/order/([^/]+)/?$~',
            'class' => 'OrderView',
        ),
        array(
            'pattern' => '~^/order/?$~',
            'class' => 'OrderView',
        ),    
        # Для пользователей
        array(
            'pattern' => '~^/user/login/?$~',
            'class' => 'LoginView',
        ),
        array(
            'pattern' => '~^/user/register/?$~',
            'class' => 'RegisterView',
        ),
        array(
            'pattern' => '~^/user/logout/?$~',
            'class' => 'LoginView',
            'aliases' => array('action'),
        ),
        array(
            'pattern' => '~^/user/password_remind/?$~',
            'class' => 'LoginView',
            'aliases' => array('action'),
        ),
        array(
            'pattern' => '~^/user/password_remind/([0-9a-z]+)/?$~',
            'class' => 'LoginView',
            'aliases' => array('action', 'code'),
        ),
        array(
            'pattern' => '~^/user/?$~',
            'class' => 'UserView',
        ),
        # Feedback
        array(
            'pattern' => '~^/contact/?$~',
            'class' => 'FeedbackView',
        ),
        # Download
        array(
            'pattern' => '~^/order/([^/]+)/([^/]+)/?$~',
            'class' => 'OrderView',
            'aliases' => array('url', 'file'),
        ),
        array(
            'pattern' => '~^/?$~',
        ),
        array(
            'pattern' => '~^/([^/]*)/?$~',
            'class' => 'PageView',
            'aliases' => array('page_url'),
        ),
    );
?>
 

Сам роутинг сохраним в корне site.ru/router.php

Заменяем в файле indexView

// Текущий модуль (для отображения центрального блока)
$module = $this->request->get('module', 'string');
$module = preg_replace("/[^A-Za-z0-9]+/", "", $module);

// Если не задан - берем из настроек
if(empty($module))
	return false;
	//$module = $this->settings->main_module;

на

$params = array();
$module = '';
		
require_once($_SERVER["DOCUMENT_ROOT"]. '/router.php');
		
foreach($this->routes as $map){
	$url_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
	if(preg_match($map['pattern'], $url_path, $matches)){
		array_shift($matches);
		foreach ($matches as $index => $value){
			$params[$map['aliases'][$index]] = $value;
		}
		$module = $map['class'];
		break;
	}
}
$this->params = $params;

Теперь добавим переменные в файл View.php

 

public $params; 

и

$this->params       = &self::$view_instance->params;

И нужно будет заменить все GET-Параметры в файлах view/

Пример замены:

// GET-Параметры
$category_url = $this->request->get('category', 'string');
$brand_url    = $this->request->get('brand', 'string');

на 

// GET-Параметры
$category_url = isset($this->params['category']) ? $this->params['category'] : '';
$brand_url    = isset($this->params['brand']) ? $this->params['brand'] : '';
 

и останутся у нас такие записи в .htaccess

AddDefaultCharset UTF-8
ErrorDocument 404 /404
ErrorDocument 401 /password.php

RewriteEngine on

# Админка теперь по адресу /simpla
RewriteRule	^admin/?$  simpla [L]

# Google sitemap
RewriteRule ^sitemap.xml?$	sitemap.php  [L,QSA]

# XML
RewriteRule ^yandex.xml?$	yandex.php  [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

# Ресайз картинок на лету
RewriteRule ^files/products/(.+) resize/resize.php?file=$1&token=%{QUERY_STRING}
#RewriteCond %{THE_REQUEST} ^GET\ (.*)files/products/(.*)\?([A-z0-9]*) 
#RewriteRule ^files/products/(.+) resize/resize.php?file=%2&token=%3 [L,NE]

Проверял все работает.

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

 

Объясните, пожалуйста, в чем смысл этого и чем это лучше того, что есть сейчас в стандарте? 

 

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

А вообще поднимал сайт на джинсе, чтоб не переводить все, написал роутер ;)

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

 

Или это предназначено для тех систем, где не работает .htaccess? 

Да все верно, но это должно быть еще внедрено автором магазина.

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

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

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

 

Если в .htaccess остаются записи, то смысла я вообще в этом не вижу.

Ну там осталось элементарная логика, нужно - исправьте полностью

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

Зачем? Обьясните смысл?

Если на хосте не работает .htaccess - ваше решение не работает.

Если на хосте работает .htaccess - ваше решение не имеет смысла.

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

 

Если на хосте не работает .htaccess - ваше решение не работает.

Уверены?)

location / {
    if (!-e $request_filename){
        rewrite ^(.*)$ /index.php;
    }
}

P.S я же писал что джинса разрабатывал 

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

 

А ресайз и все остальное?

А его там вообще не должно быть, первый раз вижу что ресайз в htaccess

Если кому то нравится - можете дальше выносить логику приложения в настройки веб сервера.

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

Не, столько работать нельзя...(

 

Должно быть, не должно быть - это философия

Если то что предлагается востребовано, тогда да, но внятного ответа зачем это нет)

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

При том что для кого-то должно, а для кого-то нет, а кто-то скажет Наверное должно, но небуду, а другой Это не надо, но поставлю и т.д.

 

необходимости НЕТ!

 

Роутинг на симпле абсолютно бесполезен.

 

Вы его сделали - отлично, но на прямой вопрос: в чем смысл этого и чем это лучше того, что есть сейчас в стандарте?

Ответ: роутинг уже должен был быть.

 

Должен был, не должен был, или должен был, а может не болжен был....

 

Обоснованного ответа в его необходимости нет.

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

Ну если будет тишина.. ни страшно.. так сказать не своевременно..

 

Прямое обращение к автору:

 

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

 

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

 

Все верно? или я так понял ваше предложение в этих изменениях 

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

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

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

 

Вот, например, часто SEO-спецы говорят - не нравится в адресах /products/ или /catalog/. Если бы разработка позволяла управлять этим и ОДНИМ изменением в настройках, заменять, скажем /products/ на /goods/, это была бы и гибкость, и польза немалая. Или вообще адреса формировало бы по шаблонам типа /product/%id%/%url%/ ...

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

Покажите демо, как оно всё работает.

 

вам решение бесплатно дают, так еще и демо нужно показать?

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

Желательно

Ну и какой толк от того демо если будет работать в точности как стандартная симпла?

Вы вообще понимаете о чём здесь идёт речь, что такое роутер?

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

Желательно

 

На днях в okay опубликован план развития на год, там, в частности, стоит "9. Гибкий роутинг, возможность пользователю самому решать, как будут строится URL для категорий и для товаров". Надо полагать, со временем будет...

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

Ну и какой толк от того демо если будет работать в точности как стандартная симпла?

Вы вообще понимаете о чём здесь идёт речь, что такое роутер?

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

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

 

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

Обоснуйте.

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

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

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

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

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

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

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

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

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

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