从智能变量中删除无序列表


Remove unordered list from a smarty variable

您知道从智能变量中删除第一个<ul>和最后一个</ul >的最佳方法是什么吗?

我目前有一个变量,它输出一个菜单标签:{$menu}和一个子菜单,但如果不从子菜单输出中删除<ul>标签,我就不会删除第一个和最后一个无序列表标签。

期待它!

您可以编写一个修饰符(并用register_modifier附加它),它可以剥离第一个和最后一个ul标记。要实现这一点,您可以使用regex。

function smarty_strip_ul($text) {
    return preg_replace('~(.*?)<ul[^>]*>(.*)</ul>~s', '$1$2', $text);
}

$smarty->register_modifier('strip_ul', 'smarty_strip_ul');

以及在tpl 中

{$menu|strip_ul}

这不是很容易解决的。。。

我们将一个唯一的id,div/span元素放在您的列表中,并使用带document.ready()函数的JQuery'ies替换字符串来更改它。

JQuery还可以帮助您将容器的内容转换为dom对象,然后使用:first和:last选择器访问要删除的元素,并使用.remove()函数。

否则,你必须在smarty核心中重写它,这是不明智的,除非你知道自己在做什么,并且不想失去在没有冲突或重建功能的情况下轻松更新smarty的可能性。