記事を保存するときにプログラムで SEF URL を作成する必要がある Joomla 2.5 コンテンツ プラグインを開発しています。
通常の Joomla SEF がアクティブ化されているときに、この作業を行うことができました。私のプラグインは通常の Joomla JRoute::_(); を使用しています。SEF URL を構築します。これは、ネイティブの Joomla でうまく機能します。たとえば、URL
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 のようなサード パーティの拡張機能がインストールされている場合、JRoute::_() メソッドを使用して取得した SEF URL が、通常の Joomla ルート URL のままであることです。
http://localhost/index.php/mycategory/article-123.html
予想される sh404SEF の URL の代わりに
http://localhost/Mycategory/article-title.html
Joomla は sh404SEF がインストールされていることを認識しないため、JRoute:: () を使用して、常に通常の SEF Joomla の URL を取得します。したがって、通常の Joomla ルーター クラスの代わりに、sh404SEF JRoute:: () クラスをプラグイン内から直接使用する方法を見つける必要があります。
sh404SEFクラスがどのように機能するか知っている人はいますか?