Как найти URL не-SEF, пока включен SEF (Joomla 1.5)?
Я знаю, что вы, вероятно, не получите много вопросов, как это...
Я работаю над компонентом, который я хочу иметь возможность работать с URL-адресами не-SEF, пока включен SEF, будь то встроенный SEF или что-то вроде sh404sef.
Сохраняет ли Joomla ОРИГИНАЛЬНЫЙ не-SEF URL где-нибудь, т.е. index.php? ком = com_fred & вид = домашняя страница?
Я обнаружил, что любой активированный SEF изменяет значение JURI::getInstance() на эквивалентный SEF. Я также обнаружил, что значение $REQUEST['URI'] не работает на всех платформах / серверах и т. Д.
Спасибо за любую помощь
6 ответов
Получить все переменные из
GET/POST
запрос в массив. На этом этапе вы также можете изменить значения перед генерацией строки URL.$getVars = JRequest::get( 'GET' );
Если вам действительно нужна строка URL, вы можете получить с помощью:
$newURL = http_build_query($getVars);
Надеюсь, поможет!
Я вернулся к этому коду и попробовал еще раз, но дал мне несколько ошибок, поэтому я переработал его частично на основе предыдущего ответа, который я сформулировал ранее с этим новым (хорошо работает на Joomla! 3.4.5)
// build the JInput object
$jinput = JFactory::getApplication()->input;
// retrieve the array of values from the request (stored in the application environment) to form the query
$uriQuery = $jinput->getArray();
// build the the query as a string
echo 'index.php?' . JUri::buildQuery($uriQuery);
Joomla! Документы API: JInput
- JUri
ПРЕДЫДУЩИЙ ОТВЕТ: Погуглив, я нашел это:
<?php
// "unparse" the Joomla SEF url to get the internal joomla URL
JURI::current();// It's very strange, but without this line at least Joomla 3 fails to fulfill the task
$router =& JSite::getRouter();// get router
$query = $router->parse(JURI::getInstance()); // Get the real joomla query as an array - parse current joomla link
$url = 'index.php?'.JURI::getInstance()->buildQuery($query);
?>
Я проверил это с Joomla! 3.4.4 и работает нормально! Не знаю, может ли он работать с 1,5
Вы можете использовать JRequest::get(true), чтобы получить массив всех параметров запроса из URL. Короткое замечание, однако, я не проверил это достаточно, чтобы знать, возвращает ли он только параметры GET или все параметры REQUEST (что, я думаю, более вероятно). Это может, однако, помочь с тем, что вы ищете.
Для пунктов меню он хранится в таблице 'jos_menu', в столбце 'link' (но itemid отсутствует в этой строке - это столбец 'id').
Для чего-то еще это, вероятно, не хранится в базе данных, но обычно может быть довольно легко решено, особенно с основными компонентами. С сторонними компонентами может быть немного сложно, но вы можете просмотреть архитектуру MVC большинства компонентов, чтобы понять это.
В противном случае вы всегда можете отключить SEF на своем сайте разработчика / создать для этого сайт разработчика.
Есть ли конкретный компонент, который вас интересует?
Вам не нужно делать ничего особенного для не-SEF URL. Даже если у вас включены SEF-URL, Joomla по-прежнему будет отображать правильную страницу, если кто-то заходит на сайт с не-SEF-URL. Часть вашего компонента, которая обрабатывает URL-адреса SEF, маршрутизатор, только сообщает Joomla, как использовать информацию URL-адреса для определения того, что отображать. Когда Joomla представлен с URL-адресом, отличным от SEF, он просто анализирует строку запроса, как обычно.
Для любого данного компонента, URL построен так -
index.php? вариант =com_name& вид =XXXX& ID =1111&Itemid=11111
- опция - это имя компонента
- вид, конечно, какой вид для отображения
- id это идентификатор конкретного элемента контента
- itemid - это элемент меню, используемый для определения назначения модуля / шаблона
Ссылка, которую я разместил здесь: URL-адреса Joomla: У статьи нет красивого URL-адреса?
обеспечивает очень хороший "ускоренный курс" для URL в Joomla 1.5