|
|
|
| Не могу придумать как сделать такое:
пишу кмс с возможностью подключаемых компонентов.
К примеру есть компонент
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(ещё раз замечу, если администратором предварительно не был выбран алиас для данного компонента). Как это сделать? Добавить в админке ещё одно управление? Для назначения алиасов компонентам?
Или как вообще делается?:)
Надеюсь более менее доступно объяснил т.к. сам тему не особо осилил. | |
|
|
|
|
|
|
|
для: sl1p
(27.09.2010 в 14:52)
| | >Вопрос 2: Как быть если к примеру есть компонент com_shop ........... shop перенаправить на com_shop
SELECT * FROM menu WHERE component='shop' OR component LIKE '%shop%' LIMIT 1;
Но надо экранировать '%_' :) | |
|
|
|
|
|
|
|
для: 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
как это сделать не пойму:) | |
|
|
|
|
|
|
|
для: sl1p
(27.09.2010 в 17:14)
| | перед тем, как вы будете формировать ссылку, нужно выполнять запрос к базе, кладя туда GET запрос если такового не существует, или исполняя тот, который был выбран по id. | |
|
|
|
|
|
|
|
для: deimand
(28.09.2010 в 02:04)
| | ммм немного не понял:)
можно както в других словах? | |
|
|
|
|
|
|
|
для: sl1p
(28.09.2010 в 02:18)
| | вчитайтесь | |
|
|
|
|
|
|
|
для: deimand
(28.09.2010 в 02:19)
| | кладя туда GET запрос если такового не существует
положить туда гет запрос которого не существует?) это ы) | |
|
|
|
|
|
|
|
для: 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);"
|
| |
|
|
|
|
|
|
|
для: 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
где тоже будет прямой вызов компонентов.
в Меню выбираются именно какието объекты а доступ к компоненту.. Тоесть именно статья, именно категория с полностью всеми нужными параметрами для компонента.
а нужно немного иначе:) | |
|
|
|
|
|
|
|
для: sl1p
(28.09.2010 в 21:27)
| | Одно и то же прописывать два раза?
http://example.com/com_content/article/9 менять на http://example.com/stateyki/article/9 , что бы потом его обрабатывать - глупость. от роутера один смысл - сократить 20-ти - 100 байтную строку запроса на цифру, сэкономив пользователю десяток другой килобайт трафика. какой еще нужен повод, чтобы использовать алиас? Уж лучше просто, писать такие ссылки как есть и голову себе не ломать. | |
|
|
|
|
|
|
|
для: deimand
(28.09.2010 в 23:57)
| | ну это может быть условием заказчика:)
а вообще это нужно для сео, так что так, вопрос вообще в другом :)
ещё есть возможность юзать ГЕТ переменные либо сегменты(ЧПУ), роутер тоже решает как отдать параметры. | |
|
|
|