如何在Twig中删除所有特定字符?

时间:2017-04-04 06:41:13

标签: codeigniter twig

我正在使用twig和Codeigniter,我正在尝试为菜单创建链接。

链接的名称如下所示:

about_us,   家,   our_products_and_activities,   send_us_feedback

我的结局应该是:

about_us,   家,   我们的产品,   send_us

如何在第二个下划线后删除所有?

这是我到目前为止所做的事情(有点混乱但部分有效)

 <ul class="sidebar-menu">

        {% for link in menu['links'] %}
            <li class="treeview">
                // remove spaces and added lower dashes instead
                {% set links_str = link.page_name|lower|replace({' 

                ':'_'})|striptags %}
                // breaks str to array
                {% set striped_links = links_str|split('_') %}

                // create new array from the portion i need
                {% set links_values = [striped_links.0,striped_links.1] %}

                // join them all and added lower dash
                {% set new_values = links_values|join('_') %}

                {{ dump(new_values) }}

           </li>
       {% endfor %}
</ul>

现在我得到 about_us,home_,our_products_,send_us _

我可以删除最后一个较低的短划线...但我正在寻找更优雅的方式。

感谢。

1 个答案:

答案 0 :(得分:1)

延长树枝

$twig->addFilter(new Twig_SimpleFilter('break_on', function($value, $character, $position = 1) {
    return substr($value, 0, strposX($value, $character, $position));
});

枝条

{{ 'our_products_and_activities' | break_on('_', 2) }}

全局函数

function strposX($haystack, $needle, $number){
    if($number == 1){
        return strpos($haystack, $needle);
    }elseif($number > 1){
        return strpos($haystack, $needle, strposX($haystack, $needle, $number - 1) + strlen($needle));
    }else{
        return error_log('Error: Value for parameter $number is out of range');
    }
}

function by Smokey_Bud