1. Главная
  2. Блоги
  3. Блог aleshaboy

Мой первый модуль. (новичок)

Главные вкладки

Всем привет. Сижу 2 день и не могу понять как правильно сделать вот такую задачу (точнее понять):
Если я пишу такой код ->

<?php function title_menu() {
$items['admin/structure/title'] = array(
'title' => 'Title node',
'description' => 'text',
'page callback' => 'drupal_get_form',
'access arguments' => array('administer site configuration'),
'type' => MENU_NORMAL_ITEM,
);

return

$items;
}

function

title_form(){
$form['title_add'] = array(
'#title' => t('TEST FORM'),
'#type' => 'textfield',
'#description' => t('Please enter'),
);
return
$form;
}
?>

То страница "рисуется" как надо (рис.1png)

А если я чуть меняю:

<?php function title_menu() {
$items['admin/structure/title'] = array(
'title' => 'Title node',
'description' => 'text',
'page callback' => 'my_func',
'access arguments' => array('administer site configuration'),
'type' => MENU_NORMAL_ITEM,
);

return

$items;
}

function

my_func(){
echo
'Hello World';
}
?>

То получится как на рис.2

Куда исчезает эта, так сказать "обертка" ? как на рис.1

Как правильно "оформлять" или точнее получить такую страницу (рис.3) что я например влево получил заголовки node, вправо содержимое.

Спасибо.

ВложениеРазмер
Иконка изображения 1.png 6.3 КБ
Иконка изображения 2.png 13.84 КБ
Иконка изображения 3.png 8.32 КБ

Комментарии

Аватар пользователя graker graker 19 февраля 2014 в 11:55

В первом примере, во-первых, пропущен элемент page arguments, но это наверно просто забыли вставить.
Во-вторых, page callback должен не выводить что-то через echo, а возвращать значение (за исключением случаев когда нужно вывести JSON или что-то еще без "обертки"). Этим значением должен быть либо готовый HTML, либо render array. Соответственно, надо не echo 'Hello World'; а return 'Hello World'; - тогда "обертка" появится.
Ну и в третьих, задача, приведенная на рис. 3, вообще не требует написания своего модуля, кроме, разве что, учебных целей.

Аватар пользователя aleshaboy aleshaboy 19 февраля 2014 в 17:23

graker wrote:
В первом примере, во-первых, пропущен элемент page arguments, но это наверно просто забыли вставить.
Во-вторых, page callback должен не выводить что-то через echo, а возвращать значение (за исключением случаев когда нужно вывести JSON или что-то еще без "обертки"). Этим значением должен быть либо готовый HTML, либо render array. Соответственно, надо не echo 'Hello World'; а return 'Hello World'; - тогда "обертка" появится.
Ну и в третьих, задача, приведенная на рис. 3, вообще не требует написания своего модуля, кроме, разве что, учебных целей.

А можно чуть по подробнее про "готовый HTML" и про render array? Просто смотрю у многих модулей на ихних страницах, текст и всякие кнопки, формы находятся в отдельных "блоках". Это делается через как Вы сказали "готовый HTML" или через какой то hook_block_region_pomesti_mne_block_vpravo ? Biggrin

Спасибо Smile

Аватар пользователя graker graker 19 февраля 2014 в 18:08

Это делается по-разному. Самый простой способ узнать, как это сделано в каком-то модуле - заглянуть в его код и посмотреть, как сделано там.

Quote:
А можно чуть по подробнее про "готовый HTML" и про render array?

Нет смысла отвечать на этот вопрос подробнее: за ответом последует еще пять таких же вопросов. Вы не научитесь программировать под Друпал раньше, чем прочитаете документацию по программированию под Друпал. Документация по hook_menu(). Документация по render arrays. Документация, с которой нужно начинать.

Аватар пользователя aleshaboy aleshaboy 19 февраля 2014 в 21:21

graker wrote:
Это делается по-разному. Самый простой способ узнать, как это сделано в каком-то модуле - заглянуть в его код и посмотреть, как сделано там.
Quote:
А можно чуть по подробнее про "готовый HTML" и про render array?

Нет смысла отвечать на этот вопрос подробнее: за ответом последует еще пять таких же вопросов. Вы не научитесь программировать под Друпал раньше, чем прочитаете документацию по программированию под Друпал. Документация по hook_menu(). Документация по render arrays. Документация, с которой нужно начинать.

Спасибо. Буду читать.

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /