kzykhys/twig-extensions

v0.1.0 2013-12-20 10:08 UTC

README

Latest Unstable Version Build Status Coverage Status SensioLabsInsight

Add more fun to Twig. Inspired by Jinja2, Jekyll ...

{% block css %}
  <style type="text/css">
  {% less %}
    {% include 'mixins.less' %}
    .container {
      .row {
        &:first-child { margin-bottom: @m; }
      }
    }
  {% endless %}
  </style>
{% endblock %}

{% unless user.active %}
  <div class="alert">Please <a href="#">Login</a></div>
{% endunless %}

{{ gist(6421704) }}

{{ post.content|markdown }}

{% pygments brainfuck linenos %}
+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.
------------.<++++++++.--------.+++.------.--------.>+.
{% endpygments %}

Customized filesystem loader

<?php

use KzykHys\TwigExtensions\Loader\Filesystem;

$loader = new Filesystem('/path/to/templates');
$twig   = new Twig_Environment($loader);

$twig->render(array('date.twig', 'archive.twig', 'default.twig'));

Requirements

  • PHP5.3

Optional requirements

  • Python2.4+ and Pygments (kzykhys/Pygments.php) for SyntaxHighlight extension

    {
        "require": {
            "kzykhys/pygments": ">=1.0"
        }
    }
  • PHP5.4+ and kzykhys/Ciconia for Markdown extension

    {
        "require": {
            "kzykhys/ciconia": ">=1.0"
        }
    }
  • leafo/lessphp for Less extension

    {
        "require": {
            "leafo/lessphp": ">=0.4"
        }
    }
  • symfony/process for Pipe extension

    {
        "require": {
            "symfony/process": ">=2.3"
        }
    }

Installation

{
    "require": {
        "kzykhys/twig-extensions": "dev-master"
    }
}
<?php

use KzykHys\TwigExtensions\ExtensionAggregate;

$loader = new Twig_Loader_Filesystem('/path/to/templates');
$twig   = new Twig_Environment($loader);

// Registers all extensions
$twig->setExtensions(ExtensionAggregate::getExtensions());

A List of Extensions

Extension Description
Core Provides tags and tests
Text Utilities for strings
Snippet Embedding various snippets
Markdown Github Flavored Markdown support
SyntaxHighlight Syntax Highlighting (pygments/google-code-prettify)
Less Compiles LESS to CSS
Pipe Use external commands as filters

Registering extensions to Twig

Register all-in-one extension

$loader = new Twig_Loader_Filesystem('/path/to/templates');
$twig   = new Twig_Environment($loader);
$twig->setExtensions(ExtensionAggregate::getExtensions());

Or register extensions which you like

$loader = new Twig_Loader_Filesystem('/path/to/templates');
$twig   = new Twig_Environment($loader);
$twig->addExtension(new \KzykHys\TwigExtensions\Extension\Core());
$twig->addExtension(new \KzykHys\TwigExtensions\Extension\Snippet());

Twig Extensions Reference

Tags

Name Extension Description
unless Core Negated form of the if statement
pygments SyntaxHighlight Highlight the code (requires Pygments.php)
less Less Converts LESS to CSS

Filters

Name Extension Description
center Text Centers the value in a field of a given width.
filesizeformat Text Format the value like a ‘human-readable’ file size (i.e. 13 kB, 4.1 MB, 102 Bytes, etc)
markdown Markdown Transform markdown into html
md5 Text Calculate the md5 hash of a string
sha1 Text Calculate the sha1 hash of a string
sha512 Text Calculate the sha512 hash of a string
pipe Pipe Executes an external command

Functions

Name Extension Description
call Core Call a callback
lipsum Text Generates some lorem ipsum for the template
gist Snippet Embed a gist
pastebin Snippet Embed a pastebin

Tests

Name Extension Description
callable Core Return whether the object is callable
instanceof Core Return whether a variable is an instantiated object of a certain class

License

The MIT License

Author

Kazuyuki Hayashi (@kzykhys)