PHP嵌套模板解析器
我需要一个能够解析以下格式的PHP模板解析器:PHP嵌套模板解析器,php,parsing,templates,template-engine,Php,Parsing,Templates,Template Engine,我需要一个能够解析以下格式的PHP模板解析器: {users} {name} {age} {posts} {title} {body} {comments} {comtitle} {combody} {/comments} {/posts} {/users} 我研究过的所有模板分析器。。。要么是不够递归,要么是带有不必要的模板结构,这些模板结构看起来非
{users}
{name}
{age}
{posts}
{title}
{body}
{comments}
{comtitle}
{combody}
{/comments}
{/posts}
{/users}
我研究过的所有模板分析器。。。要么是不够递归,要么是带有不必要的模板结构,这些模板结构看起来非常类似于PHP语法,不值得这样做。这是CodeIgniter模板的默认工作方式,但它们的挖掘深度不够
信不信由你,中似乎没有一个解析器能够做到这一点。有些人可以实现它,但语法接近PHP的原生foreach函数
你知道解析器是否存在吗?
或者您是否创建了一个读取这种类型结构的文件?
所需的解析器应该能够无限深入地挖掘,前提是为其提供了更嵌套的数组
具体地说,我正在寻找CodeIgniter解决方案,但任何PHP解决方案在这一点上都已经足够了,因为我已经对此进行了几天的研究
谢谢 如前所述,该格式看起来无法解析。无法区分具有匹配的
{/tag}
(如{posts}
)和不具有匹配的{body}
)的{tag}
)
不要试图重新发明轮子。除了PHP本身,还有很多优秀的模板解析器。除非你真的很好,否则你所提出的任何东西都可能不会像已经存在的那样功能强大,速度也不会那么快。我决定完全放弃第三方模板解析器,选择使用PHP的本机支持。在我自己的规范中,与兼容性、深层嵌套、条件、循环相关的头痛是不值得的 从这一点开始,我将简要地教授我的设计器复杂视图的循环和条件。对于任何使用CodeIgniter的人,我强烈建议启用短标记并利用以下功能回传数据: 而不是:
你可以这样写:
看看这与标准模板语言有多接近:{variable}
开始使用PHP,这样您的代码就不会被echo
语句和HTML的长PHP字符串所充斥
在我看来,这就是模板化解决方案。尽管你的设计师会因为你的介绍而讨厌你:
if
、elseif
、endif
、foreach
和endforeach
,与他们进行一个小时的讨论,解释他们如何使用示例,将使您的观点具有最大的灵活性
发疯
“我没有测试来证明这一点,但我认为这对电脑来说是个笑话。”@Jordan Arseno
乔丹,我同意。虽然如果您同时要解析相当多的文件,那么所有这些文件加起来可能会非常糟糕。如果您有驱动器/特殊需求,我同意您拥有自己的模板解析器。虽然使用稍微不同的语法可以在解析过程中节省大量的处理时间
不使用此版本,请执行以下操作:
{users}
{name}
{age}
{posts}
{title}
{body}
{comments}
{comtitle}
{combody}
{/comments}
{/posts}
{/users}
您也可以使用以下内容:
{foreach: users}
{name}
{age}
{foreach: posts}
{title}
{body}
{foreach: comments}
{comtitle}
{combody}
{endforeach: comments}
{endforeach: posts}
{endforeach: users}
这样,在查找{foreach:}
模式时,您将知道有一个匹配的标记,而不必为所有模式查找一个。然后,您可以轻松地使用preg\u match()
来通过
(注意:您仍然可以对您的样式执行相同的操作,尽管您必须向后解析代码,这可能会给您带来不便。)horrah,他们用不同的标记分隔符重新创建了XML!我想说的是,使用XSLT,甚至可能会在将来的工作中派上用场。重新发明轮子正是我不想做的——这就是为什么我要问这个问题。你能解释一下“没有办法区分{tag}…?”我以前没有写过解析器,但是区分{tag}{/tag}和单个{tag}似乎很简单。。。首先读入整个模板,如果它有一个匹配的{/tag},则意味着在相应数组的所有元素上循环,否则,除了{tag}是单个元素之外,不是吗?像这样在解析器中向前看是非常低效的。你完全正确。不知怎的,我重新回到了这个问题上——两年前我还非常天真/缺乏经验。这是一个很好的建议。干杯