Как сделать так, чтобы файл шаблона моего модуля отображался в Drupal 7? - PullRequest
1 голос
/ 06 августа 2011

Я чувствую, что, должно быть, я действительно близко, но я совсем не в порядке с правильным рендерингом моего первого модуля Drupal (хотя, конечно, следующий шаг - отправка и обработка формы через ajax, думаю, я не совсем из леса еще)

В любом случае, прочитав и задав несколько вопросов здесь, в стеке, про "Pro Drupal Development 7", я дошел до того, что у меня настроен модуль Drupal.

 \sites\all\modules\custom\mymodule
  ---- mymodule.info
  ---- mymodule.css
  ---- mymodule.js
  ---- mymodule.tpl
  ---- mymodule.module

Кажется, что все требования работают, чтобы модуль появился в моем списке блоков, CSS и JS видны на странице, если я выберу источник.

В целях тестирования мой файл TPL содержит следующее:

 <h1> HERE </h1>

Файл модуля (из того, что я понимаю, это место, где я пишу мою тему), имеет следующие (из того, что я собираю) ключевые функции.

function mymodule_theme($existing, $type, $theme, $path){
  return array(
    'mymodule' => array(
        'variables' => array('content' => "FOO"),
        'file'      => 'mymodule', 
        'path'      => drupal_get_path('module', 'mymodule') 
    )
  );
}

function mymodule_page(){

  $content = "";
  return theme('mymodule', $content); 
}

Я почти уверен, что у меня небольшая, относительно простая проблема - но я целый час решаюсь самостоятельно. Кто-нибудь знает ответ, что мне здесь не хватает?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 08 августа 2011

Привет всем, кто найдет это в будущем ... Как выясняется, функция, которая отображает страницу в drupal - это <modulename>_block-view содержимое этого блока - это то, что визуализируется.

function mymodule_block_view($delta = '') {
$build['mymodule'] = array(
    '#theme' => 'mymodule',
    '#title' => "FOO"
);

$block['subject'] = t('Title of second block (example_empty)');
// $block['content'] = drupal_render($build); // this was wrong
$block['content'] = $build;

return $block;

}

Я нашел пример загрузки и пошагового выполнения кода в

http://drupal.org/project/examples

специально разархивируйте и установите этот http://ftp.drupal.org/files/projects/examples-7.x-1.x-dev.zip на /sites/all/modules, и вы сможете увидеть живой пример на своем собственном сайте drupal , пока просматривает код.

примечание: ответ от NMC ниже был верным в том, что файл модуля должен был быть переименован в mymodule.tpl.php

РЕДАКТИРОВАТЬ согласно комментарию ниже, вызов drupal_render в закомментированной строке не требовался. Это работало в одной среде, но не в другой. Лучше не делать это для последовательности.

1 голос
/ 06 августа 2011

Попробуйте

function mymodule_theme($existing, $type, $theme, $path){
  return array(
    'mymodule' => array(
        'variables' => array('content' => "FOO"),
        'template'  => 'mymodule', 
    )
  );
}

и переименуйте ваш mymodule.tpl в mymodule.tpl.php

...