1

記事を保存するときにプログラムで 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クラスがどのように機能するか知っている人はいますか?

4

2 に答える 2

0

Joomla!で!URLのindex.phpセクションを削除mod_rewriteするには、グローバル設定でオンに.htaccessして、基本インストールに付属するファイルを有効にする必要があります。(最初にJoomla!をインストールしたとき、それはhtaccess.txt重複と呼ばれ、コピーの名前を次のように変更します.htaccess

詳細については、JoomlaDocsのSEFURLについてお読みください。

JEDのsh404SEFプラグインのソースを見てみることができます

于 2012-05-27T21:25:40.250 に答える
0

ファイルで関数 getSefFromNonSef を使用する

管理者\コンポーネント\com_sh404sef\helpers\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);

index.php で始まる、sef 以外の URL を覚えていますか?...

于 2016-07-27T16:23:26.700 に答える