承接 webuni/front-matter 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

webuni/front-matter

最新稳定版本:2.1.1

Composer 安装命令:

composer require webuni/front-matter

包简介

Front matter parser and dumper for PHP

README 文档

README

Packagist Quality Gate Status Coverage

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.

Features

This library can parse all form of front matter:

YAML (Neon)TOMLJsonTwigPug
---
foo: bar
---

# Section

Text
+++
foo = bar
+++

# Section

Text
{
  "foo": "bar"
}

# Section

Text
{#---
foo: bar
---#}

<h1>Section</h1>

<p>{{ foo }}</p>
--
  foo: bar

h1 Section

p= foo

Installation

This library can be installed via Composer:

composer require webuni/front-matter

Usage

Automatic front matter detection and parsing

The following code will automatically detect the above front matter types:

<?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.:

{#---
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:

$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:

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

Loaded Twig template has this code:

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

Available converters:

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:

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

# Hello World!

This library can be used with league/commonmark:

$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

统计信息

  • 总下载量: 260.13k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 43
  • 点击次数: 3
  • 依赖项目数: 15
  • 推荐数: 0

GitHub 信息

  • Stars: 41
  • Watchers: 2
  • Forks: 10
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 未知

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固