grifix/view

This package is abandoned and no longer maintained. No replacement package was suggested.

Simple template engine with slots and inheritance support

Maintainers

Details

gitlab.com/grifix/view

dev-main 2022-12-06 07:44 UTC

This package is auto-updated.

Last update: 2023-07-26 07:07:45 UTC


README

A very simple template engine with slots and inheritance support based on PHP.

Installation

composer require grifix/view

Usage

Basic template

template.php

<?php

declare(strict_types=1);

use \Grifix\View\TemplateInterface;

/** @var $this TemplateInterface */
?>
<h1><?=$this->getVar('title')?></h1>
<p><?=$this->getVar('content')?></p>

index.php

declare(strict_types=1);

use \Grifix\View\ViewFactory;

echo ViewFactory::create('/path/to/views')->createView('template.php')->render([
    'title' => 'Hello',
    'content' => 'Hello world!'
])

will render:

<h1>Hello</h1>
<p>Hello world!</p>

Inheritance

layout.php

<?php

declare(strict_types=1);

use \Grifix\View\TemplateInterface;

/** @var $this TemplateInterface */
?>
<h1><?php $this->startSlot('title')?>Hello<?php $this->endSlot()?></h1>
<p><?php $this->startSlot('content')?>Hello world<?php $this->endSlot()?></p>

template.php

<?php

declare(strict_types=1);

use \Grifix\View\TemplateInterface;

/** @var $this TemplateInterface */
$this->inherits('layout.php');
?>

<?php $this->startSlot('content');?>
Lorem ipsum dolor sit amet, consectetur
<?php $this->endSlot();?>

index.php

declare(strict_types=1);

use Grifix\View\ViewFactory;

echo ViewFactory::create('/path/to/views')->createView('template.php')->render();

Will render:

<h1>Hello</h1>
<p>Lorem ipsum dolor sit amet, consectetur</p>

Inheritance with parent slot content

template.php

<?php

declare(strict_types=1);

use \Grifix\View\TemplateInterface;

/** @var $this TemplateInterface */
$this->inherits('layout.php');
?>

<?php $this->startSlot('content');?>
<?=$this->renderParenSlot()?>
Lorem ipsum dolor sit amet, consectetur
<?php $this->endSlot();?>

will render:

<h1>Hello</h1>
<p>Hello world! Lorem ipsum dolor sit amet, consectetur</p>