В этой статье мы рассмотрим как программно создать новый материал Joomla CMS 2.5+

Данный урок можно использовать в качестве основы для переноса материала с другого сайта на наш, например если вы хотите перейти с другой CMS на Joomla или с Joomla версии 1.5 на более старшую версию!

Почему просто запросом не переносить с одной таблички в табличку нашего сайта? ответ на этот вопрос прост - во время создания материала в таблицу #__assets записываются данные для организации уровней доступа к материалу, и если этих данных не будет то скорее всего мы не сможем управлять материалом.

Для создания материала нужно выполнить небольшой код

//Получаем объект базы данных
$db = JFactory::getDbo();
//Создаем объект таблички #__content
$contentTable = new JTableContent( $db );
//Определяем идентификатор пользователя от которого будет создан материал
$userid = JFactory::getUser()->guest ? 472 : JFactory::getUser()->id;
//Данные материала
$dataContent = array(
	'title' => 'Новый материал',
	'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();
}

Если вы будете создавать материал в Joomla 2.5 то вам дополнительно нужно будет перед созданием объекта таблички указать путь к классу JTableContent:

include_once JPATH_BASE . '/libraries/joomla/database/table/content.php';
$contentTable = new JTableContent( $db );

Особое внимание стоит уделить полям catid и created_by

Поле catid - это идентификатор существующей категории для материалов! идентификатор категории можно посмотреть "Материалы"->"Менеджер категорий"! в табличке с категориями в поле "ID" стоит идентификатор категории

Поле created_by это идентификатор пользователя которому будет назначено авторство материала. Если вы выполните этот скрипт в админке или в пользовательской части предварительно авторизировавшить то эта строка $userid = JFactory::getUser()->guest ? 472 : JFactory::getUser()->id; обеспечит установку в в поле created_by идентификатор авторизированного пользователя! ели вы будете выполнять от неавторизированного пользователя то вам нужно вместо цифры 472 указать идентификатор пользователя от которого будет создаваться материал! посмотреть ID пользователя вы сможете в менеджере пользователей!

 

Если вы захотите перенести из другого сайта материалы в ваш новый сайт на Joomla CMS 2.5+ то нужно просто подключиться к табличке с базой данных, ив цикле устанавливать данные из старой табличке и выполнять код для создания материалов!