È possibile creare dinamicamente categorie, sottocategorie e articoli Joomla usando gli script PHP?
C'è qualche link di esempio?
È possibile creare dinamicamente categorie, sottocategorie e articoli Joomla usando gli script PHP?
C'è qualche link di esempio?
Risposte:
È un processo piuttosto esteso per fare questo, ma ecco una versione ridotta del codice che generalmente utilizzo. Non garantirò necessariamente che funzionerà come mostrato da quando ho strappato un sacco di cose interne che facciamo lungo la strada, ma questi sono i pezzi che ti servono per farlo.
Dovrai guardare le tabelle #__categories
e #__content
ottenere tutti i campi che vuoi popolare e aggiungerli al dato $category_data
e agli $article_data
array.
Devo dire che si poteva realizzarlo inserendo i record con JDatabase o JTable, ma io non sarei in genere consigliamo perché la cosa importante che si sarebbe manca è il built-in regole Joomla e logiche che fanno cose come controllare l'unicità dell'alias e gestione dell'ACL per i nuovi elementi di contenuto.
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;
}
}
Esiste almeno un'estensione, "OSContent" nella directory delle estensioni di Joomla che potresti usare come esempio:
http://extensions.joomla.org/extensions/miscellaneous/mass-content/18000
OSContent ti consente di creare articoli e categorie in blocco.
com_content
è l'estensione integrata più complessa in Joomla. Potresti voler affrontare questo in un modo diverso, possibile estendere alcune delle funzionalità attuali e scrivere la tua classe