我应该总是存储一串HTML而不是打印出部分HTML吗?

时间:2010-08-27 18:11:18

标签: html language-agnostic dom frameworks scope-creep

我遇到过几十个脚本,其中html是echo'而不是存储。我想知道,由于灵活性,总是将html存储在一个字符串中是不是很好?

一个随机的例子是我有一个函数返回动态子导航的html。我正在打印开始div标签,打印它的内容,然后分别打印结束div标签:

<div id="nav">
<?php echo $nav->getHTML();?>
</div>

但是,我现在必须根据#nav内的列表项数量和字符总数是否超过一定数量,为$nav->getHTML() div分配一个特殊类,以便单独分配另一个line-heightheight。为此,我必须将其加载到DOMDocument并使用DOMXpath并进行一些评估。

      html = '<div id="nav">';
      html.= $nav->getHTML();

      dom = new DOMDocument(); // create a DOM tree 
      xpath = new DOMXpath($d); // create a DOM Xpath tree

      // bunch of DOM querying/manipulation

      html.= '</div>';

我在想,不应该总是存储这样的东西,以便为将来需要字符串操作的请求提供更灵活的东西吗?还是我不必要地过度压力?或者也许我会以错误的方式解决这个问题,并且需要重构我的类来进行内部而不是外部的DOM查询?

编辑:根据字符数限制(我要说200),我确定ul是否会跨越多行(这是一个水平列表)后,我会添加一个特殊的从#nav项开始,然后在CSS中进行样式设计。

免责声明:我根本不想依赖JS。我知道我可以解决它,但我希望它能够立即正确呈现。

3 个答案:

答案 0 :(得分:1)

我认为,因为在这种情况下,你知道字符串会受到操纵,所以现在存储它是有道理的。如果您正在构建一个不受任何服务器端操作影响的模板或其他视图,那么您会发现自己疯狂地跟踪所有分配,其中大部分都是您永远不会触及的。

现在,对于你的实际问题,听起来你不需要的是服务器端操作,而是一些硬核CSS。这可能与风格,内容和行为分离的一般最佳实践保持一致。

答案 1 :(得分:1)

就个人而言,我不愿意在服务器端脚本中放置演示文稿详细信息(如计算line-heightheight属性)。我会尝试用CSS或(在最坏的情况下)javascript来处理它。

在你的情况下,我不太了解$nav,但是你不能在生成过程中计算line-height和其他人,而不是从源头算出来的?比方说,除了getHeight之外,还有getLineHeightgetHTML方法。

答案 2 :(得分:1)

解析生成的HTML以导出业务/呈现逻辑并不是一个好主意。 我宁愿使用另一个名为“getClass”的函数,该函数根据$ nav-&gt; getHTML()中的列表项数量或字符总数返回类。

&lt; div id =“nav”class =“&lt;?php echo $ nav-&GT; getDisplayClass();?&gt;“中&GT;

&lt;?php echo $ nav-&gt; getHTML();?&gt;

&LT; / DIV&GT;