Since different components of the view layer are often reused, li3 includes the common functionality of wrapping view templates inside of layouts and including small, re-usable view components called elements inside of views. You can also think of an element like a widget or other portion of the displayed content that would be reused across multiple pages.

Examples of Elements

  • site navigation
  • single post items
  • widgets i.e. upcoming events, blogroll.

Unless otherwise configured, elements are defined in app/views/elements. Inside this folder, the files you define will be tailored to display the output for your chosen element. As an example, the code below defines a product element. The file name is app/views/elements/product.html.php.

<article class="product">
	<h1><?= $item->title ?></h1>
	<img src="<?= $item->cover ?>" />

	<div class="description">
		<?php echo $item->description ?>
	<div class="price">
		$<?= $item->price_usd ?>

Displaying an Element

Displaying an element is accomplished via the View::render() method. In the following example we render a list of products using the product element we defined above.

<div class="products">
<?php foreach ($products as $item): ?>
   <?php echo $this->_view->render(
	   ['element' => 'product'], compact('item')
   ) ?>
<?php endforeach ?>

A complete description of the render() method can be found in the li3 API documentation under View::render()