Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Stacey应用程序中从逗号分隔的列表值创建链接标记?_Php_Arrays_List_Twig_Comma - Fatal编程技术网

Php 如何在Stacey应用程序中从逗号分隔的列表值创建链接标记?

Php 如何在Stacey应用程序中从逗号分隔的列表值创建链接标记?,php,arrays,list,twig,comma,Php,Arrays,List,Twig,Comma,我希望Stacey中每个项目都有标签/类别,如“设计”、“摄影”、“插图”等,并将每个标签/类别链接到各自的类别 例如,my project.yml文件的内容如下: title: Example Person's Logo date: February 2014 client: Example Person category: Logo, Digital, content: +++ Branding for Example Person. +++ 因此,在Stacey(v3)中,当我在proj

我希望Stacey中每个项目都有标签/类别,如“设计”、“摄影”、“插图”等,并将每个标签/类别链接到各自的类别

例如,my project.yml文件的内容如下:

title: Example Person's Logo
date: February 2014
client: Example Person
category: Logo, Digital,
content: +++
Branding for Example Person.
+++
因此,在Stacey(v3)中,当我在project.html模板中放入
{{{page.category}}
时,它输出
徽标、数字,
,这不是我想要的。如果我只想发短信就好了,但我不想

我想获取逗号分隔的值(无论最后一项是否有逗号),并将其转换为:

<a href="/category/logo/">Logo</a>
<a href="/category/digital/">Digital</a>

我已经做了一些搜索,使用TWIG模板引擎,我不确定如何在没有像PHP中那样的反向引用的情况下实现这一点。我听说在PHP中,解决方案如下:

<?php echo preg_replace(
    "#([^,\s]+)#is",
    "<a href='/tags/$1'>$1</a>",
    $row['tags']);
?>

但是,我不知道如何将逗号分隔的列表从“category:”变成一个数组,然后去掉数组中的逗号,并在链接到href中的类别时在每个数组周围放置链接标记

我也尝试过将上面的PHP作为部分使用,但是由于缓存的原因,动态代码在Stacey中无法工作,并且不能从/partials/文件夹外部引用

我对这一切感到困惑,任何帮助都将不胜感激

注意:Stacey没有Twig的最新版本,该版本具有类似“拆分”的筛选器。

您可以使用Twig的筛选器,然后检查元素是否为空

{% set categories = page.category|split(',') %}


{% for category in categories %}
    {% if category is not empty %}
        <a href="/category/{{ category|lower }}/">{{ category }}</a>
    {% endif %}
{% endfor %}
然后在
公共函数getFunctions()之后添加此方法

/**
 * Custom filter method
 *
 * @param string $str
 * @param string $delimiter
 * @return string[]
 */
public function split($str, $delimiter) {
  return explode($delimiter, $str);
}
解决方案由OP

将Adam的代码扩展到这个

{% set categories = page.category|replace({', ' : ','})|split(',') %}
    {% for category in categories %}
        {% if category is not empty %}
            <dd><a href="/category/{{ category|lower|replace({' ' : '-', ',' : ''}) }}/">{{ category }}</a></dd>
        {% endif %}
    {% endfor %}
{%set categories=page.category | replace({',':','})| split(',')%}
{categories%%中的类别为%s}
{%如果类别不是空的%}
{%endif%}
{%endfor%}

这样做的目的是将URL中的空格变成连字符,使其更干净,然后去掉逗号后的空格,分隔逗号之间的单词,然后删除多余的逗号。我本想使用“修剪”过滤器,但像“拆分”一样,它不可用。

干杯,亚当!奇怪的是,斯泰西没有包含拆分过滤器。我会四处挖掘,试着为斯泰西更新Twig,试着让split工作。你的代码看起来对我有用,我看看能不能用得开。否则,我一直在考虑如何使用“替换”或“修剪”,对于这个特定的示例,我不知道如何使用它。@LouisBullock分割过滤器实际上是Twig的一部分,但在文档中说分割过滤器是在Twig 1.10.3中添加的。但是,检查Twig的v1.4版本候选版本上的源代码可以确认正在使用。如果你能升级Twig,这将是理想的。您熟悉使用Composer安装软件包吗?另一种方法是自己为Twig添加一个新的拆分过滤器。我将扩展我的答案,向你展示多么精彩!不幸的是,我对这一切都不熟悉:)任何帮助都将不胜感激:)@LouisBullock Dam,看起来Twig_SimpleFilter类也是在1.4版之后添加的。。。我会再次更新我的答案
{% set categories = page.category|replace({', ' : ','})|split(',') %}
    {% for category in categories %}
        {% if category is not empty %}
            <dd><a href="/category/{{ category|lower|replace({' ' : '-', ',' : ''}) }}/">{{ category }}</a></dd>
        {% endif %}
    {% endfor %}