我想在视图中显示相关模型列表,以逗号分隔列表。
假设我有一个帖子模型,相关标签,post.getTags()
获取相关模型,但我看不到如何以产生正确输出的方式连接它们。
在普通的PHP视图中,我只是将HTML放入一个数组implode(', ', $tagLinks)
。
如何使用Volt实现相同的输出?
答案 0 :(得分:0)
在伏特引擎内创建一个过滤器。
$compiler = $volt->getCompiler();
$compiler->addFilter('joiner', function($resolvedArgs, $exprArgs) {
$text = 'implode(", ", ' . $resolvedArgs . ')';
return $text;
});
并在模板中使用“joiner”过滤器。
{{ post.getTags() | joiner }}
最后。如果你懒得创建一个过滤器或函数,那么只需输入php代码。这是伏特的工作。
some tags : <?= implode(', ', $tagLinks) ?>
编辑:
我认为伏特已经有join
过滤器了。见http://docs.phalconphp.com/en/latest/reference/volt.html#filters
答案 1 :(得分:0)
看到我想从模型中获取格式化信息,我不能只使用普通的implode()或连接过滤器。正如Eugene所建议的那样,我为Volt引擎添加了一个自定义函数,并为我的Model提供了一种方法来获取格式正确的信息。
自定义Volt功能(在我已经获得的其他视图相关格式的App \ Formatter类中):
static public function joinModels($resultset, $function, $join = ', ')
{
$result = '';
foreach ($resultset as $item) {
$result .= $item->$function() . $join;
}
return substr($result, 0, strlen($join) * -1);
}
将其添加到Volt:
$compiler = $volt->getCompiler();
$compiler->addFunction('joinModels', 'App\\Formatter::joinModels');
在模型中:
public function linkTo()
{
return Phalcon\Tag::linkTo('tags/' . urlencode($this->name), htmlspecialchars($this->name));
}
然后,最后,在我看来:
{% set postTags = post.getTags() %}
{% if postTags.count() %}
{{ joinModels(postTags, 'linkTo') }}
{% else %}
None
{% endif %}
非常感谢那些寻求帮助的人。
答案 2 :(得分:0)
已有联接过滤器:{{ tagLinks|join(",") }}