LINUX.ORG.RU

Kohana. Как лучше всего оформлять вложение вид в вид?


0

1

Есть вид, который условно называется «Хитрая рамка с финдиперсовым оформлением» (designframe). Другие виды должны помещать свой контент в такую рамку.

Как лучше всего это делать? Причем так, чтобы не ломалась подсветка HTML-кода, то есть так, чтобы не помещать HTML-код вида в переменную.


О чем я говорю. Вот простой вид login.php, отвечающий за логин. Он состоит из формы с текстовыми полями и кнопками:

<form name="login_form" action="/user/login/enter" method="post">
 <p>Логин</p>
 <p><input type="text" size="15" name="login"></p>
 <p>Пароль</p>
 <p><input type="name" size="15" name="password"></p>
 <p><input type="submit" name="button_enter" value="Вход" class="btn">
</form>

Нужно, чтобы он сам себя отображал в скруглённой рамке. Можно сделать код вида таким:

<?php $text='
<form name="login_form" action="/user/login/enter" method="post">
 <p>Логин</p>
 <p><input type="text" size="15" name="login"></p>
 <p>Пароль</p>
 <p><input type="name" size="15" name="password"></p>
 <p><input type="submit" name="button_enter" value="Вход" class="btn">
</form>
';

echo View::factory('designframe')->set('text', $text)->render(); 
?>

Но тогда весь HTML-код перестает подсвечиваться. Да и еще приходится следить чтобы случайно апостроф в HTML-коде не затесался. В общем некрасиво и неудобно.

Вопрос. Как максимально просто организовать вложение вида в вид, не плодя дополнительных файлов, и при этом нормально раотать с HTML-кодом, не заключая его в кавычки/апострофы/хередок для вставки в переменную?

Как вариант,

<?php ob_start(); ?>
Здесь идёт страшный HTML
<?php
    $text = ob_get_clean();
    echo View::factory('designframe')->set('text', $text)->render();
?>

Ну или в случае с Kohana форму логина можно поместить в отдельный view и делать что-то такое:

echo View::factory('designframe')->set('text', View::factory('login_form'))->render()
sjinks ★★★
()

Из контроллера

application/classes/controller/layout.php:

class Controller_Layout extends Controller
{
    public function after()
    {
        $this->layout = View::factory('layout');
        $this->layout->bind('body', $this->body);
        $this->response->body($this->layout);
        parent::after();
    }
}

application/classes/controller/index.php:

class Controller_Index extends Controller_Layout
{
    public function action_index()
    {
        $this->body = View::factory('index/index');
        $this->body->set('text', 'Yammie!!!');
    }
}

application/views/layout.php:

<html>
<body>
<?php echo $body ?>
</body>
</html>

application/views/index/index.php:

<!-- IndexController/index -->
<?php echo $text ?>
<!-- /IndexController/index -->

GateKeeper ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.