Spec-Zone.ru › CodeIgniter 4

Макеты представлений

  • Создание макета
  • Использование макетов в представлениях
  • Вывод представления
  • Включение фрагментов представления

CodeIgniter поддерживает простую, но очень гибкую систему макетов, которая позволяет легко использовать один или несколько базовых макетов страниц во всем приложении. Макеты поддерживают разделы контента, которые могут быть вставлены из любого отображаемого представления. Можно создавать разные макеты для одноколоночных, двухколоночных, страниц архивов блогов и т. д. Макеты никогда не выводятся напрямую. Вместо этого вы выводите представление, которое указывает макет, который оно хочет расширить.

Создание макета

Макеты — это представления, как и любые другие. Единственное отличие — предполагаемое использование. Макеты — единственные файлы представлений, которые будут использовать метод renderSection(). Этот метод служит местозаполнителем для содержимого.

<!doctype html>
<html>
<head>
    <title>My Layout</title>
</head>
<body>
    <?= $this->renderSection('content') ?>
</body>
</html>

Метод renderSection() принимает только один аргумент — имя раздела. Таким образом, любые дочерние представления знают, как назвать раздел содержимого.

Использование макетов в представлениях

Всякий раз, когда представление нужно вставить в макет, необходимо использовать метод extend() в верхней части файла:

<?= $this->extend('default') ?>

Метод extend принимает имя любого файла представления, которое вы хотите использовать. Поскольку это стандартные представления, они будут расположены так же, как и представление. По умолчанию он будет искать в каталоге View приложения, но также будет сканировать и другие пространства имен, определенные PSR-4. Вы можете указать пространство имен, чтобы найти представление в определенном каталоге View пространства имен:

<?= $this->extend('Blog\Views\default') ?>

Все содержимое внутри представления, которое расширяет макет, должно быть включено внутри вызовов методов section($name) и endSection(). Любое содержимое между этими вызовами будет вставлено в макет, где существует вызов renderSection($name), соответствующий имени раздела.:

<?= $this->extend('default') ?>

<?= $this->section('content') ?>
    <h1>Hello World!</h1>
<?= $this->endSection() ?>

Метод endSection() не требует имени раздела. Он автоматически понимает, какой раздел нужно закрыть.

Разделы могут содержать вложенные разделы:

<?= $this->extend('default') ?>

<?= $this->section('content') ?>
    <h1>Hello World!</h1>
    <?= $this->section('javascript') ?>
       let a = 'a';
    <?= $this->endSection() ?>
<?= $this->endSection() ?>

Вывод представления

Вывод представления и его макета выполняется точно так же, как и любой другой вывод представления в контроллере:

public function index()
{
    echo view('some_view');
}

Рендерер достаточно умен, чтобы определить, нужно ли выводить представление самостоятельно или ему нужен макет.

Включение фрагментов представления

Фрагменты представления — это файлы представлений, которые не расширяют ни один макет. Обычно они содержат контент, который можно повторно использовать из одного представления в другое. При использовании макетов представлений вы должны использовать $this->include() для включения любых фрагментов представлений.

<?= $this->extend('default') ?>

<?= $this->section('content') ?>
    <h1>Hello World!</h1>

    <?= $this->include('sidebar') ?>
<?= $this->endSection() ?>

При вызове метода include() вы можете передавать ему все те же параметры, что и при выводе обычного представления, включая директивы кэширования и т. д.

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/outgoing/view_layouts.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API