Тоесть я заполню основные данные (content_id, content_name, type, owner_id, parent_id, template_id, item_order,content_alias и тп)
Да, я так и делал. Только content_id не учавствует, автоматом генерится.
Создавал массив $contentparam с соотв значениями, напр $contentparam[content_name] = 'content'
После заполнения все очень просто, я даже сам удивился (поясню камментами)
Code: Select all
$contentops =& $gCms->GetContentOperations(); //вызываем операции с контентом
$contentobj = $contentops->CreateNewContent($contentparam['content_type']); //создаем новый контент пустышку
$contentobj->SetOwner($userid); //выставляем текущего владельца
$contentobj->FillParams($contentparam); //заполняем пустышку переменными
$error = $contentobj->ValidateData(); // ну здесь понятно без слов, проверка на вшивость
if ($error === FALSE) //делаем если ошибок нет
{
$contentobj->Save(); //сохраняем
$contentops->SetHierarchyPosition($contentobj->Id()); //выставляем правильную иерархию
audit($contentobj->Id(), $contentobj->Name(), 'Added Content'); //хз нужна ли она или нет я оставил.
}
else //делаем если ошибки
{
}
Переменные такие, обычно их хватает для создания контента.
Code: Select all
$contentparam['firsttime'] = 1; //флажок, что то вроде "только что создано не редактировалось ниразу"
$contentparam['content_type'] = 'content'; //тип, т.к. имеется еще Разделитель и Секция заголовка
$contentparam['orig_content_type'] = 'content'; //хз нафиг надо но зачем то надо, обычно равен предыдущему
$contentparam['title'] = ' '; //переменная {title}
$contentparam['content_en'] = ' '; // переменная {content}
$contentparam['alias'] = $alias; //тут из названия понятно
$contentparam['parent_id'] = $parent_id; //ИД родителя
$contentparam['template_id'] = $template_id; //ИД шаблона
$contentparam['showinmenu'] = "on";
$contentparam['active'] = "on";
$contentparam['cachable'] = "on";
Переменная $contentparam['alias'] очень опасная вещь, как только будет дубль то ValidateData() сотрет пустышку, выдаст ошибку, соответственно нифига не добавится

Ну и навсякий случай совет - названия переменных брать из формы добавления контента (Контент » Страницы » Добавить новый контент), я дооолго тупил почему у меня не заполняется когда тупо взял названия из БД

, а у нас FillParams обрабатывает POST (обычно) запрос а там переменные не все совпадают по названиям.
Ну а вызывать в админке можно через модуль пустышку (Module Maker). Единственный минус, для того чтобы запускать что то в админке нужно создать модуль т.е. обязательно класс основной и в нем действие по умолчанию action.default.php, шаблоны, язык - поэтому проще не парится поставить Module Maker. А шаблонизацию в action.default.php можно обойти (хотя это очень плохо) вот так
Code: Select all
echo $this->StartTabHeaders(); //заголовки табиков
echo $this->SetTabHeader('maintab', $this->Lang('maintab'), ('maintab' == $tab));
echo $this->EndTabHeaders();
echo $this->StartTabContent();
echo $this->StartTab('maintab', $params); //содержимое табика
// тут можно вызывать/делать что хочешь и все это будет в админке.
echo $this->EndTab();
echo $this->EndTabContent();