it-swarm.com.de

Joomla SEF-URL im CLI-Skript

Ich bin neu in Joomla, ich schreibe ein Skript unter Ordner cli. Ich rufe die Hilfedatei der Administratorkomponente auf, in der ich die Kategorie abrufe und die URL der Kategorie zurückgebe.

Die Funktion im Helfer ist in Ordnung und funktioniert gut, wenn sie über das Admin-Menü ausgeführt wird.

Das Problem besteht darin, dass bei Verwendung in CLI-Skripten keine Kategorie-URL generiert wird.

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

bei Verwendung mit CLI wird ein Fehler für strenge Standards für $router = &$app->getRouter(); ausgelöst

ich habe es auch versucht

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

Es wird nur ein Fehler ausgegeben, der besagt, dass die Anwendung nicht gestartet werden konnte.

Ich möchte die SEF-URL der Kategorie erhalten, damit ich sie auch in meiner CLI-Datei zurückgeben kann.

Mein Cli-Code:

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;
}

Jede Hilfe wird geschätzt.

2
Ekta Puri

Verwenden Sie die Factory, um die Site-Anwendung abzurufen: Sieht auch so aus, als ob ContentHelperRoute fehlt. Sie haben es importiert. Die strengen Standards können gelöst werden, indem das kaufmännische Und vor dem Aufruf von getRouter() entfernt wird.

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();
}

ich habe es auch versucht

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

Es wird nur ein Fehler ausgegeben, der besagt, dass die Anwendung nicht gestartet werden konnte.

JRoute::_() funktioniert nicht in der CLI, da es auf der aktuellen Anwendung basiert und die CLI keinen Router hat. JRoute::link() sollte funktionieren, aber anscheinend hat es im Moment das gleiche Problem.

0
Sharky