2017 © Pedro Peláez
 

library front-matter

Front matter parser and dumper for PHP

image

webuni/front-matter

Front matter parser and dumper for PHP

  • Tuesday, March 20, 2018
  • by hason
  • Repository
  • 2 Watchers
  • 4 Stars
  • 43,318 Installations
  • PHP
  • 5 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 5 Versions
  • 13 % Grown

The README.md

Front Matter

Packagist Quality Gate Status Coverage, (*1)

The most universal Front matter (yaml, json, neon, toml) parser and dumper for PHP. Front matter allows page-specific variables to be included at the top of a page., (*2)

Installation

This library can be installed via Composer:, (*3)

composer require webuni/front-matter

Usage

Automatic front matter detection and parsing

This library can parse all form of front matter:, (*4)

YAML (Neon) TOML Twig Pug Json
```markdown --- foo: bar --- # Section Text ``` ```markdown +++ foo = bar +++ # Section Text ``` ```markdown {#--- foo: bar ---#}

Section

{{ foo }}, (*5)

```
```markdown -- foo: bar h1 Section p= foo ``` ```markdown { "foo": "bar" } # Section Text ```

The following code will automatically detect the above front matter types:, (*6)

<?php

$frontMatter = \Webuni\FrontMatter\FrontMatterChain::create();
$document = $frontMatter->parse($string);

$data = $document->getData();
$content = $document->getContent();

Parse an arbitrary string

<?php

$frontMatter = new \Webuni\FrontMatter\FrontMatter();

$document = $frontMatter->parse($string);

$data = $document->getData();
$content = $document->getContent();

Check if a string has front matter

<?php

$frontMatter = new \Webuni\FrontMatter\FrontMatter();

$hasFrontMatter = $frontMatter->exists($string);

Twig loader

If you want to store metadata about twig template, e.g.:, (*7)

{#---
title: Hello world
menu: main
weight: 20
---#}
{% extend layout.html.twig %}
{% block content %}
Hello world!
{% endblock %}

you can use FrontMatterLoader, that decorates another Twig loader:, (*8)

$frontMatter = \Webuni\FrontMatter\Twig\TwigCommentFrontMatter::create();
$loader = new \Twig\Loader\FilesystemLoader(['path/to/templates']);
$loader = new \Webuni\FrontMatter\Twig\FrontMatterLoader($frontMatter, $loader);

$twig = new \Twig\Environment($loader);
$content = $twig->render('template', []);
// rendered the valid twig template without front matter

It is possible to inject front matter to Twig template as variables:, (*9)

// …
$converter = \Webuni\FrontMatter\Twig\DataToTwigConvertor::vars();
$loader = new \Webuni\FrontMatter\Twig\FrontMatterLoader($frontMatter, $loader, $converter);
// …

Loaded Twig template has this code:, (*10)

{% set title = "Hello world" %}
{% set menu = "main" %}
{% set weight = 20 %}
{% line 5 %}
{% extend layout.html.twig %}
{% block content %}
Hello world!
{% endblock %}

Available converters:, (*11)

Converter Twig
DataToTwigConvertor::nothing()
DataToTwigConvertor::vars() {% set key1 = value1 %}
DataToTwigConvertor::vars(false) {% set key1 = key1 is defined ? key1 : value1 %}
DataToTwigConvertor::var('name') {% set name = {key1: value1, key2: value2} %}
DataToTwigConvertor::var('name', false) {% set name = name is defined ? name : {key1: value1} %}

Markdown

The most commonly used front matter is for markdown files:, (*12)

---
layout: post
title: I Love Markdown
tags:
  - test
  - example
---

# Hello World!

This library can be used with league/commonmark:, (*13)

$frontMatter = new \Webuni\FrontMatter\FrontMatter();
$extension = new \Webuni\FrontMatter\Markdown\FrontMatterLeagueCommonMarkExtension($frontMatter);

$converter = new \League\CommonMark\CommonMarkConverter([]);
$converter->getEnvironment()->addExtension($extension);
$html = $converter->convertToHtml('markdown'); // html without front matter

Alternatives

  • https://github.com/spatie/yaml-front-matter
  • https://github.com/ergebnis/front-matter
  • https://github.com/mnapoli/FrontYAML
  • https://github.com/Modularr/YAML-FrontMatter

The Versions

27/04 2016
11/08 2015