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

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

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

Всем привет. Сижу 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.png6.3 КБ
Иконка изображения 2.png13.84 КБ
Иконка изображения 3.png8.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. Документация, с которой нужно начинать.

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