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


Фото
- - - - -

Роутинг на симпле


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

#1 Чудилла

Чудилла
  • Фрилансер
  • 125 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x

Опубликовано 31.05.2014 - 13:08

Сам роутинг 

<?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]

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



#2 Чудилла

Чудилла
  • Фрилансер
  • 125 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x

Опубликовано 31.05.2014 - 13:28

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

 

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

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



#3 Чудилла

Чудилла
  • Фрилансер
  • 125 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x

Опубликовано 31.05.2014 - 13:43

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

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

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

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



#4 Kosjak76

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

Опубликовано 31.05.2014 - 13:45

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



#5 Чудилла

Чудилла
  • Фрилансер
  • 125 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x

Опубликовано 31.05.2014 - 13:49

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

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



#6 Kosjak76

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

Опубликовано 31.05.2014 - 13:51

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

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

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



#7 Чудилла

Чудилла
  • Фрилансер
  • 125 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x

Опубликовано 31.05.2014 - 13:54

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

Уверены?)

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

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



#8 Kosjak76

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

Опубликовано 31.05.2014 - 13:55

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



#9 Чудилла

Чудилла
  • Фрилансер
  • 125 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x

Опубликовано 31.05.2014 - 14:00

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

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

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



#10 Ogybil

Ogybil
  • Пользователь
  • 193 сообщений

Опубликовано 01.06.2014 - 19:26

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

 

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

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



#11 Чудилла

Чудилла
  • Фрилансер
  • 125 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x

Опубликовано 02.06.2014 - 14:53

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

А философия тут причем?



#12 Ogybil

Ogybil
  • Пользователь
  • 193 сообщений

Опубликовано 02.06.2014 - 15:44

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

 

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

 

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

 

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

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

 

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

 

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



#13 infinity178

infinity178
  • Сомнительные
  • 283 сообщений
  • Пользователь

Опубликовано 20.11.2014 - 16:33

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

 

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

 

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

 

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

 

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



#14 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 20.11.2014 - 17:35

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

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

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

#15 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 13.01.2019 - 11:01

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



#16 yr4ik

yr4ik
  • Фрилансер
  • 925 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 13.01.2019 - 12:54

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

 

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



#17 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 13.01.2019 - 23:13

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

Желательно



#18 Noxter

Noxter

    Simpla Developer

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

Опубликовано 14.01.2019 - 01:07

Желательно

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

#19 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 14.01.2019 - 10:21

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

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



#20 Noxter

Noxter

    Simpla Developer

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

Опубликовано 14.01.2019 - 10:39


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


Обоснуйте.




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

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