шаблоны — Fat Free PHP Layouts

Я прохожу некоторые из кода и проектов, представленных здесь http://fatfreeframework.com/development. Моя цель — создать легкий кикстартер MVC, использующий F3. Я знаю, что это было сделано раньше, но я использую это как учебное упражнение, и я надеюсь, что в итоге получится что-то полезное.

Самым большим камнем преткновения, с которым я сталкиваюсь сейчас, является концепция макетов. Я знаю, что в документации упоминается использование шаблонов в шаблонах, но я изо всех сил пытаюсь реализовать это на практике. В конце я хочу иметь 1 или 2 макета (макет по умолчанию, может быть, пользовательский макет для модальных всплывающих окон и т. Д.), А затем сделать мои представления обернутыми внутри этих макетов. Я хочу макет по умолчанию, а затем возможность переопределить по умолчанию для нескольких страниц, которые нуждаются в пользовательских. Вот код, который я использовал:

// this is the handler for one of my routes, it's on a controller class called Index
public function index($f3, $params)
{
// this (or anything else) should get passed into the view
$f3->set('listOfItems',array("item1", "item2"));

// set the view
$f3->set('content', 'index.htm')

// render the layout
\Template::instance()->render('layout.htm');
}

К сожалению, я продолжаю получать пустую страницу. Я иду по этому совершенно неправильному пути, или я на правильном пути? Есть ли способ установить макет по умолчанию где-нибудь, чтобы он использовался до тех пор, пока не будет переопределен?

1

Решение

Ну, вы можете создать базовый класс с макетом по умолчанию. Затем вы расширяете его для каждого класса контроллера. Например:

abstract class Layout {

protected $tpl='layout.htm';

function afterRoute($f3,$params) {
echo \Template::instance()->render($this->tpl);
}

}

Затем:

class OneController extends Layout {

function index($f3,$params) {
$f3->set('listOfItems',...);
$f3->set('content','one/index.htm');
}

}

class AnotherController extends Layout {

protected $tpl='popup.htm';//override default layout here

function index($f3,$params) {
$f3->set('listOfItems',...);
$f3->set('content','another/index.htm');
}

}

В layout.htm:

<body>
<div id="content">
<include href="{{@content}}" if="isset(@content)"/>
</div>
</body>

Структура UI папка:

/ui
|-- layout.htm
|-- popup.htm
|-- one
|-- index.htm
|-- another
|-- index.htm

Это только один пример того, как вы могли бы организовать свой код. F3 достаточно свободен, чтобы позволить вам организовать его множеством способов.

2

Другие решения

У меня была точно такая же проблема — все настроить, как нужно, отрисовал макет и продолжал получать пустую страницу. Также, когда я проверял исходный HTML-код отображаемой страницы, она была полностью пустой.

Если вы присмотритесь, но рендеринга макета недостаточно, вы должны также Распечатать это с помощью echo команда. Так что вместо следующего примера, который на первый взгляд кажется правильным:

$f3->route('GET /',
function($f3) {

// Instantiates a View object
$view = new View;

// Render the page
$view->render('template/layout.php');

вам на самом деле нужна последняя строка для начала echo:

        echo $view->render('template/layout.php');

Дополнительные примеры см .:

Кроме того, по какой-то причине (что, я уверен, скоро станет ясно — я только начал использовать Fat Free Framework), вы также можете визуализировать .htm файл, который содержит встроенный PHP (т.е. они не должны иметь .php расширение).

0

По вопросам рекламы [email protected]