Я разрабатываю плагин для Joomla 2.5, который должен программно создавать URL SEF при сохранении статьи.Использовать маршрутизатор sh404SEF из плагина
Мне удалось выполнить эту работу, когда активируется обычный Joomla SEF. Мой плагин использует обычный Joomla JRoute :: _(); для создания URL SEF. Это отлично работает с родным Joomla. Например, гиперссылка
http://localhost/index.php?option=com_content&view=article&id=123
переводится на
http://localhost/index.php/mycategory/article-title-123.html
Мой код выглядит следующим образом:
private function joomlaSefUrl($article){
require_once(JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');
$siteURL = substr(JURI::root(), 0, -1);
if(JPATH_BASE == JPATH_ADMINISTRATOR) {
// In the back end we need to set the application to the site app instead
JFactory::$application = JApplication::getInstance('site');
}
$articleRoute = JRoute::_(ContentHelperRoute::getArticleRoute($article->id, $article->catid));
$sefURI = str_replace(JURI::base(true), '', $articleRoute);
if(JPATH_BASE == JPATH_ADMINISTRATOR) {
$siteURL = str_replace($siteURL.DS.'administrator', '', $siteURL);
JFactory::$application = JApplication::getInstance('administrator');
}
$sefURL = $siteURL.$sefURI;
return $sefURL;
}
Проблема заключается в том, что, когда третья сторона расширений как sh404SEF установлен на URL SEF что я получаю от использования метода JRoute :: _(), по-прежнему является обычным URL-адресом маршрута Joomla:
http://localhost/index.php/mycategory/article-123.html
вместо ожидаемого URL sh404sef в
http://localhost/Mycategory/article-title.html
Joomla не видит, что установлен sh404SEF, поэтому с помощью JRoute :: (), что я всегда получаю регулярные SEF Joomla URL. Поэтому мне нужно найти способ использования класса sh404SEF JRoute ::() непосредственно из моего плагина вместо обычного класса маршрутизатора Joomla.
Кто-нибудь знает, как работают классы sh404SEF?
Спасибо, но это не дает ответа на вопрос?. Я ищу способ использования классов маршрутизатора sh404SEF изнутри плагина, а не как получить URL-адреса SEF в Joomla. – Stilero
Извините, я был смущен двумя примерами, которые вы указали с индексом index.php в URL-адресе, а другой без него. Единственный способ избавиться от этой части - это mod_rewrite + .htaccess. Для этого нужен даже sh404SEF. – Craig
Нет проблем. Да, я знаю, что вам нужен .htaccess, который у меня тоже есть. Но остается вопрос, как программно использовать классы и маршрутизаторы sh404SEF из плагина. Когда вы используете методы класса JRoute :: _() Joomla, класс не заботится о том, установлен ли sh404SEF.Итак, как вы используете метод jRoute :: _() sh404SEF. – Stilero