web-dev-qa-db-fra.com

Créer des catégories, des sous-catégories et des articles en utilisant php

Est-il possible de créer dynamiquement des catégories, des sous-catégories et des articles Joomla à l'aide de scripts PHP?)?

Y a-t-il un exemple de lien?

10
useruseruser

C'est un processus assez long pour faire cela, mais voici une version allégée du code que j'utilise généralement. Je ne garantirai pas nécessairement qu'il fonctionnera comme indiqué, car j'ai arraché une série de tâches internes que nous effectuons en cours de route, mais ce sont là les éléments dont vous avez besoin pour le faire.

Vous devrez consulter les tables #__categories Et #__content Pour obtenir tous les champs que vous souhaitez renseigner et les ajouter aux tableaux $category_data Et $article_data Donnés. .

Je devrais mentionner que vous pouvez l'accomplir en insérant les enregistrements avec jDatabase ou jTable, mais je ne le recommanderais généralement pas, car la chose importante qui vous manquerait est la logique et les règles Joomla intégrées. Cela permet par exemple de vérifier l'unicité de l'alias et de gérer la liste de contrôle d'accès pour les nouveaux éléments de contenu.

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

Il y a au moins une extension, "OSContent" dans le répertoire d'extensions Joomla que vous pouvez utiliser à titre d'exemple:

http://extensions.joomla.org/extensions/miscellaneous/mass-content/180

OSContent vous permet de créer des articles et des catégories en bloc.

3
Neil Robertson