PHPackages                             jdz/htmlrenderer - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Templating &amp; Views](/categories/templating)
4. /
5. jdz/htmlrenderer

ActiveLibrary[Templating &amp; Views](/categories/templating)

jdz/htmlrenderer
================

HTML Renderer

1.0.5(2mo ago)0221MITPHPPHP &gt;=8.2

Since Mar 12Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/joffreydemetz/htmlRenderer)[ Packagist](https://packagist.org/packages/jdz/htmlrenderer)[ Docs](https://jdz.joffreydemetz.com/htmlrenderer)[ RSS](/packages/jdz-htmlrenderer/feed)WikiDiscussions main Synced today

READMEChangelog (6)Dependencies (1)Versions (7)Used By (1)

HTML Renderer
=============

[](#html-renderer)

Data-driven HTML element builder designed for use with template engines like Twig. Provides renderable components (buttons, pagers, spans) with attribute management, positioning, and a `toData()` method that outputs arrays ready for template consumption.

Installation
------------

[](#installation)

```
composer require jdz/htmlrenderer
```

Requirements
------------

[](#requirements)

- PHP &gt;= 8.2

Usage
-----

[](#usage)

### Button

[](#button)

```
use JDZ\Renderer\Button;

$btn = new Button('save', 'a', 'https://example.com', 'blank');
$btn->setText('Save')
    ->setIcon('fa fa-save')
    ->setTip('Save changes')
    ->addStyle('btn-primary');

$data = $btn->toData();
// [
//   'renderer' => 'button',
//   'name'     => 'save',
//   'tag'      => 'a',
//   'text'     => ' Save',
//   'attrs'    => [
//     'class'          => 'btn-primary',
//     'href'           => 'https://example.com',
//     'target'         => '_blank',
//     'title'          => 'Save changes',
//     'data-toggle'    => 'tooltip',
//     'data-placement' => 'bottom',
//   ],
// ]
```

### Span

[](#span)

```
use JDZ\Renderer\Span;

$span = new Span('Hello World');
$span->addStyle('highlight')
     ->addDataAttr('id', 42);

$data = $span->toData();
// ['renderer' => 'span', 'text' => 'Hello World', 'attrs' => ['class' => 'highlight', 'data-id' => 42]]
```

### Pager

[](#pager)

```
use JDZ\Renderer\Pager;

$pager = new Pager(10); // max 10 visible pages
$pager->setPrevText('Previous');
$pager->setNextText('Next');
$pager->load(25, 3, 'https://example.com/list');

$data = $pager->toData();
// ['renderer' => 'pager', 'pages' => [...], 'attrs' => [...]]
// Each page: ['renderer' => 'button', 'tag' => 'a', 'text' => '3', 'attrs' => ['href' => '...?page=3', 'class' => 'active']]
```

Without a base URL, pages get `data-page` attributes instead of `href` for JavaScript handling:

```
$pager = new Pager();
$pager->load(10, 1);
// Pages have: 'attrs' => ['data-page' => 1]
```

### Element Collection (ElementsTrait)

[](#element-collection-elementstrait)

Manage ordered collections of elements with flexible positioning:

```
use JDZ\Renderer\Button;
use JDZ\Renderer\ElementsTrait;

// In your toolbar/container class:
class Toolbar {
    use ElementsTrait;
}

$toolbar = new Toolbar();
$toolbar->addElement(new Button('save'));    // position 1
$toolbar->addElement(new Button('cancel'));  // position 2
$toolbar->addElement(new Button('delete'));  // position 3

// Reposition elements
$toolbar->setElementPosition('delete', 'first');
$toolbar->setElementPositionAfter('cancel', 'delete');
$toolbar->setElementPositionBefore('save', 'cancel');
```

### Attributes (Data, ARIA, Styles)

[](#attributes-data-aria-styles)

All renderable components support data attributes, ARIA attributes, and CSS classes:

```
$btn = new Button('menu');
$btn->setText('Menu');

$btn->addDataAttr('toggle', 'dropdown');
$btn->addAriaAttr('expanded', 'false');
$btn->addStyles('btn btn-default dropdown-toggle');

$data = $btn->toData();
// attrs: ['class' => 'btn btn-default dropdown-toggle', 'data-toggle' => 'dropdown', 'aria-expanded' => 'false', 'href' => '#']
```

Twig Integration
----------------

[](#twig-integration)

The `toData()` output is designed for Twig templates:

```
{# button.html.twig #}

  {{ button.text | raw }}

```

```
{# pager.html.twig #}

    {% for page in pager.pages %}

          {{ page.text }}

    {% endfor %}

```

Testing
-------

[](#testing)

```
composer test
# or
vendor/bin/phpunit
```

License
-------

[](#license)

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance83

Actively maintained with recent releases

Popularity6

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~79 days

Recently: every ~98 days

Total

6

Last Release

85d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5e83e3701566e43438525ed14578487e732b849d152b5071aa1613a0dad96913?d=identicon)[jdz](/maintainers/jdz)

---

Top Contributors

[![joffreydemetz](https://avatars.githubusercontent.com/u/15113527?v=4)](https://github.com/joffreydemetz "joffreydemetz (12 commits)")

---

Tags

twightmltemplateutilitiesJDZ

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/jdz-htmlrenderer/health.svg)

```
[![Health](https://phpackages.com/badges/jdz-htmlrenderer/health.svg)](https://phpackages.com/packages/jdz-htmlrenderer)
```

###  Alternatives

[phpoffice/phpword

PHPWord - A pure PHP library for reading and writing word processing documents (OOXML, ODF, RTF, HTML, PDF)

7.6k39.0M235](/packages/phpoffice-phpword)[latte/latte

☕ Latte: the intuitive and fast template engine for those who want the most secure PHP sites. Introduces context-sensitive escaping.

1.3k16.2M781](/packages/latte-latte)[twig/string-extra

A Twig extension for Symfony String

22150.9M230](/packages/twig-string-extra)[twig/markdown-extra

A Twig extension for Markdown

12116.2M131](/packages/twig-markdown-extra)[twig/html-extra

A Twig extension for HTML

789.4M78](/packages/twig-html-extra)[twig/cache-extra

A Twig extension for Symfony Cache

412.4M40](/packages/twig-cache-extra)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
