É possível criar dinamicamente categorias, subcategorias e artigos do Joomla usando scripts PHP?
Existe algum link de exemplo?
É possível criar dinamicamente categorias, subcategorias e artigos do Joomla usando scripts PHP?
Existe algum link de exemplo?
Respostas:
É 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 funcione como mostrado, desde 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á examinar as tabelas #__categories
e #__content
obter todos os campos que deseja preencher e adicioná-los aos dados $category_data
e $article_data
matrizes.
Devo mencionar que você poderia fazer isso 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;
}
}
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/18000
OSContent permite criar artigos e categorias em massa.
com_content
é a extensão interna mais complexa do Joomla. Você pode querer abordar esta questão de forma diferente, possível estender um pouco da funcionalidade atual e escrever sua própria classe