¿Es posible crear dinámicamente categorías, subcategorías y artículos de Joomla usando scripts PHP?
¿Hay algún enlace de ejemplo?
¿Es posible crear dinámicamente categorías, subcategorías y artículos de Joomla usando scripts PHP?
¿Hay algún enlace de ejemplo?
Respuestas:
Es un proceso bastante extenso para hacer esto, pero aquí hay una versión recortada del código que generalmente uso. No necesariamente garantizaré que se ejecutará como se muestra, ya que eliminé un montón de cosas internas que hacemos en el camino, pero estas son las piezas que necesita para hacerlo.
Tendrá que mirar las tablas #__categories
y #__content
obtener todos los campos que desea llenar y agregarlos a las matrices $category_data
y a los dados $article_data
.
Debo mencionar que podría lograrlo insertando los registros con jDatabase o jTable, pero generalmente no lo recomendaría porque lo importante que se estaría perdiendo son las reglas y la lógica incorporadas de Joomla que hacen cosas como verificar la unicidad del alias y administrar la ACL para los nuevos elementos de contenido.
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;
}
}
Hay al menos una extensión, "OSContent" en el directorio de extensiones de Joomla que podría usar como ejemplo:
http://extensions.joomla.org/extensions/miscellaneous/mass-content/18000
OSContent le permite crear artículos y categorías a granel.
com_content
es la extensión integrada más compleja de Joomla. Es posible que desee abordar esto de una manera diferente, posible ampliar algunas de las funciones actuales y escribir su propia clase