2017 © Pedro Peláez
 

yii2-extension yii2-mthaml

The MtHaml integration for the Yii2 framework

image

mervick/yii2-mthaml

The MtHaml integration for the Yii2 framework

  • Saturday, July 18, 2015
  • by mervick
  • Repository
  • 1 Watchers
  • 7 Stars
  • 737 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 6 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Yii2 MtHaml

Analytics, (*1)

The MtHaml integration for the Yii2 framework.
Extension provides a ViewRenders that would allow you to use Haml/Twig view template engines, using Multi target HAML (MtHaml) library., (*2)

Requirements

  • YII 2.0
  • PHP 5.4+
  • Composer

Installation with Composer

Installation is recommended to be done via composer by running:, (*3)

composer require mervick/yii2-mthaml "*"

Also for using twig:, (*4)

composer require twig/twig "~1.11"

Usage

Add this to your config/main.php file:, (*5)

return [
    //....
    'components' => [
        'view' => [
            'renderers' => [
                'haml' => [
                    'class' => 'mervick\mthaml\HamlViewRenderer',
                ],
                'twig' => [
                    'class' => 'mervick\mthaml\TwigViewRenderer',
                ],
            ],
        ],
    ],
];

Rendering in Controllers:, (*6)

class SiteController extends Controller
{
    //....
    public function actionIndex()
    {
        return $this->render('index.haml', $params);
        // or if your want to use twig
        // return $this->render('index.twig', $params);
    }
    //....
}

MtHaml Options

