0

我想在我的视图中显示相关模型的列表,以逗号分隔的列表。

假设我有一个 Posts 模型,以及相关的标签,post.getTags()获取相关的模型,但我看不到如何以产生正确输出的方式连接它们。

在普通的 PHP 视图中,我只需将 HTML 放入一个数组中,然后implode(', ', $tagLinks).

如何使用 Volt 实现相同的输出?

4

3 回答 3

0

在您的伏特引擎内创建一个过滤器。

$compiler = $volt->getCompiler();
$compiler->addFilter('joiner', function($resolvedArgs, $exprArgs)  {
    $text = 'implode(", ", ' . $resolvedArgs  . ')';
    return $text;
});

并在模板中使用“joiner”过滤器。

{{ post.getTags() | joiner }}

最后。如果您懒得创建过滤器或函数,那么只需键入 php 代码。它的工作电压。

some tags : <?= implode(', ', $tagLinks) ?>

编辑:我认为 volt 已经有joinfilter 。见http://docs.phalconphp.com/en/latest/reference/volt.html#filters

于 2013-09-16T14:29:54.760 回答
0

看到我想从模型中获取格式化信息,我不能只使用普通的 implode() 或加入过滤器。正如 Eugene 所建议的,我向 Volt 引擎添加了一个自定义函数,并为我的模型添加了一个方法来获取格式正确的信息。

自定义 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 %}

非常感谢那些回答的帮助。

于 2013-09-17T01:51:00.717 回答
0

已经有加入过滤器:{{ tagLinks|join(",") }}

于 2016-02-15T13:26:27.440 回答