web-dev-qa-db-ja.com

CLIスクリプトのJoomla SEF URL

私はJoomlaを初めて使用し、フォルダーcliでスクリプトを作成しています。カテゴリをフェッチしてカテゴリのURLを返す管理コンポーネントのヘルパーファイルを呼び出しています。

ヘルパーの機能は問題なく、管理メニューから実行するとうまく機能します。

この問題は、CLIスクリプトで使用したときにカテゴリURLが生成されないことに関連しています。

_$app    = JApplication::getInstance('site'); 
$router = &$app->getRouter();     
$newUrl = ContentHelperRoute::getCategoryRoute('10'); 
$newUrl = $router->build($newUrl); 
$url = $newUrl->toString(); 
$url = str_replace('/administrator', '', $url);
_

cLIで使用すると、$router = &$app->getRouter();の厳密な標準に対してエラーがスローされます

私も試しました

JRoute :: _(ContentHelperRoute :: getCategoryRoute('10 '));

アプリケーションの起動に失敗したというエラーをスローするだけです。

カテゴリのSEF URLを取得して、CLIファイルでも返されるようにしたい。

私のcliコード:

_class Abc extends JApplicationCli
{
    public function doExecute()
    {
        JFactory::getSession()->gc();

        JLoader::register('AbcHelper',JPATH_BASE.'/administrator/components/com_abc/helper.php');
        $url = AbcHelper::getUrl();
        echo $url;
    }
}

JApplicationCli::getInstance('Abc')->execute();
_

helper.php

_public static function getUrl()
{
    $url='';
    $app    = JApplication::getInstance('site');
    $router = &$app->getRouter();    
    $newUrl = ContentHelperRoute::getCategoryRoute('10');
    $newUrl = $router->build($newUrl);
    $url = $newUrl->toString();
    $url = str_replace('/administrator', '', $url);
    return $url;
}
_

どんな助けでもありがたいです。

2
Ekta Puri

ファクトリを使用してサイトアプリケーションを取得します:ContentHelperRouteがないようにも見えます。インポートしました。 getRouter()を呼び出す前にアンパサンドを削除することで、厳密な基準を解決できます。

_public static function getUrl()
{
    // Register required classes.
    JLoader::register('ContentHelperRoute', JPATH_SITE . '/components/com_content/helpers/route.php');

    // Get site router.
    $router = JFactory::getApplication('site')->getRouter('site');

    // Build URI object.
    $url = $router->build(ContentHelperRoute::getCategoryRoute('10'));

    return $url->toString();
}
_

私も試しました

JRoute :: _(ContentHelperRoute :: getCategoryRoute('10 '));

アプリケーションの起動に失敗したというエラーをスローするだけです。

JRoute::_()は現在のアプリケーションに基づいており、CLIにルーターがないため、CLIでは機能しません。 JRoute::link()は機能するはずですが、現時点では明らかに同じ問題があります。

0
Sharky