2012-05-27 3 views
1

Я разрабатываю плагин для 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?

ответ

0

С Joomla! чтобы избавиться от раздела index.php URL-адреса, вы должны включить mod_rewrite в свои глобальные настройки и включить файл .htaccess, который поставляется с базовой установкой. (При первой установке Joomla! Это называется htaccess.txt дубликат и переименуйте копию .htaccess

Для получения более полной информации читать это на Joomla Docs about SEF URLs.

Вы можете попробовать глядя на источник использования функции sh404SEF plugins on JED

+0

Спасибо, но это не дает ответа на вопрос?. Я ищу способ использования классов маршрутизатора sh404SEF изнутри плагина, а не как получить URL-адреса SEF в Joomla. – Stilero

+0

Извините, я был смущен двумя примерами, которые вы указали с индексом index.php в URL-адресе, а другой без него. Единственный способ избавиться от этой части - это mod_rewrite + .htaccess. Для этого нужен даже sh404SEF. – Craig

+0

Нет проблем. Да, я знаю, что вам нужен .htaccess, который у меня тоже есть. Но остается вопрос, как программно использовать классы и маршрутизаторы sh404SEF из плагина. Когда вы используете методы класса JRoute :: _() Joomla, класс не заботится о том, установлен ли sh404SEF.Итак, как вы используете метод jRoute :: _() sh404SEF. – Stilero

0

getSefFromNonSef в файле

администратор \ Components \ com_sh404sef \ хелперы \ general.php

Пример:

$url = 'index.php?option=com_content&view=article&id=1:aaaaaaaaa&catid=2&Itemid=101' 
$sef_url = Sh404sefHelperGeneral::getSefFromNonSef($url, true, false, null); 

Помните, не SEF, начиная с index.php ...

 Смежные вопросы

  • Нет связанных вопросов^_^