Форматирование HTML-вывода функции темы - PullRequest
0 голосов
/ 21 июля 2011

Я реализовал свою собственную функцию темы (theme_my_theme_function) и внедрил hook_theme, чтобы сообщить Drupal о моей функции. Все работает правильно, и я получаю нужный вывод на странице, кроме ...

Когда я смотрю на исходный код HTML, весь код HTML, выводимый моей функцией, находится в одной длинной строке! Как получить функцию моей темы для вывода отформатированного HTML, который аккуратен и удобен для чтения?

1 Ответ

1 голос
/ 21 июля 2011

Если вы хотите, чтобы 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 для Firefox или Inspector для Chrome / Safari. У них обоих есть инструмент «Проверка элемента», который позволяет просматривать разметку страницы в удобном для просмотра, редактируемом дереве. Это бесценно для веб-разработки.

* EDIT * 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 вы можете видеть, что он просто добавляет "\ n" после

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