decodelabs/tagged

无需烦恼的PHP标记生成


README

PHP from Packagist Latest Version Total Downloads GitHub Workflow Status PHPStan License

PHP标记生成无需烦恼。

Tagged提供了一种简单、强大且美观的方法来创建HTML标记,无需处理乱糟糟的代码。

DecodeLabs博客 上获取新闻和更新。

安装

composer require decodelabs/tagged

使用

Tagged使用VeneerDecodeLabs\Tagged下提供一个统一的界面。您可以通过这个静态界面访问所有主要的HTML功能,而不会影响测试和依赖注入。

HTML标记

使用简单、灵活的接口生成标记。

use DecodeLabs\Tagged as Html;

echo Html::{'div.my-class#my-id'}('This is element content', [
    'title' => 'This is a title'
]);

...

<div class="my-class" id="my-id" title="This is a title">This is element content</div>

创建不带内容的单个标签

use DecodeLabs\Tagged as Html;

$tag = Html::tag('div.my-class');

echo $tag->open();
echo 'Content';
echo $tag->close();

将HTML字符串包装起来,以便在需要Markup实例的地方使用

use DecodeLabs\Tagged as Html;

$buffer = Html::raw('<span class="test">My span</span>');

将脚本数据转储到Html

yield Html::script(Html::raw(json_encode( $some_data )), [
    'type' => 'application/json'
]);

为标记输出准备任意输入

use DecodeLabs\Tagged as Html;

$markup = Html::wrap(
    function() {
        yield Html::h1('My title');
    },
    [Html::p(['This is ', Html::strong('mixed'), ' content'])]
);

嵌套

您可以通过多种方式嵌套元素

use DecodeLabs\Tagged as Html;

// Pass in nested elements via array
echo Html::div([
    Html::{'span.inner1'}('Inner 1'),
    ' ',
    Html::{'span.inner2'}('Inner 2')
]);


// Return anything and everything via a generator
echo Html::div(function($el) {
    // $el is the root element
    $el->addClass('container');

    // Nest elements with a single call
    yield Html::{'header > h1'}('This is a header');
    yield Html::p('This is a paragraph');

    // Set attributes inline
    yield Html::{'p[data-target=open]'}('Target paragraph');

    // Generator return values are rendered too
    return Html::{'div.awesome'}('This is awesome!');
});

时间和日期

格式化和包装日期和时间间隔

use DecodeLabs\Tagged as Html;

// Custom format
Html::$time->format('now', 'd/m/Y', 'Europe/London');

// Locale format
// When timezone is true it is fetched from Cosmos::$timezone
Html::$time->locale('now', 'long', 'long', true);

// Locale shortcuts
Html::$time->dateTime('tomorrow'); // medium
Html::$time->longTime('yesterday');
Html::$time->shortDate('yesterday');
// ...etc


// Intervals
Html::$time->since('yesterday'); // 1 day ago
Html::$time->until('tomorrow'); // 1 day from now
Html::$time->sinceAbs('yesterday'); // 1 day
Html::$time->untilAbs('yesterday'); // -1 day
Html::$time->between('yesterday', 'tomorrow'); // 1 day

图标

创建字体或SVG图标所需的标记

use DecodeLabs\Tagged as Html;

Html::$icon->setFormat('font');
echo Html::$icon->aubergine; // <i class="icon icon-aubergine"></i>

Html::$icon->setFormat('svg');
echo Html::$icon->aubergine; // <svg><use xlink:href="#aubergine" /></svg>

Html::$icon->setSvgReference('path/to/my/file.svg');
echo Html::$icon->aubergine; // <svg><use xlink:href="path/to/my/file.svg#aubergine" /></svg>

媒体嵌入

规范化从媒体网站共享的嵌入代码

use DecodeLabs\Tagged as Html;

echo Html::$embed->video('https://www.youtube.com/watch?v=RG9TMn1FJzc');

已弃用功能

寻找之前在这里的功能?它可能已经被移动到专门的库

XML处理

Tagged的XML操作功能已移动到其自己的项目Exemplar

内容解析(Tagged::$parse和::$toText插件)

内容转换现在由Metamorph库处理。

许可

Tagged采用MIT许可证。有关完整的许可证文本,请参阅LICENSE