Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: роутер:)
 
 автор: sl1p   (27.09.2010 в 14:52)   письмо автору
 
 

Не могу придумать как сделать такое:

пишу кмс с возможностью подключаемых компонентов.
К примеру есть компонент

com_content с методом article

Доступ к нему осуществляется:

Непосредственно прямой доступ -
http://example.com/com_content/article/9 - где 9 айди материала.

Далее если ни один компонент по первому сегменту ссылки не найден, осуществляется поиск по меню.
В меню есть возможность выбрать компонент, скажем тот же com_content с методом article и айди 9, и прописать алиас (пропишем some_article)
Т.е: при вызове http://example.com/some_article будем перенаправлены на соответствующий компонент с переданными параметрами.

Вопрос 1: Правильно ли я представил и организовал роутер?
Вопрос 2: Как быть если к примеру есть компонент com_shop (интернет магазин), и никаких алиасов в меню не было выбрано для него. Но, нужно сделать алиас на сам компонент, тобишь shop перенаправить на com_shop(ещё раз замечу, если администратором предварительно не был выбран алиас для данного компонента). Как это сделать? Добавить в админке ещё одно управление? Для назначения алиасов компонентам?
Или как вообще делается?:)

Надеюсь более менее доступно объяснил т.к. сам тему не особо осилил.

  Ответить  
 
 автор: heed   (27.09.2010 в 15:59)   письмо автору
 
   для: sl1p   (27.09.2010 в 14:52)
 

>Вопрос 2: Как быть если к примеру есть компонент com_shop ........... shop перенаправить на com_shop

SELECT * FROM menu WHERE component='shop' OR component LIKE '%shop%' LIMIT 1;
Но надо экранировать '%_' :)

  Ответить  
 
 автор: sl1p   (27.09.2010 в 17:14)   письмо автору
 
   для: heed   (27.09.2010 в 15:59)
 

Вы не поняли, нужно сделать точно так же(алиас) как в меню, только непосредственно на весь компонент.

может быть и так com_shop нужно переделать в trololo :)


у меня двиг, как я позже заметил похож на джумла:)
в меню выбирается именно какойто определенный элемент компонента, будто статья или вывод какойто категории и т.д.
А здесь нужно сделать так, чтобы изменить прямой запрос к компоненту.
Т.е.
http://example.com/com_content/article/9
хочется изменить в
http://example.com/materiali/article/9
или же даже в
http://example.com/articles/9

как это сделать не пойму:)

  Ответить  
 
 автор: deimand   (28.09.2010 в 02:04)   письмо автору
 
   для: sl1p   (27.09.2010 в 17:14)
 

перед тем, как вы будете формировать ссылку, нужно выполнять запрос к базе, кладя туда GET запрос если такового не существует, или исполняя тот, который был выбран по id.

  Ответить  
 
 автор: sl1p   (28.09.2010 в 02:18)   письмо автору
 
   для: deimand   (28.09.2010 в 02:04)
 

ммм немного не понял:)

можно както в других словах?

  Ответить  
 
 автор: deimand   (28.09.2010 в 02:19)   письмо автору
 
   для: sl1p   (28.09.2010 в 02:18)
 

вчитайтесь

  Ответить  
 
 автор: sl1p   (28.09.2010 в 17:19)   письмо автору
 
   для: deimand   (28.09.2010 в 02:19)
 

кладя туда GET запрос если такового не существует
положить туда гет запрос которого не существует?) это ы)

  Ответить  
 
 автор: deimand   (28.09.2010 в 19:01)   письмо автору
 
   для: sl1p   (28.09.2010 в 17:19)
 

>положить туда гет запрос которого не существует?) это ы)

вы же сами писали:

>Непосредственно прямой доступ -
>http://example.com/com_content/article/9 - где 9 айди материала.

>Далее если ни один компонент по первому сегменту ссылки не найден, осуществляется поиск по меню.
>В меню есть возможность выбрать компонент, скажем тот же com_content с методом article и айди 9, и прописать алиас (пропишем some_article)
>Т.е: при вызове http://example.com/some_article будем перенаправлены на соответствующий компонент с переданными параметрами.

соответственно в момент, когда произошел первый вызов http://example.com/com_content/article/9 в таблице route у вас еще нет записи http://example.com/com_content/article/9 и вы ее туда кладете присваивая ей алиас.
some_article | http://example.com/com_content/article/9


только лучше будет
AUTO_INCREMENT | http://example.com/com_content/article/9

тогда не придется вторым параметром передавать имя алиаса, а генерить его автоматом

при формировании ссылки писать
<a <?php route('http://example.com/com_content/article/9');?>>ссылка</a>

функция примет адрес, сохранит его если его нету в таблице и присвоит ему алиас, в исходном коде всегда будет только алиас

по такому принципу можно генерить и аяксовые ссылки, если нужно.
     route('http://example.com/com_content/article/9'); // href="http://ex.com/?1"
     route('http://example.com/com_content/article/9'); // onclick="function(1);"  

  Ответить  
 
 автор: sl1p   (28.09.2010 в 21:27)   письмо автору
 
   для: deimand   (28.09.2010 в 19:01)
 

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

Тоесть если я не хочу выбирать в меню алиас на какуюто статью а просто хочу сделать "красивое" имя компоненту например content или stateyki :)
тогда при попытке прямого доступа

http://example.com/stateyki/article/9
будет вызван компонент.
либо я захочу изменить полностью так:
http://example.com/com_content/article/9
в
http://example.com/stateyki/9

где тоже будет прямой вызов компонентов.


в Меню выбираются именно какието объекты а доступ к компоненту.. Тоесть именно статья, именно категория с полностью всеми нужными параметрами для компонента.
а нужно немного иначе:)

  Ответить  
 
 автор: deimand   (28.09.2010 в 23:57)   письмо автору
 
   для: sl1p   (28.09.2010 в 21:27)
 

Одно и то же прописывать два раза?
http://example.com/com_content/article/9 менять на http://example.com/stateyki/article/9 , что бы потом его обрабатывать - глупость. от роутера один смысл - сократить 20-ти - 100 байтную строку запроса на цифру, сэкономив пользователю десяток другой килобайт трафика. какой еще нужен повод, чтобы использовать алиас? Уж лучше просто, писать такие ссылки как есть и голову себе не ломать.

  Ответить  
 
 автор: sl1p   (29.09.2010 в 00:46)   письмо автору
 
   для: deimand   (28.09.2010 в 23:57)
 

ну это может быть условием заказчика:)

а вообще это нужно для сео, так что так, вопрос вообще в другом :)

ещё есть возможность юзать ГЕТ переменные либо сегменты(ЧПУ), роутер тоже решает как отдать параметры.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования