格式化主题函数的HTML输出

时间:2011-07-20 20:33:34

标签: drupal drupal-7 drupal-theming

我已经实现了自己的主题功能(theme_my_theme_function)并实现了hook_theme来告诉Drupal我的功能。一切正常,我在页面上得到了我想要的输出,除了......

当我查看HTML源代码时,我的函数输出的所有HTML代码都在一条长线中!如何让我的主题函数输出格式简洁且易于阅读的HTML格式?

1 个答案:

答案 0 :(得分:1)

如果要格式化HTML,则在构建HTML字符串时必须自己完成。更简单的方法是使用模板文件而不是手动构建HTML字符串(请记住,PHP本质上是一种HTML模板语言)。这里有一个非常好的说明:http://drupal.org/node/165706

核心节点模块有一个很好的例子:

<强> node.module:

<?php

/**
 * Implementation of hook_theme()
 */
function node_theme() {
  return array(
    'node' => array(
      'arguments' => array('node' => NULL, 'teaser' => FALSE, 'page' => FALSE),
      'template' => 'node',
    )
  );
}

<强> node.tpl.php:

<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?> clear-block">

<?php print $picture ?>

<?php if (!$page): ?>
  <h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>

  <div class="meta">
  <?php if ($submitted): ?>
    <span class="submitted"><?php print $submitted ?></span>
  <?php endif; ?>

  <?php if ($terms): ?>
    <div class="terms terms-inline"><?php print $terms ?></div>
  <?php endif;?>
  </div>

  <div class="content">
    <?php print $content ?>
  </div>

  <?php print $links; ?>
</div>

可能还有一种方法可以将HTMLTidy集成到Drupal中,以便在输出之前“美化”标记,但我自己从未这样做过。

最终,我会高度建议不要担心HTML输出的格式。相反,使用Firebug for Firefox或Inspector for Chrome / Safari。它们都有一个“Inspect Element”工具,可以让你在一个漂亮的可浏览,可编辑的树中查看页面的标记。它对于Web开发非常宝贵。

*的 修改 * theme_item_list对HTML输出进行最小格式化。以下是theme_item_list

生成的列表示例
<div class="item-list"><ul><li class="first">1</li> 
<li>2</li> 
<li>3</li> 
<li class="last">4</li> 
</ul></div>

theme_item_list的代码中,您可以看到它只是在&lt; li&gt;之后添加了一个“\ n”:

$output .= '<li' . drupal_attributes($attributes) . '>' . $data . "</li>\n";