$mvcFactory = $app->bootComponent('com_content')->getMVCFactory();
$model = $mvcFactory->createModel('Article', 'Administrator', ['ignore_request' => true]);
$article = [
'id' => 0,
'title' => 'Article Title', // заголовок
'alias' => '', // пустой, чтобы не было notice
'introtext' => 'Article Text', // текст
'catid' => 2, // категория
'state' => 0, // состояние публикации
'language' => '*', // язык
'access' => $app->get('access', 1) // уровень доступа
];
$form = $model->getForm($article, false);
// Получаем форму материала, чтобы провалидировать данные.
$form = $model->getForm($article, false);
if (!$form)
{
throw new \RuntimeException('Error getting form: ' . $model->getError());
}
// Валидируем данные.
if (!$model->validate($form, $article))
{
throw new \RuntimeException('Error validating article: ' . $model->getError());
}
// Эмулируем действие сохранения.
$app->input->set('task', 'save');
// Сохраняем (создаём) материал.
if (!$model->save($article))
{
throw new \RuntimeException('Error saving article: ' . $model->getError());
}
// Чтоб работало сохранение доп.полей - нужна авторизация юзером, имеющим права
$user = Factory::getUser(103);
$session = Factory::getSession();
$session->set('user', $user);
// Сохранение доп. полей
saveArticleFields($model->getItem()->id);
function saveArticleFields($articleId){
$model = $this->app->bootComponent('com_fields')->getMVCFactory()->createModel('Field', 'Administrator', ['ignore_request' => true]);
$fields = [
1 => 'Text', // текстовое поле
3 => ['Value 2', 'Value 1'], // список
4 => [2, 1] // чекбоксы
];
foreach ($fields as $key => $value){
$model->setFieldValue($key, $articleId, $value);
}
}
$newapp = JFactory::getApplication();
$mvcFactory = $newapp->bootComponent('com_content')->getMVCFactory();
$articleModel = $mvcFactory->createModel('Article', 'Administrator', ['ignore_request' => true]);
$title_article = 'My Article title';
$article = [
'catid' => 2,
'title' => $title_article,
'introtext' => 'My Article Intro Text',
'fulltext' => 'My Article Full Text',
'state' => 1,
'language' => '*',
'com_fields' => [
'field-name' => 'field value',
],
];
if (!$articleModel->save($article)){
throw new Exception($articleModel->getError());
}
// При этом, нужно обязательно быть залогиненым как админ. Или под другим аккаунтом, позволяющм редактировать поля.
Старый вариант
$db = JFactory::getDbo();
$contentTable = new JTableContent( $db );
$userid = JFactory::getUser()->guest ? 472 : JFactory::getUser()->id;
$dataContent = array(
'title' => 'Новый материал',
'alias' => 'new-article',
'catid' => 2,
'state' => 1,
'introtext' => 'Вступительный текст нового материала',
'fulltext' => 'Продолжение теккста нового материала',
'created' => date( 'Y-m-d H:i:s' ),
'publish_up' => date( 'Y-m-d H:i:s' ),
'created_by' => $userid,
'metakey' => 'Ключевые слова',
'metadesc' => 'Описания',
'featured' => 1
);
$contentTable->bind( $dataContent );
if ( $contentTable->check() ) {
$contentTable->store();
}