ti-enxame.com

Crie categorias, subcategorias e artigos usando php

É possível criar dinamicamente categorias, subcategorias e artigos do Joomla usando scripts PHP scripts?

Existe algum link de exemplo?

10
useruseruser

É um processo bastante extenso para fazer isso, mas aqui está uma versão reduzida do código que eu geralmente uso. Não garantirei necessariamente que ele funcione como mostrado, uma vez que rasguei um monte de coisas internas que fazemos ao longo do caminho, mas essas são as peças que você precisa fazer.

Você precisará olhar para as tabelas #__categories e #__content para obter todos os campos que você deseja preencher e adicioná-los ao dado $category_data e $article_data matrizes.

Devo mencionar que você poderia realizá-lo inserindo os registros com jDatabase ou jTable, mas geralmente não recomendo isso porque o importante que você está perdendo são as regras e a lógica internas do Joomla que fazem coisas como verificar a exclusividade do alias e gerenciar a ACL para os novos itens de conteúdo.

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

Há pelo menos uma extensão, "OSContent" no diretório de extensões do Joomla que você pode usar como exemplo:

http://extensions.joomla.org/extensions/misc Miscellaneous/mass-content/180

OSContent permite criar artigos e categorias em massa.

3
Neil Robertson