Is it possible to dynamically create Joomla categories, subcategories and articles using PHP scripts?
Is there any example link?
It's a rather extensive process to do this, but here's a trimmed down version of the code that I generally use. I won't necessarily guarantee that it will run as shown since I ripped out a bunch of internal stuff that we do along the way, but these are the pieces you need to do it.
You'll need to look at tables #__categories
and #__content
to get all the fields you want to populate and add them to the given $category_data
and $article_data
arrays.
I should mention that you could accomplish it inserting the records with jDatabase or jTable, but I'd not generally recommend that because the important thing that you'd be missing is the built-in Joomla rules and logic that do things like checking the uniqueness of the alias, and managing the ACL for the new content items.
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;
}
}
There is at least one extension, "OSContent" in the Joomla Extensions Directory that you could use as an example:
http://extensions.joomla.org/extensions/miscellaneous/mass-content/18000
OSContent allows you to create articles and categories in bulk.
To create a Category in Joomla 4:
$category_data['id'] = 0;
$category_data['parent_id'] = 0;
$category_data['title'] = "my title" ;
$category_data['alias'] = "my 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' => '');
$newapp = JFactory::getApplication();
$mvcFactory = $newapp->bootComponent('com_categories')->getMVCFactory();
$catModel = $mvcFactory->createModel('Category', 'Administrator', ['ignore_request' => true]);
$category_id = $catModel->save($category_data);
if (!$category_id ){
throw new Exception('Can't create Category...');
}
com_content
is the most complex built-in extension in Joomla. You might want to approach this a different way, possible extending some of the current functionality and writing your own class