Erstellen Sie Kategorien, Unterkategorien und Artikel mit PHP

10

Ist es möglich, Joomla-Kategorien, Unterkategorien und Artikel mithilfe von PHP-Skripten dynamisch zu erstellen?

Gibt es einen Beispiellink?

useruseruser
quelle
2
Ja, es ist möglich, aber sehr schwierig, und ich würde dagegen vorschlagen, es sei denn, Sie sind mit PHP, com_contentder komplexesten integrierten Erweiterung in Joomla, bestens vertraut . Vielleicht möchten Sie dies auf eine andere Art und Weise angehen, indem Sie möglicherweise einige der aktuellen Funktionen erweitern und Ihre eigene Klasse schreiben
Lodder
@Lodder danke für deine Antwort. Um ehrlich zu sein, habe ich PHP-Kenntnisse und benutze Joomla über die Backend-Oberfläche. Ich möchte eine Site haben, auf der ich einige Funktionen mithilfe der Joomla-Administratorkonsole (Menü, Seiten usw.) hinzugefügt habe, und ich möchte mithilfe von PHP-Skripten geringfügige Änderungen vornehmen. Gibt es eine Art Tutorial, um es zu machen?
Useruseruser

Antworten:

15

Dies ist ein ziemlich umfangreicher Prozess, aber hier ist eine reduzierte Version des Codes, den ich normalerweise verwende. Ich kann nicht unbedingt garantieren, dass es wie gezeigt läuft, da ich ein paar interne Dinge herausgerissen habe, die wir auf dem Weg machen, aber das sind die Teile, die Sie dafür brauchen.

Sie müssen sich Tabellen ansehen #__categoriesund #__contentalle Felder abrufen, die Sie füllen möchten, und sie zu den angegebenen $category_dataund $article_dataArrays hinzufügen .

Ich sollte erwähnen, dass Sie es schaffen könnten , die Datensätze mit jDatabase oder jTable einzufügen, aber ich würde dies im Allgemeinen nicht empfehlen, da das Wichtigste, was Sie vermissen würden, die integrierten Joomla-Regeln und -Logik sind, die Dinge wie das Überprüfen der Eindeutigkeit tun des Alias ​​und Verwalten der ACL für die neuen Inhaltselemente.

if (!defined('_JEXEC')) {
    define( '_JEXEC', 1 );
    define('JPATH_BASE', realpath(dirname(__FILE__)));
    require_once ( JPATH_BASE .'/includes/defines.php' );
    require_once ( JPATH_BASE .'/includes/framework.php' );
    defined('DS') or define('DS', DIRECTORY_SEPARATOR);
}
$app = JFactory::getApplication('site');

$category_data['id'] = 0;
$category_data['parent_id'] = 0;
$category_data['title'] = 'My Category Title';
$category_data['alias'] = 'my-categegory-title-alias';
$category_data['extension'] = 'com_content';
$category_data['published'] = 1;
$category_data['language'] = '*';
$category_data['params'] = array('category_layout' => '','image' => '');
$category_data['metadata'] = array('author' => '','robots' => '');

$category_id = createCategory($category_data);
if(!$category_id){
    echo "Category create failed!";
}else{
    $article_data = array(
        'id' => 0,
        'catid' => $category_id,
        'title' => 'My article title',
        'alias' => 'my-article-alias',
        'introtext' => 'My intro text',
        'fulltext' => '<p>My full text</p>',
        'state' => 1,
        'language' => '*'
    );
    $article_id = createArticle($article_data);
    if(!$article_id){
        echo "Article create failed!";
    }
}

function createCategory( $data )
{
    $data['rules'] = array(
        'core.edit.state' => array(),
        'core.edit.delete' => array(),
        'core.edit.edit' => array(),
        'core.edit.state' => array(),
        'core.edit.own' => array(1=>true)
    );

    $basePath = JPATH_ADMINISTRATOR.'/components/com_categories';
    require_once $basePath.'/models/category.php';
    $config  = array('table_path' => $basePath.'/tables');
    $category_model = new CategoriesModelCategory($config);
    if(!$category_model->save($data)){
        $err_msg = $category_model->getError();
        return false;
    }else{
        $id = $category_model->getItem()->id;
        return $id;
    }
}
function createArticle($data)
{
    $data['rules'] = array(
        'core.edit.delete' => array(),
        'core.edit.edit' => array(),
        'core.edit.state' => array(),
    );

    $basePath = JPATH_ADMINISTRATOR.'/components/com_content';
    require_once $basePath.'/models/article.php';
    $config = array();
    $article_model = new ContentModelArticle($config);
    if(!$article_model->save($data)){
        $err_msg = $article_model->getError();
        return false;
    }else{
        $id = $article_model->getItem()->id;
        return $id;
    }
}
BIP
quelle
Joomla muss natürlich geladen werden. Wenn Sie also keinen vorhandenen Code verwenden, müssen Sie ihn laden. Ich habe meine Antwort aktualisiert, um dies zu erreichen. Sie können also loslegen.
BIP
Nicht für diesen Code werden die Joomla-Modelle verwendet, um sie genau wie Joomla selbst hinzuzufügen. Sie sollten in der Lage sein, diesen Code in eine PHP-Datei einzufügen, das $ data-Array mit anderen Feldern zu vervollständigen, die Sie aktualisieren möchten, und ihn erfolgreich auszuführen. Geben Sie mir ein paar Minuten und ich werde meine Antwort so aktualisieren, dass sie 100% Funktionscode enthält.
BIP
Der aktualisierte Code erstellt jetzt eine Kategorie und einen Artikel darin, wenn er unverändert ausgeführt wird. Wenn Sie eine gültige ID anstelle von 0 angeben, wird diese Kategorie oder dieser Artikel aktualisiert, anstatt ihn hinzuzufügen. Außerdem sind die ACL-Regeln optional ... Ich habe dies aus einem meiner Skripte kopiert, das ACL verwendet. Deshalb ist es dort, aber es ist auch praktisch zu wissen.
BIP
1
Ich kann nur vorschlagen, dass Sie formulieren, was Sie erreichen möchten, ohne davon auszugehen, dass Vorlagen oder MVC Teile davon sind. Plugins sind im Allgemeinen die beste Möglichkeit, die Funktionen von Joomla anzupassen. Die Klarheit der gewünschten Funktionen ist jedoch am wichtigsten, um die beste Lösung zu ermitteln.
BIP
1
Diese Lösung funktioniert in Joomla! 3.9.11
AndyGaskell