IPL: How to use ipl-html

by | Feb 22, 2023

In my previous blogpost I briefly explained the IPL and the tasks that these individual libs can perform. Today I want to explain how our ipl-html lib works and how to use it.

This library helps you write HTML in a very simple and safe way. You don’t need text escaping and view scripts.

Usually we always have to create a view script for each controller action as follows:

The Controller:
<?php

namespace Icinga\Module\Test\Controllers;

use ipl\Web\Compat\CompatController;

class TestController extends CompatController
{
    public function indexAction(): void
    {
       $this->view->header = 'Hello Icinga Users';
       $this->view->description = 'Enjoy the blogpost';
    }
}

 

The view script for the index action in path application/views/scripts/test/index.phtml:
<div class="controls">
        <?= $this->tabs ?>
</div>
<div class="content">
    <div class="widget">
        <h1 class="header"><?= $this->escape($this->header) ?></h1>
        <p class="description"><?= $this->escape($this->description) ?></p>
    </div>
</div>
Result:

 

 

To achieve the same result with ipl-html, do the following:

The Controller:
<?php

namespace Icinga\Module\Test\Controllers;

use Icinga\Module\Test\Widget;
use ipl\Web\Compat\CompatController;

class TestController extends CompatController
{
    public function indexAction(): void
    {
       $this->addContent(new Widget());
    }
}
The class used in the controller above:
<?php

namespace Icinga\Module\Test;

use ipl\Html\BaseHtmlElement;
use ipl\Html\Html;
use ipl\Html\HtmlString;

class Widget extends BaseHtmlElement
{
    protected $tag = 'div';

    protected $defaultAttributes = ['class' => 'widget'];

    protected function assemble()
    {
        $this->add([
            Html::tag('h1', ['class' => 'header'], 'Hello Icinga Users'),
            // you can also do the following:
            HtmlString::create('<p class="description">Enjoy the blogpost</p>')
        ]);
    }
}

 

This will give you exactly the same result as above. That is quite simple, isn’t it?
We at icinga use this library for all our new developments. The new module icingadb-web uses it the most at the moment.

Using ipl-html you can easily create tables, forms and any HTML elements.

You can find more examples and interesting features in our doc.

 

 

 

 

 

You May Also Like…

 

Password Policies in Icinga Web

Password Policies in Icinga Web

Icinga Web 2 now ships a PasswordPolicyHook that gives administrators and module developers full control over what...

Icinga TOTP Web 1.0.0 Release

Icinga TOTP Web 1.0.0 Release

We are releasing Icinga TOTP Web v1.0.0, which adds Time-based One-Time Password (TOTP) two-factor authentication to...

Subscribe to our Newsletter

A monthly digest of the latest Icinga news, releases, articles and community topics.