<?php // Здесь мы просто говорим Друпалу, что по адресу 'my_module/form' должен // выводиться результат работы функции 'my_module_form' (см. ниже), но только // если пользователь имеет права просмотра содержимого сайта ('access content'). // Особо любопытным — читать описание хука hook_menu() здесь: // http://api.drupal.ru/api/function/hook_menu function my_module_menu(){ $items = array(); $items['user'] = array( 'title' =>'My form', 'page callback' =>'my_module_form', 'access arguments' =>array('access content'), 'description' =>'My form', 'type' =>MENU_CALLBACK, ); return$items; }
// Эта функция вызывается каждый раз, когда мы посещаем страницу 'my_module/form'. // Функция генерирует и возвращает нашу форму. function my_module_form(){
// Форма конструируется при помощи функции drupal_get_form(), // в которую нам нужно передать название "функции-строителя" формы. returndrupal_get_form('my_module_my_form');
}
// Функция-строитель нашей формы. // Notice it takes one argument, the $form_state function my_module_my_form($form_state){
// Наш первый элемент формы — тестовое поле с заголовком "Name". // Обратите внимание, что 'Name' обернуто в функцию t(). Это // обеспечит дальнейший перевод слова 'Name', чтобы, например, // при включенной русской локализации поле называлось 'Имя'. $form['name'] = array( '#type' =>'textfield', '#title' =>t('Name'), ); return$form; }
Сайт летит (если создавать модуль то все норм, а если в блок...).
Первая функция для блока, я так понял, нафиг не нужна. А остальные то что?
Конкретно этот код при добавлении не работает (на сайте с модулем из примера вылетает все, без модуля просто ничего не отображается). Что-то поменять? (я плохо еще разбираюсь, увидеть не могу).
Заходил сразу как делал. Там же нет ничего про блоки
"penexe" wrote:
не понял что не отображается.
1) добавить мой код к вашему
2) зайти в блоки там должен появится новый блок My block
Спасибо, а я весь код в блок совал. Такой еще вопрос: мне надо сделать форму поиска, с помощью wiews, cck и этого блока. Создал вид с параметрами и аргументами, и при нажатии на "поиск" в этом блоке, нужно, чтобы выводился этот вид.
Вопрос: а как сделать, чтобы вид выводился в блоке для контента? Форму поиска (этот самый блок) я поставил в header
1) форма в своем модуле
- объявить блок в hook_block
- написать форму например my_module_my_form
- написать обработчик my_module_my_form_submit
-- он должен выводить и форму и результать её работы
--- как элемент в форме
--- можно даже views вызввать нужный
- в блок дописать вызов drupal_get_form('my_module_my_form') или другую логику (например только результат)
2) только views
- сделать views с exposed фильтром
Второй способ было бы намного лучше, если бы можно было делать exposed фильтр с раскрывающимися списками и чекбоксами http://umls.ru/1.jpg . А так приходится искать другое решение.
Пока разбираюсь с аргументами views, потом с заданием виеыс строки с помощью этой формы... Чую вопросов будет много
В поле есть элементы, мне его нужно сжать в 2 раза с помощью CSS. Именно поле, а не всю форму. Но в исходном коде: <fieldset>....</fieldset>. И никакого класса. Можно ли в модуле навесить на поле fieldset класс или див?
В поле есть элементы, мне его нужно сжать в 2 раза с помощью CSS. Именно поле, а не всю форму. Но в исходном коде: ..... И никакого класса. Можно ли в модуле навесить на поле fieldset класс или див?
Комментарии
<?php
drupal_get_form('my_form'); // вместо my_form, имя ф-ии определяющей форму
?>
Так и есть. Вот код:
// Здесь мы просто говорим Друпалу, что по адресу 'my_module/form' должен
// выводиться результат работы функции 'my_module_form' (см. ниже), но только
// если пользователь имеет права просмотра содержимого сайта ('access content').
// Особо любопытным — читать описание хука hook_menu() здесь:
// http://api.drupal.ru/api/function/hook_menu
function my_module_menu() {
$items = array();
$items['user'] = array(
'title' => 'My form',
'page callback' => 'my_module_form',
'access arguments' => array('access content'),
'description' => 'My form',
'type' => MENU_CALLBACK,
);
return $items;
}
// Эта функция вызывается каждый раз, когда мы посещаем страницу 'my_module/form'.
// Функция генерирует и возвращает нашу форму.
function my_module_form() {
// Форма конструируется при помощи функции drupal_get_form(),
// в которую нам нужно передать название "функции-строителя" формы.
return drupal_get_form('my_module_my_form');
}
// Функция-строитель нашей формы.
// Notice it takes one argument, the $form_state
function my_module_my_form($form_state) {
// Наш первый элемент формы — тестовое поле с заголовком "Name".
// Обратите внимание, что 'Name' обернуто в функцию t(). Это
// обеспечит дальнейший перевод слова 'Name', чтобы, например,
// при включенной русской локализации поле называлось 'Имя'.
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
);
return $form;
}
Сайт летит (если создавать модуль то все норм, а если в блок...).
Первая функция для блока, я так понял, нафиг не нужна. А остальные то что?
if ($op == 'list') {
$blocks[0]['info'] = t('My block');
return $blocks;
}
elseif ($op == 'view') {
switch ($delta) {
case 0:
$block['subject'] = t('My block');
$block['content'] = drupal_get_form('my_module_my_form');
return $block;
}
}
}
вот добавить и будет блок, тока кеш сбросить и включить
Конкретно этот код при добавлении не работает (на сайте с модулем из примера вылетает все, без модуля просто ничего не отображается). Что-то поменять? (я плохо еще разбираюсь, увидеть не могу).
не понял что не отображается.
1) добавить мой код к вашему
2) зайти в блоки там должен появится новый блок My block
digital_sword, потрудитесь зайти по ссылке
Заходил сразу как делал. Там же нет ничего про блоки
Спасибо, а я весь код в блок совал. Такой еще вопрос: мне надо сделать форму поиска, с помощью wiews, cck и этого блока. Создал вид с параметрами и аргументами, и при нажатии на "поиск" в этом блоке, нужно, чтобы выводился этот вид.
Вопрос: а как сделать, чтобы вид выводился в блоке для контента? Форму поиска (этот самый блок) я поставил в header
Ну и каша... блок, форма, зачем-то меню + views
если блок делается через views - зачем код?
1) форма в своем модуле
- объявить блок в hook_block
- написать форму например my_module_my_form
- написать обработчик my_module_my_form_submit
-- он должен выводить и форму и результать её работы
--- как элемент в форме
--- можно даже views вызввать нужный
- в блок дописать вызов drupal_get_form('my_module_my_form') или другую логику (например только результат)
2) только views
- сделать views с exposed фильтром
Второй способ было бы намного лучше, если бы можно было делать exposed фильтр с раскрывающимися списками и чекбоксами http://umls.ru/1.jpg . А так приходится искать другое решение.
Пока разбираюсь с аргументами views, потом с заданием виеыс строки с помощью этой формы... Чую вопросов будет много
Форму сделал (без стилей).
Вот код для вставки поля:
'#type' => 'fieldset',
'#title' => t('Name'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
В поле есть элементы, мне его нужно сжать в 2 раза с помощью CSS. Именно поле, а не всю форму. Но в исходном коде:
<fieldset>....</fieldset>
. И никакого класса. Можно ли в модуле навесить на поле fieldset класс или див?это не поле ,а филдсет
$form['search']['name'] = array(
'#type' => 'fieldset',
'#title' => t('Name'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#attributes' => array('class' => 'myclass'),
);
?>