bit3/tag-replacer

此包已被弃用且不再维护。未建议替代包。

简单替换标签并将内置逻辑添加到字符串中。

dev-master / 1.x-dev 2013-12-02 10:01 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:26:07 UTC


README

此替换器可以替换标签并向字符串添加逻辑。

功能

标签

标签是包含在 {{}} 中的特殊标签。它们有一个名称,并且可以由 :: 连接的参数作为查询字符串。

示例

{{tag::argument1::argument2?param1=value1&param2=value2}}

用法

$replacer->registerTag('tag', function($name, $args, $params) {
	// $name   => 'tag'
	// $args   => array('argument1', 'argument2')
	// $params => array('param1' => 'value1, 'param2' => 'value2');
});

块是具有开始和结束的特殊标签。它们对它们包含的内容执行某些操作。

提示:您可以使用与标签相同名称注册一个块和一个标签,但块优先于标签!

示例

{{myblock::argument1::argument2?param1=value1&param2=value2}}
Hello World
{{endmyblock}}

用法

$replacer->registerBlock('myblock', function($name, $args, $params, $body) {
	// $name   => 'myblock'
	// $args   => array('argument1', 'argument2')
	// $params => array('param1' => 'value1, 'param2' => 'value2');
	// $body   => "\nHello World\n"
});

递归标签

递归标签是其他标签或块内的标签。

示例

{{tag1::{{tag2}}}}

令牌

令牌没有像标签那样的逻辑。它们是简单的 key=>value 对。要在内容中使用,请用 ## 包裹名称。

示例

##mytoken##

用法

$replacer->setToken('mytoken', 'myvalue');

标签、块和令牌的过滤器

过滤器会操纵标签、块或令牌的值。

示例

{{tag|myfilter}}
{{block|myfilter}}
...
{{endblock}}
##token|myfilter##

用法

$replacer->registerFilter('myfilter', function($value) {
	// $value => the result of {{tag}}, {{block}}...{{endblock}} or ##token##
});

处理未知令牌

默认情况下,Replacer 将抛出异常,但此行为可以更改,有三个模式。可以针对标签和令牌或分别定义处理方式。

// trigger an error and leave empty
$replacer->setUnknownDefaultMode(TagReplacer::MODE_ERROR);

// trigger a warning and leave empty
$replacer->setUnknownTagMode(TagReplacer::MODE_WARNING);

// trigger a notice and leave empty
$replacer->setUnknownTokenMode(TagReplacer::MODE_NOTICE);

使用 TagReplacer::MODE_EMPTY,未知标签/令牌将用空值替换。使用 TagReplacer::MODE_SKIP,未知标签/令牌将不会被替换。两者都可以与或不与 TagReplacer::MODE_ERRORTagReplacer::MODE_WARNINGTagReplacer::MODE_NOTICE 一起使用。

// trigger an error, but leave the tag as it is
$replacer->setUnknownDefaultMode(TagReplacer::MODE_ERROR | TagReplacer::MODE_SKIP);

// leave the tag as it is, but do not trigger an error
$replacer->setUnknownDefaultMode(TagReplacer::MODE_SKIP);

// leave empty and do not trigger an error
$replacer->setUnknownDefaultMode(TagReplacer::MODE_EMPTY);

缓存

可以缓存插入标签。只需使用 doctrine 缓存实现之一。缓存仅影响插入标签,不影响块或令牌。

$replacer->setCache(new \Doctrine\Common\Cache\ArrayCache());