Как найти 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 ответов

  1. Получить все переменные из GET/POST запрос в массив. На этом этапе вы также можете изменить значения перед генерацией строки URL.

    $getVars = JRequest::get( 'GET' );
    
  2. Если вам действительно нужна строка 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

Другие вопросы по тегам