Всем привет. Сижу 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, вправо содержимое.
Спасибо.
Комментарии
В первом примере, во-первых, пропущен элемент 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 ?
Спасибо
Это делается по-разному. Самый простой способ узнать, как это сделано в каком-то модуле - заглянуть в его код и посмотреть, как сделано там.
Нет смысла отвечать на этот вопрос подробнее: за ответом последует еще пять таких же вопросов. Вы не научитесь программировать под Друпал раньше, чем прочитаете документацию по программированию под Друпал. Документация по hook_menu(). Документация по render arrays. Документация, с которой нужно начинать.
Спасибо. Буду читать.