UMIhelp

Разработка сайта на UMI.CMS => Шаблоны TPL => Тема начата: granat20 от 01 Мая 2012, 09:14:46

Название: Ограничить доступ
Отправлено: granat20 от 01 Мая 2012, 09:14:46
Здравствуйте дорогие друзья,
подскажите как мне организовать вывод куска контента только для конкретного пользователя:
сделал - /tpls/content/tginc.tpl
подключил его на странице %system getOuterContent('./tpls/content/tginc.tpl')%

как теперь в нем прописать, что бы он содержимое показывал только пользователю id = 477?

Есть возможность получить текущего пользователя -
<?php
 header("Content-type: text/html; charset=utf-8");
 include "standalone.php";
 //Получаем id текущего пользователя
 $permissions = permissionsCollection::getInstance();
 $currentUserId = $permissions->getUserId();
 echo "Id текущего пользователя: \"", $currentUserId, "\"<br />\n";
?>

Но php не работает в tpl, как это все связать.

Спасибо. 8)
Название: Re:Ограничить доступ
Отправлено: Vladimir от 01 Мая 2012, 11:26:41
Поместить содержимое в блок logged макроса %users auth()%
http://help-dev.umi-cms.ru/users.auth.html
Название: Re:Ограничить доступ
Отправлено: granat20 от 01 Мая 2012, 11:54:22
Посмотрел, форму авторизации на страничку вывел.
А вот сделать так, что посетитель пришел на страничку и авторизовался, а если это id=477, то ему показалась дополнительная часть контента.
Название: Re:Ограничить доступ
Отправлено: Vladimir от 01 Мая 2012, 16:00:34
ээээ... да, не обратил внимания, что вам нужно не просто для любого зарегистрированного, а только для конкретного одного.
В таком случае я бы написал кастомный макрос.

Тогда писать кастомный макрос/ Как-то так:
public function myAuth($template = "default",$userId = 477) {

if(!$template) $template = "default";
if(!$userId) $userId = 477;//для случая обращения по http
$mUser = cmsController::getInstance()->getModule('users');

$permissions = permissionsCollection::getInstance();
$currentUserId = $permissions->getUserId();

if($currentUserId == $userId) {

list($template_logged) = def_module::loadTemplates("tpls/users/{$template}.tpl", "logged");

$block_arr = Array();
$block_arr['xlink:href'] = "uobject://" . $mUser->user_id;
$block_arr['user_id'] = $mUser->user_id;
$block_arr['user_name'] = $mUser->user_fullname;
$block_arr['user_login'] = $mUser->user_login;

return def_module::parseTemplate($template_logged, $block_arr, false, $mUser->user_id);

} else {
$res = $mUser->login($template);//либо любое иное действие для пользователя не 477 или гостя
}

return $res;
}
Название: Re:Ограничить доступ
Отправлено: Vladimir от 01 Мая 2012, 16:03:59
Общий принцип: берете аналогичный макрос из класса ЮМИ, дописываете нужное вам, и используете в кастомных классах. При этом нужно будет заменить self на def_module, а $this на объект используемого модуля. В данном случае это $mUser
Название: Re:Ограничить доступ
Отправлено: granat20 от 01 Мая 2012, 17:08:45
Спасибо, пробую, о результатах отпишусь... :D
Название: Re:Ограничить доступ
Отправлено: granat20 от 01 Мая 2012, 19:40:47
Спасибо, не много под шаманил и скрпт заработал:
на страничку %custom myAuth()%
в файле custom.php (находится здесь: ~/classes/modules/ ) после строки "//TODO: Write your own macroses here" новый метод -
***
public function myAuth($template = "default",$userId = 477) {
if(!$template) $template = "default";
if(!$userId) $userId = 477;//для случая обращения по http
$mUser = cmsController::getInstance()->getModule('users');
$permissions = permissionsCollection::getInstance();
$currentUserId = $permissions->getUserId();
if($currentUserId == $userId) {
return 'myText';
} else {
$res = '';
}
return '';
}
***
Текст - myText виден только одному пользователю.
Я думаю здесь можно кое что подсократить.

Спасибо за помощь. ;D