This is default options:, (*7)

    //....
    'renderers' => [
        'haml' => [
            'class' => 'mervick\mthaml\HamlViewRenderer',
            'cachePath' => '@runtime/Haml/cache',
            'debug' => false,
            'options' => [
                'format' => 'html5',
                // MtHaml escapes everything by default
                'enable_escaper' => true,
                'escape_html' => true,
                'escape_attrs' => true,
                'cdata' => true,
                'autoclose' => array('meta', 'img', 'link', 'br', 'hr', 'input', 'area', 'param', 'col', 'base'),
                'charset' => 'UTF-8',
                'enable_dynamic_attrs' => true,
            ],
        ],
        'twig' => [
            'class' => 'mervick\mthaml\TwigViewRenderer',
            'cachePath' => '@runtime/Twig/cache',
            'debug' => false,
            'options' => [
                // Same as for haml, except "enable_escaper"
                // Twig extension already supports auto escaping, so it turned off for MtHaml
                'enable_escaper' => false,
            ],
        ],
    //....

Filters

Filters take plain text input (with support for #{...} interpolations) and transform it, or wrap it. Learn more, (*8)

The following filters are available by default:, (*9)

  • css: wraps with style tags
  • cdata: wraps with CDATA markup
  • escaped: html escapes
  • javascript: wraps with script tags
  • php: executes the input as php code
  • plain: renders as plain text
  • preserve: preserves preformatted text

Filters which not enabled by default:, (*10)

  • coffee: compiles coffeescript to javascript
    • dependence coffeescript/coffeescript "~1" (CoffeeScript)
  • less: compiles as Lesscss
    • depends one of following:
      oyejorge/less.php "*" (OyejorgeLess)
      or leafo/lessphp "*" (LeafoLess)
  • scss: converts scss to css
    • dependence leafo/scssphp "*" (Scss)
      additionally, to use Compass leafo/scssphp-compass "dev-master"
  • markdown: converts markdown to html
    • depends one of following:
      michelf/php-markdown "~1.3" (MichelfMarkdown, MichelfMarkdownExtra)
      or cebe/markdown "~1.0.1" (CebeMarkdown, CebeMarkdownExtra, CebeGithubMarkdown)
      or erusev/parsedown "*" (Parsedown)
      or league/commonmark ">=0.5" (CommonMark)
      or kzykhys/ciconia "~1" (CiconiaMarkdown)
      or fluxbb/commonmark "~1@dev" (FluxBBMarkdown)
  • rest: converts reStructuredText to html
    • dependence gregwar/rst "~1" (ReST)

To enable non default filters you must first install them via composer.
Example, install coffee filter:, (*11)

composer require coffeescript/coffeescript "~1"

After what include it in your config file:, (*12)

    //....
    'renderers' => [
        'haml' => [
            'class' => 'mervick\mthaml\HamlViewRenderer',
            'cachePath' => '@runtime/Haml/cache',
            'options' => [
                //....
            ],
            'filters' => [
                // shorten
                'coffee' => 'CoffeeScript',
                // also you can specify filter options
                'coffee' => [
                    'filter' => 'CoffeeScript',
                    'options' => [
                        'header' => false,
                        'trace' => '@runtime/Haml/coffee-trace.log',
                    ],
                ],
            ],
        ],
    //....

List of all the filters with default options:, (*13)

    'coffee' => [
        // Package: "coffeescript/coffeescript"
        'filter' => 'CoffeeScript',  
        'options' => [
            // add a "Generated by..." header
            'header' => true,
            // reference to token stream (debugging)
            'tokens' => null,
            // file to write parser trace to (debugging)
            'trace' => null,
        ],
    ],

    'less' => [
        // Package: "oyejorge/less.php"
        'filter' => 'OyejorgeLess',
        'options' => [
            // whether to compress
            'compress' => false,
            // whether units need to evaluate correctly
            'strictUnits' => false,
            // whether math has to be within parenthesis
            'strictMath' => false,
            // option - whether to adjust URL's to be relative
            'relativeUrls' => true,
            // whether to add args into url tokens
            'urlArgs' => [],
            'numPrecision' => 8,
            // import dirs
            'importDirs' => [],
            // cache dir
            'cacheDir' => null
        ],
    ],

    'less' => [
        // Package: "leafo/lessphp"
        'filter' => 'LeafoLess',
        'options' => [
            // import dirs
            'importDirs' => [],
        ],
    ],

    'scss' => [
        // Package: "leafo/scssphp"
        'filter' => 'Scss',
        'options' => [
            // import dirs
            'importDirs' => [],
            // enable Compass integration, depends on "leafo/scssphp-compass"
            'enableCompass' => false,
        ],
    ],

    'markdown' => [
        // Package: "michelf/php-markdown"
        'filter' => 'MichelfMarkdown',
        'options' => [
            'forceOptimization' => false,
            'empty_element_suffix' => " />",
            'tab_width' => 4,
            'no_markup' => false,
            'no_entities' => false,
            'predef_urls' => [],
            'predef_titles' => [],
        ],
    ],

    'markdown' => [
        // Package: "michelf/php-markdown"
        'filter' => 'MichelfMarkdownExtra',
        'options' => [
            // Same as for MichelfMarkdown
        ],
    ],

    'markdown' => [
        // Package: "cebe/markdown"
        'filter' => 'CebeMarkdown',
        'options' => [
            'forceOptimization' => false,
            'html5' => false,
        ],
    ],

    'markdown' => [
        // Package: "cebe/markdown"
        'filter' => 'CebeMarkdownExtra',
        'options' => [
            'forceOptimization' => false,
            'html5' => false,
        ],
    ],

    'markdown' => [
        // Package: "cebe/markdown"
        'filter' => 'CebeGithubMarkdown',
        'options' => [
            'forceOptimization' => false,
            'html5' => false,
            'enableNewlines' => false,
        ],
    ],

    'markdown' => [
        // Package: "kzykhys/ciconia"
        'filter' => 'CiconiaMarkdown',
        'options' => [
            'forceOptimization' => false,
            'tabWidth' => 4,
            'nestedTagLevel' => 3,
            'strict' => false,
        ],
    ],

    'markdown' => [
        // Package: "league/commonmark"
        'filter' => 'CommonMark',
        'options' => [
            'forceOptimization' => false,
        ],
    ],

    'markdown' => [
        // Package: "fluxbb/commonmark"
        'filter' => 'FluxBBMarkdown',
        'options' => [
            'forceOptimization' => false,
        ],
    ],

    'markdown' => [
        // Package: "erusev/parsedown"
        'filter' => 'Parsedown',
        'options' => [
            'forceOptimization' => false,
        ],
    ],

    'rest' => [
        // Package: "gregwar/rst"
        'filter' => 'ReST',
        // no options
    ],

Twig Extensions

The Twig Extensions is a library that provides several useful extensions for Twig., (*14)

Install via Composer:, (*15)

composer require twig/extensions "~1.1.0"

Add the following lines to config file:, (*16)

    //....
    'renderers' => [
        'twig' => [
            'class' => 'mervick\mthaml\TwigViewRenderer',
            'options' => [
                //...
            ],
            'extensions' => [
                'Text',   # Provides useful filters for text manipulation;
                'I18n',   # Adds internationalization support via the gettext library;
                'Intl',   # Adds a filter for localization of DateTime objects;
                'Array',  # Provides useful filters for array manipulation;
                'Date',   # Adds a filter for rendering the difference between dates.
            ],
        ],
    //....

Attention!

Inside the templates you must use $view instead of $this, example:, (*17)

-use backend\assets\AppAsset
-use yii\helpers\Html

-AppAsset::register($view)
-$view->beginPage()
!!!
%html{:lang=>Yii::$app->language}
    %head
        %meta{:charset=>Yii::$app->charset}
        %meta(name="viewport" content="width=device-width, initial-scale=1")
        !=Html::csrfMetaTags()
        %title =Html::encode($view->title)
        -$view->head()
    %body
        -$view->beginBody()
        !=$content
        -$view->endBody()
-$view->endPage()

License

MtHaml extension for Yii2 Framework is released under the MIT license., (*18)

The Versions