Каким образом с помощью yii изящнее и архитектурно правильнее реализовать сокрытие/отображение элементов представления?

Добрый день.

Каким образом с помощью yii изящнее и архитектурно правильнее реализовать сокрытие/отображение элементов представления для тех или иных ролей, да еще и с учетом бизнес-правил.

К примеру, имеем 2 роли

private_user и common_user

Первая роль позволяет видеть колонку цен на странице. Вторая нет.
При выводе таблицы цен в представлении я получаю следующее:
<?php foreach ($prices as $p): ?>
	<tr class="data-row">
		<td><?php echo $p['code']; ?></td>
		<td><?php echo $p['name']; ?></td>
		<td class="price"><?php echo Yii::app()->user->checkAccess('view_price') ? $p['price'] : "&nbsp;"; ?></td>
	</tr>
<?php endforeach;?>


Возможно для разных ролей подсовывать разные вьюхи? Но как это реализовать?
  • Вопрос задан
  • 2980 просмотров
Решения вопроса 1
fornit1917
@fornit1917
Можно совсем разные вьюхи. Для этого в контроллере:

if (Yii::app()->user->checkAcces('...')) {
    $viewName = 'with_price_view';
}
else {
   $viewName = 'without_price_view';
}
$this->render($viewName, ...);


А можно с одной вьюхой, но без излишней бизнес-логики внутри шаблона. В контроллере так:
$data = array(
   'prices' => $prices,
   'showPrice' => Yii::app()->user->checkAccess('...'),

);
$this->render('...', $data);


А в шаблоне так:
<?php foreach ($prices as $p): ?>
    <tr class="data-row">
        <td><?php echo $p['code']; ?></td>
        <td><?php echo $p['name']; ?></td>
         <?php if ($showPrice): ?>
               <td class="price"><?php echo $p['price'] ?></td>
          <?php endif; ?>
    </tr>
<?php endforeach;?>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
TekVanDo
@TekVanDo
Javascript Developer
Возможно, проверяйте роль контроллере и подставляйте нужную вьюху в render. Либо если различия в во вьюхах небольшие, можно разбить вьюху на блоки внутри главного шаблона подключать нужные блоки (renderPartial)
Ответ написан
Комментировать
TTA
@TTA
Мутировавший технарь :)
Если логика совсем разная, то имеет смысл сделать 2 контроллера для гостей и авторизованых. В них указать разные лейауты и логику.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы