Czy możliwe jest dynamiczne tworzenie kategorii, podkategorii i artykułów Joomla za pomocą skryptów PHP?
Czy jest jakiś przykładowy link?
Czy możliwe jest dynamiczne tworzenie kategorii, podkategorii i artykułów Joomla za pomocą skryptów PHP?
Czy jest jakiś przykładowy link?
Odpowiedzi:
Jest to dość obszerny proces, aby to zrobić, ale oto skrócona wersja kodu, którego zazwyczaj używam. Nie muszę koniecznie gwarantować, że będzie działał tak, jak pokazano, ponieważ wyciągnąłem kilka wewnętrznych rzeczy, które robimy po drodze, ale są to elementy, które musisz to zrobić.
Musisz spojrzeć na tabele #__categories
i #__content
uzyskać wszystkie pola, które chcesz wypełnić, i dodać je do podanych $category_data
i $article_data
tablic.
Powinienem wspomnieć, że można to osiągnąć, wstawiając rekordy za pomocą jDatabase lub jTable, ale generalnie nie polecam tego, ponieważ ważną rzeczą, której będziesz brakować, są wbudowane reguły i logika Joomla, które robią rzeczy takie jak sprawdzanie wyjątkowości aliasu i zarządzanie listą ACL dla nowych elementów treści.
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;
}
}
W katalogu rozszerzeń Joomla znajduje się co najmniej jedno rozszerzenie „OSContent”, którego możesz użyć jako przykładu:
http://extensions.joomla.org/extensions/miscellaneous/mass-content/18000
OSContent pozwala na masowe tworzenie artykułów i kategorii.
com_content
jest to najbardziej złożone wbudowane rozszerzenie w Joomla. Być może zechcesz podejść do tego inaczej, możliwe rozszerzenie niektórych obecnych funkcji i napisanie własnej klasy