Добавление страниц с помощью api

Разберем на примере как добавить страницу с помощью 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/
Операция "вставить" - правая кнопка мыши.