【问题标题】:Is there a html-only templates system for php?是否有用于 php 的仅 html 模板系统?
【发布时间】:2011-03-15 23:06:46
【问题描述】:

我已经开始使用 clojure 进行编码,Enlive 给我留下了深刻的印象。我真正喜欢它的一件事是 Enlive 使用 html-only 模板。所以模板就是一个包含html的文件,以.html结尾,就这么简单。它被解析成一个 dom 树,然后该 dom 树被 clojure/enlive 操作、组合、动态化等。html 模板文件中没有语法,一个漂亮干净的分离。

通过 javascript 完成的类似系统的另一个示例是 PURE

在 php 中有类似的东西吗? 或者,一般来说,有什么方法可以做仅 html 的模板?

【问题讨论】:

  • 我也一直在思考这个问题。理论上,您可以收集应用程序的所有 html 输出,将其通过管道传输到 phpQuery,然后像 PURE 那样注入实际内容。理论上。
  • PURE 的 Hello World 示例可以很容易地用 DOM 在十几行中重新实现。不过,它会使用 XPath 进行 DOM 查询。如果您不介意学习另一种标记语言,请查看 XSLT。
  • 我认为和 Gordon 一样,如果你走在 PHP 中实现 PURE 之类的方法(这不应该那么困难),并且没有可用的 DOM 引擎,XPATH 是要走的路。 PURE 来自我过去与 JSON 的 XSLT 会议。但在这里我不同意 Gordon,我不会白白回到 XSLT。

标签: php html clojure templating


【解决方案1】:

有趣的开始。但令我印象深刻的是,为什么我们不能使用带有示例文本的不同模板来更改视图和元素的不同状态 - 并提取代码来创建现有模板系统或只是用内容填充它。发现工作流程感觉如此复杂和复杂——不喜欢将 html 与 php / js 混合,也不喜欢编写抽象模板系统。需要大量的大脑 - 无需简单的可视化即可进行大量交流。

【讨论】:

    【解决方案2】:

    我想Psttt! php 模板引擎正是您要找的,它可以保持您的 html 模板完整无缺,让您可以更好地重用您的 html。

    完整的源代码在这里http://github.com/givanz/psttt

    【讨论】:

      【解决方案3】:

      结帐PHPTAL。 PHPTAL 是一个用于 PHP5 的 XML/XHTML 模板库,它提供已编译的模板和细粒度的缓存。 模板是在纯 XML/HTML 标记中定义的。

      <div class="item" tal:repeat="item itemsArray">
          <span tal:condition="item/hasDate" tal:replace="item/getDate"/>
          <a href="${item/getUrl}" tal:content="item/getTitle"/>
        <p tal:content="value/getContent"/>
      </div>
      

      【讨论】:

        【解决方案4】:

        您可以查看 phptal.org。它是一个使用 HTML 标签的 PHP 模板引擎。 但这不是那么快。

        您还可以查看其他项目,例如 twig-project.org 女巫要快得多。

        【讨论】:

          【解决方案5】:

          很高兴听到 Enlive。几年来我一直在思考这个概念,并一起破解了 something in PHP 共享一些原则:模板是纯 HTML,您可以通过使用 CSS 或 XPath 将内容寻址到文档中的特定节点来“填充”它们。

          $t = new Template('yourfile.html');
          $t->fill('#nav',$someMarkup);
          $t->fill('#header',$otherMarkup);
          

          我还尝试将一些规定放在一起,将内容分成某种“样式表”……好吧,“样式表”是错误的词。我称它们为内容寻址表(该项目称为 CAST,用于内容寻址样式模板)。 CAS 看起来像您可能期望的那样:

          .col #foot {
              content: 'foot';
          }
          
          #content {
              content: file_get_contents('pangolin.txt');
          }
          

          内容的值假定为 PHP 表达式。也有一些设置适用于选择器的 PHP 的规定。

          运行 tarball 中的 cssfill.php 脚本(最好的调用可能是 ./cssfill.php pangolin.cas pangolin.html,您可能需要在 cssfill.php 中更改 php 解释器的路径),查看输出,比较与输入文件。

          如果这篇文章激起了你对这个想法的热情,请随时告诉我。我一直在想这是否是一个疯狂的想法,或者它是否有一个地方,如果有的话,我很乐意将它变成一个经过深思熟虑的开源项目,而不是一个 tarball 随机扔到互联网上。

          【讨论】:

          • 是的,确实如此。我将不得不检查代码项目,因为我认为该系统确实超越了传统的模板系统方法,因为仅使用 html 开头是你所能得到的最纯粹的,所以你不能比那一点更进一步。你不会碰巧使用 git/github 吧?如果您要使其开源,我当然会说如果您熟悉 github 将是一个放置它的好地方(我整天都在宣传(原文如此)git 和 github)。无论如何,我会检查代码并取得联系。
          • Tchalvak - 一年后(和 side discussion on Hacker News )我终于决定放 CAST up on github - 如果你有机会,随时拉,让我知道你的想法!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多