Вопрос разбирающимся в API

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

Комментарии

Аватар пользователя digital_sword digital_sword 15 февраля 2009 в 22:12

Так и есть. Вот код:

<?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(),
  // в которую нам нужно передать название "функции-строителя" формы.
  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;
}

Сайт летит (если создавать модуль то все норм, а если в блок...).
Первая функция для блока, я так понял, нафиг не нужна. А остальные то что?

Аватар пользователя penexe penexe 15 февраля 2009 в 22:24
function my_module_block($op = 'list', $delta = 0, $edit = array()) {
  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;        
    }
  }
}

вот добавить и будет блок, тока кеш сбросить и включить

Аватар пользователя digital_sword digital_sword 15 февраля 2009 в 22:44

Конкретно этот код при добавлении не работает (на сайте с модулем из примера вылетает все, без модуля просто ничего не отображается). Что-то поменять? (я плохо еще разбираюсь, увидеть не могу).

Аватар пользователя penexe penexe 15 февраля 2009 в 22:51

не понял что не отображается.
1) добавить мой код к вашему
2) зайти в блоки там должен появится новый блок My block

Аватар пользователя digital_sword digital_sword 16 февраля 2009 в 8:33

"beerman" wrote:
digital_sword, потрудитесь зайти по ссылке

Заходил сразу как делал. Там же нет ничего про блоки

"penexe" wrote:
не понял что не отображается.
1) добавить мой код к вашему
2) зайти в блоки там должен появится новый блок My block

Спасибо, а я весь код в блок совал. Такой еще вопрос: мне надо сделать форму поиска, с помощью wiews, cck и этого блока. Создал вид с параметрами и аргументами, и при нажатии на "поиск" в этом блоке, нужно, чтобы выводился этот вид.

Вопрос: а как сделать, чтобы вид выводился в блоке для контента? Форму поиска (этот самый блок) я поставил в header

Аватар пользователя andypost@drupal.org andypost@drupal.org 16 февраля 2009 в 9:45

Ну и каша... блок, форма, зачем-то меню + 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 фильтром

Аватар пользователя digital_sword digital_sword 16 февраля 2009 в 11:23

Второй способ было бы намного лучше, если бы можно было делать exposed фильтр с раскрывающимися списками и чекбоксами http://umls.ru/1.jpg . А так приходится искать другое решение.
Пока разбираюсь с аргументами views, потом с заданием виеыс строки с помощью этой формы... Чую вопросов будет много

Аватар пользователя digital_sword digital_sword 16 февраля 2009 в 16:02

Форму сделал (без стилей).
Вот код для вставки поля:

$form['search']['name'] = array(
    '#type' => 'fieldset',
    '#title' => t('Name'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
  );

В поле есть элементы, мне его нужно сжать в 2 раза с помощью CSS. Именно поле, а не всю форму. Но в исходном коде:  <fieldset>....</fieldset>. И никакого класса. Можно ли в модуле навесить на поле fieldset класс или див?

Аватар пользователя penexe penexe 16 февраля 2009 в 18:38

"digital_sword" wrote:
В поле есть элементы, мне его нужно сжать в 2 раза с помощью CSS. Именно поле, а не всю форму. Но в исходном коде: ..... И никакого класса. Можно ли в модуле навесить на поле fieldset класс или див?

это не поле ,а филдсет

<?php
$form['search']['name'] = array(
    '#type' => 'fieldset',
    '#title' => t('Name'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#attributes' => array('class' => 'myclass'),
  );
?>