Разберем на примере как добавить страницу с помощью api
Допустим, нам необходимо добавить в пакетном режиме пачку фотографий.
Для создания элемента используется метод addElement
Определяем папку где будут лежать картинки. У меня /images/cms/data/gallery/
Закачиваем их туда.
Считаем, что массив с фотографиями мы как-то подготовили. В примере для простотв я зписал данные прямо в массив.
Остальной код такой:
$с = cmsController::getInstance();
$р = umiHierarchy::getInstance();
//массив с данными. Как его получить - это отдельная песня, здесь ее не рассматриваем
$fotos = array(
array( 'name'=>'Моя фото 1',
'alt_name'=>'foto1',
'descr' =>'Тестовый хомячок'
),
array( 'name'=>'Моя фото 1',
'alt_name'=>'foto1',
'descr' => 'Тестовый хомячок'
)
);
//готовим данные
$hierarchy_type_id = 36;
$obj_type_id = 697;
$domain_id = 5;//у меня ид домена был 5. Свои данные посмотрите в админке
$lang_id = 1;//аналогично
$tpl_id = 32;//ид шаблона по которому будет выводиться фотография. У вас будет другой
$parent_id = 31860;//ид фотогалереи. подставить свое
foreach($fotos as $foto){//в цикле перебираем фото
$name = $foto['name'];
$alt_name = $foto['alt_name'];
$photo = './images/cms/data/gallery/'.$alt_name.'.jpg';
$descr = $foto['descr'];
$element_id = $h->addElement($parent_id, $hierarchy_type_id, $name, $alt_name, $obj_type_id, $domain_id, $lang_id, $tpl_id); //Создаем новый пустой элемент (новую страницу)
$element = $h->getElement($element_id,true,true); //Получаем только что созданный элемент
setPerms($element_id);//расставляем права доступа
if($data = $c->getModule("data"))
{
$data->saveEditedGroups($element_id); //Сохраняем все данные, полученные из динамических форм, построенных по типу данных
}
//Заполняем элемент всеми необходимыми значениями
$element->setIsActive();
$element->setValue("photo", $photo);
$element->setValue("descr", $descr);
$element->setValue("h1", $name);
$element->setValue("title", $name);
$element->commit();
}
Теперь, чтобы наша страница была видна всем, кроме супервайзера, нужно задать на нее права доступа.
Если вы работаете из браузера можно писать так:
function setPerms($element_id) {
$users_module = cmsController::getInstance()->getModule("users");
$users_module->setPerms($element_id);
}
права установятся как на предыдущую страницу.
Увы, если вы работаете из консоли придется все группы пользователей заносить в масси вручную, я, во всяком случае, другого способа не нашел. И выглядеть это будет так:
Для 2.7 и ниже:
function setPerms($element_id) {
permissionsCollection::getInsta nce()->resetElementPermissi ons($element_id);
$users_array = array(2374,2373);
foreach($users_array as $k=>$v){
permissionsCollection::getInstance()->setElementPermissions($v, $element_id, 1);
}
permissionsCollection::getInstance()->setElementPermissions(26888, $element_id, 2);
//26888 - группа редакторы у меня. Подставьте сюда ид группы, имеющей права на редактирование. (супервайзер по умолчанию имеет права на все)
}
Для 2.8:
function setPerms($element_id) {
$p = permissionsCollection::getInstance();
$users_array = array(2374,2373);
foreach($users_array as $k=>$v){
$p->setElementPermissions($v, $element_id, 1);
}
$p->setElementPermissions(26888, $element_id, 31);
}
Разница в том, что в 2.8 права устанавливаются в диапазоне 0-31, до 2.8: 0-2
Теперь еще по работе в консоли
Для начала нам потребуется ssh-клиент. Берем putty //putty.spb.ru/download.html
Если тарифный план не разрешает ssh лучше всего временно перейти на более дорогой, где он есть
В заголовке скрипта указать данные для лицензирования и необходимые параметры
#!/usr/local/php/bin/php
<?php
define("UMICMS_CLI_MODE", "1");
error_reporting(E_ALL);
//ini_set("error_reporting",E_ALL);
//ini_set("display_errors","on");
// UMI.CMS licensing
$_SERVER['SERVER_ADDR'] = '999.999.999.999';//IP сервера
$_SERVER['HTTP_HOST'] = 'some_domain.ru';
$_SERVER['DOCUMENT_ROOT'] = '/home/s/sample';//путь от корня сервера. Посмотрите через вывод $_SERVER['DOCUMENT_ROOT'] или спросите у хостера
$_REQUEST['path'] = "/admin/";
chdir($_SERVER['DOCUMENT_ROOT'].'/');
ini_set('include_path', $_SERVER['DOCUMENT_ROOT'].'/');
include "./config.php";
?>
Для 2.8:
error_reporting(E_ALL);
ini_set("error_reporting",E_ALL);
ini_set("display_errors","on");
define("CURRENT_WORKING_DIR", '/home/s/sample');
$_SERVER['DOCUMENT_ROOT'] = '/home/s/sample';
define("ROOT",$_SERVER['DOCUMENT_ROOT']);
define("UMICMS_CLI_MODE", "1");
// UMI.CMS licensing
$_SERVER['SERVER_ADDR'] = '99.99.99.99';
$_SERVER['HTTP_HOST'] = 'some_domain.ru';
$_SERVER['HTTP_USER_AGENT'] = 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.5.22 Version/10.51';
$_REQUEST['path'] = "/admin/";
chdir($_SERVER['DOCUMENT_ROOT'].'/');
ini_set('include_path', $_SERVER['DOCUMENT_ROOT'].'/');
require CURRENT_WORKING_DIR . '/libs/config.php';
Строка #!/usr/local/php/bin/php - это путь к интерпретатору php. Если вы не знаете его местоположение уточните в техподдержке хостера.
Кладем его в корень сайта и ставим права 750
Запускаем putty, вводим адрес хоста. первый раз putty выбросит окошко с грозным предупреждением - это потому что она еще не знает вашего сайта. Можно смело нажимать ДА. Откроется окошко консоли, вызывающее ностальгические воспоминания о временах DOS))
Основные команды unix можно посмотреть /ref/apache/putty/
Операция "вставить" - правая кнопка мыши.