使用twig将变量过滤到url中

问题描述 投票:0回答:3

我有一个变量

{{ name }}
,它输出治疗和支持。我需要删除 & 符号并将名称转换为带有 twig 的可用 url slug,例如:治疗支持。

我很难找到合适的树枝安装工。我正在看我正在看http://twig.sensiolabs.org/documentation。到目前为止我所拥有的只是

{{ name |lower }}

重申一下,我需要使用 twig 使用

treatment-support
变量将治疗和支持转变为
{{ name }}

如有任何帮助,我们将不胜感激。

php filter twig drupal-8
3个回答
3
投票

您可以使用树枝替换过滤器

{{ name|replace({' & ': '-', '&': '-'}) }}

正如@DarkBee在评论中所说,对于更复杂的东西,你可以使用Slugify


0
投票

您可以在 drupal8 中为 twig 创建自己的过滤器。

遵循此:

http://leopathu.in/content/create-custom-twig-filter-drupal-8

如果不起作用请评论。我已经成功为我的 drupal 网站创建了一些过滤器。


0
投票

您可以创建自定义过滤器或使用@alexf的建议

但是,如果出现多个这种情况,我建议使用自定义过滤器

类似...

<?php
$loader = new Twig_Loader_Filesystem();
$twig = new Twig_Environment($loader);

/**
 * Creates slugs from strings
 */
$twig->addFilter(new Twig_Filter('slugify', function( $string = '' ) {

    if( !$string ){
        return $string;
    }

    if( !is_string( $string ) ){
        throw new Exception('Only strings can be slugified.' );
    }

    //lowercase the whole string
    $slug = strtolower($string);

    //create an array of all the words/characters
    $slug_array = explode( ' ', $slug );

    //replace all special characters with empty strings
    array_walk( $slug_array, function( &$item, $key ){
        $item = preg_replace('/[^a-z0-9]/', '', $item );
        return $item;
    });

    //remove empty items from the array
    $slug_array = array_filter( $slug_array );

    //reconstruct the string
    $slug = join( '-', $slug_array );
    return $slug;
}));

然后就可以像这样使用了

<p>{{ 'Treatment & Support'|slugify }}</p>
<p>{{ 'Heres a sentence with 2 numbers 8o'|slugify }}</p>
<p>{{ 'Hello World!'|slugify }}</p>

这将产生以下输出

treatment-support 
heres-a-sentence-with-2-numbers-8o 
hello-world
© www.soinside.com 2019 - 2024. All rights reserved.