Вызвать и включить отдельный .php из обратного вызова для drupal 6 страницы - PullRequest
1 голос
/ 06 апреля 2011

Я новичок в Drupal (v6) и PHP, и я пытаюсь реализовать некоторый контент через пользовательский модуль.Я следовал руководству и выяснил, как сделать так, чтобы Drupal знал о моем модуле, и даже зарегистрировал URL для моей пользовательской страницы.Он отображается в навигации, как я и предполагал - пока все хорошо.

Это отлично подходит для моего игрушечного примера ... но менее хорошо для страниц, которые я на самом деле намереваюсь написать.Прямо сейчас у меня есть это:

function twtevents_menu() {

  $items = array();

  $items['gingerbread'] = array(
    'title' => 'Gingerbread Gallery',
    'page callback' => 'twtevents_gallery_gingerbread',
    'access arguments' => array('access twtevents content'),
    'type' => MENU_NORMAL_ITEM
  );

  return $items;
}

function twtevents_gallery_gingerbread() {
  // content variable that will be returned for display
  $page_content = '';

  $page_content = '<p>'.  t("Some super-cool content") .'</p>';

  return $page_content;
}

Но я не хочу писать большую сложную страницу в стиле $page_content = '<p>'. t("Some super-cool content") .'</p>'; - и так далее.

Я хочучтобы написать фактическую страницу в стиле, более близком к этому:

<div class="comment<?php print ($comment->new) ? ' comment-new' : ''; print ' '. $status ?> clear-block">
  <?php print $picture ?>

  <?php if ($comment->new): ?>
    <span class="new"><?php print $new ?></span>
  <?php endif; ?>

  <h3><?php print $title ?></h3>

</div>

Где php-код добавляется в разметку HTML, а не наоборот.

Из моей функции я могу вызвать include($path) успешно, но (конечно) этот подход просто помещает вывод моей страницы в верхний левый корнет броузера ... Мне нужно отправить вывод отдельной страницы как возвращение моей функции обратного вызова.

Есть ли для этого функция PHP?Функция Drupal?Лучшие практики?

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Чтобы использовать файл пользовательского шаблона в модуле, вы должны предоставить реализацию hook_theme.Ниже приведен пример модуля advanced forum .

function advanced_forum_theme() {
  // ...
  $items['advanced_forum_topic_header'] = array(
      'template' => 'advanced_forum-topic-header',
      'arguments' => array(
        'node' => NULL,
        'comment_count' => NULL,
        )
  );
  // ...
  return $items;
}

Вот как вызывается ловушка:

  // Build the topic header
  $variables['topic_header'] = theme('advanced_forum_topic_header',
                                      $variables['node'],
                                      $variables['comment_count']);

Файл шаблона, содержащий макет:advanced_forum-topic-header.tpl.php.

Некоторые ссылки для более подробной информации: "Использование hook_theme для стилизации вывода модуля" , описание hook_theme для Drupal 6 .

1 голос
/ 06 апреля 2011

Как говорит Книганаполке, вы хотите, чтобы реализация темы ловушек вызывала шаблон;

Что-то вроде;

function twtevents_theme(){
    return array(
        'template' => 'twtevents_gallery_gingerbread',
        'arguments' => array()
    ); }

Затем поместите код вашего шаблона в файл twtevents_gallery_gingerbread.tpl.php в папке вашего модуля.

Затем обновите обратный вызов вашей страницы, чтобы вызвать функцию темы следующим образом;

function twtevents_gallery_gingerbread(){
    return theme('twtevents_gallery_gingerbread');
}

Теперь вот важный бит - как только вы добавили ловушку темы в свой модуль, вы должны очистить кеш Drupal, иначе он не найдет ваш новый шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...