ExpressionEngine Docs

# View Service

- Simple Example
- Creating a View
- Rendering a View
- Disabling View Features
- Embedding Sub-Views
- Extending Parent Views
- View Blocks

## Simple Example

Views are how you display your data. Separating these from application code keeps your application logic neat and concise. It also prevents markup changes from triggering large code changes.

    $view = ee('View')->make('addon_name:member/profile');

    $output = $view->render(array(
      'member' => $current_member
    ));

## Creating a View

All views are represented as separate objects. To create a new view instance, simply call `make()` on the core view service and pass in a the path to a view file, prefixed with the folder name of your add-on:

    $view = ee('View')->make('addon_name:member/profile');

The view file should be a plain `.php` file in the `views` folder. In this case it would be: `views/member/profile.php`

## Rendering a View

To render a view, call the `render()` method. You can optionally pass an associative array to use as the view data:

    $view->render(array('username' => 'Mike'));

The keys of this array will be accessible as local variables inside the view:

    <h1><?=$username?></h1>

Tip: Using the echo shortcut (`<?=`) and the alternative syntax for control structures can help improve readability of your views.

## Disabling View Features

Reusing a view sometimes requires small reductions in markup. For example, a profile image may require some wrapping markup for most of the site, but not universally. To avoid passing around boolean values, views can have have disabled features:

    $view->disable(array('figure', 'data-attribute'));

In the view, these can be checked using the `$this->disabled()` and `$this->enabled()` helper methods:

    <?php if ($this->enabled('figure')): ?>
      <figure><?=$username?></figure>
    <?php endif; ?>

Note: By default all features are enabled.

## Embedding Sub-Views

Views can be rendered directly inside of another view. This is done using the `$this->embed()` helper method:

    <p><?php $this->embed('addon_name:sub/view') ?></p>

All of the current view variables are automatically made available to the subview. You can optionally pass additional ones in the second parameter:

    <p><?php $this->embed('addon_name:sub/view', array('username' => $member->username)) ?></p>

Notice that you do not need to echo the output of this method, it i$1 $2dded to the right place automatically.

You can also disable features in a view, using the third parameter:

    <p><?php $this->embed('addon_name:sub/view', array(), 'figure') ?></p>

## Extending Parent Views

A view can extend another view, by calling the `$this->extend()` helper method:

    <?php $this->extend('html-wrapper'); ?>

The rendered child view will be available to the parent as `$child_view`:

    <section><?=$child_view?></section>

The API for this this method is otherwise identical to `embed()`. The second and third parameter are used for additional variables and disabled features, respectively.

## View Blocks

Passing large chunks of data from a child view to a parent can be tedious. To solve this problem, the child view can create blocks of content that are passed to the parent view automatically:

    <?php $this->extend('html_wrapper') ?>

    <?php $this->startBlock('js') ?>
      <script> ... </script>
    <?php $this->endBlock() ?>

This data is passed to the parent view as an associative array called `$blocks`:

    <?=$blocks['js']?>