Создание формы

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

Аватар пользователя Stein Stein 3 июня 2008 в 23:43

Помогите пожалуста, кно-нибудь, объсните как создать свою форму, сидел на api.Drupal.org не просек как это делается. Посдкажите как хотябы в ноду вывести обычную кнопку Button или чекбокс, какой код в какие файлы прописать, чтобы заработало?

Комментарии

Аватар пользователя Stein Stein 4 июня 2008 в 14:34

Всем, конечно, спасибо. Player, прочитал твою статью http://www.drupal.ru/node/10035, вроде с горем по полам в коде разобрался, а если хочется вывести все тот же чекбокс, то как надо поступить? пробовал вставить код:

function onthisdate_form(&$node, &$param) {
$form['copy'] = array(
  '#type' => 'checkbox',
  '#title' => t('Send me a copy.'),
);
  return $form;
}

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

Аватар пользователя Stein Stein 4 июня 2008 в 19:26

Уже коечто вывел, наконецто. Создал свой модуль, ну как свой, коечто убрал из готового, подкоректировал таблицу: http://api.drupal.ru/api/file/developer/examples/node_example.module/6/s... , но уже хоть чтото, правда не понимаю как он прописывается в списке контента, котрый можно создать, может кто-нибудь поможет разобраться?

Аватар пользователя player player 5 июня 2008 в 12:03

Quote:
правда не понимаю как он прописывается в списке контента, котрый можно создать, может кто-нибудь поможет разобраться?
если хочешь добавить свою форму используй hook_form_alter

Аватар пользователя Stein Stein 6 июня 2008 в 15:40

Вообщем ладно форму создавать научился, а теперь как сделать так, чтоб поля созданные этой формой, были доступны во views, например я делаю вид списка и указываю какие поля нужно вывести.??

Аватар пользователя olk olk 6 июня 2008 в 16:13

Ну для начала, данные введенные в форме в эти поля надо где то хранить (имеется ввиду БД), перекрыть hook_nodeapi ...
у вюьса тоже есть свой API ...
Проще всего взять любой модуль - доп поля которого показываются из views , и посмотреть как сделано там (например CCK или node_images)

Аватар пользователя Stein Stein 12 июня 2008 в 12:29

Сделал то, что хотел, пошел другим путем. Взял текстовое поле в ССК и в его исходнике добавил что надо, пару новых реквизитов, и теперь работает: прямо при добавлении нового текстового поля указываю нужные мне параметры(типа длины поля) и выводится то что надо. Ну и естественно эти поля доступны во views,отлично. Теперь бы надо все таки научиться это сделать с помощью хуков с нуля.

Аватар пользователя andypost@drupal.org andypost@drupal.org 12 июня 2008 в 16:44

По views http://drupal.org/node/99561

по формам
- если вы делаете форму для ноды (расширяете её) читать здесь
- если любые свои формы то Быстрое введение в Forms API и делее

hook_form_alter (как и остальные alter в 6ке) нужны для изменения чужих форм(объектов)
hook_nodeapi нужен для перехвата операций, которые происходят с нодой - обычно добавление каких-либо своих действий

Аватар пользователя Stein Stein 25 июня 2008 в 10:45

А можете привести пример использования hook_form_alter, чтобы ,например, у поля созданного с помощью ССК изменить size к примеру на 20. Скока пробую не получается, потомучто даже не знаю наверняка правильно делаю или нет. Спасибо.

Аватар пользователя olk olk 25 июня 2008 в 11:00

в hook_form_alter вставте

<?php
...
print_r('<pre>'.$form.'</pre>');
// ну или даже так drupal_set_message(print_r('<pre>'.$form.'</pre>',1));
...
?>

Вам будет выдан массив с полной структуой переданной формы, а так как $form передается по ссылке, то вы вполне можете изменить любой из его параметров,
например
$form['my_field']['#size'] = 20;

Аватар пользователя Stein Stein 25 июня 2008 в 11:40

У меня сейчас написано так:

function node_example_form_alter($form_id, &$form) {
$form['pole']['#size'] = 50;
}

где pole это числовое поле, после этого оно должно стать длиной 50, как я понимаю, но оно какой длины было по умолчанию, такой и остается(

Аватар пользователя olk olk 25 июня 2008 в 11:53

Кэшь не включен ? попробуйте почитсить, и попробуйте все-жеи посмотреть чтто выдает print_r, до и после присваивания.

Аватар пользователя Stein Stein 25 июня 2008 в 12:14

ничего не происходит.
Хотя почему то у заголовка меняет, при условии если добавлю туда вот это:

$form['field_pole']['#prefix'] = '<div class="container-inline">';
$form['field_pole']['#suffix'] = '</div>';

Может потомучто заголовок у меня не ССК поле?
У созданных ССК вес меняется префиксы работают, а вот размер не в какую не меняется.

Аватар пользователя olk olk 25 июня 2008 в 12:16

Размер поля (значение #size) не изменяется, или при выводе на экран не меняется ? Если второе , то скорее всего дело в темизации, вполне возможно, что например полую в css назначено width: 100%

Аватар пользователя Stein Stein 25 июня 2008 в 12:35

Это да, в CSS я знаю там так и написано, но когда добавить '<div class="container-inline">' '</div>', то размер то начинает меняться. Чтобы менять длину поля я в исходнике текстового поля добавил новый атрибут size и заключил это поле в div, который написан выше, т. е. при создание нового текстового поля теперь просто вводишь там размер, сохраняешь и поле той длины которую указал, но только это мне кажется как то неправильно, а в формальтере не работает такое.

Аватар пользователя Stein Stein 25 июня 2008 в 14:13

Все вроде пока разобрался. Появился другой вопрос: как названия полей выровнять по левому краю, а сами поля - по правому, видимо нужно рассовать их в таблицу, но как? и как узнать id формы?

Аватар пользователя player player 26 июня 2008 в 22:04

Вот блин глюки. У меня этот пост пустой. И ниодного ответа. Добавляю, ошибка... Добавляю, ошибка... Добавляю, а тут уже куча ответов в том числе и мой.

Аватар пользователя Stein Stein 27 июня 2008 в 10:39

)) Спасибо. но то мне не подходит. Есть еще другой вопрос:
в форм_алтере для CCK поля устанавливаю размер, а он не в какую не меняется, почему? Хотя он конечно поменяется если перед этим заново тип определить:

$form['field_testpole1_0']['#type'] ="textfield";
$form['field_testpole1_0']['#size'] = 10;
/*
так размер поменяется, но выводится ошибка, вообщем не работает;
а если сделать просто так, то размер не изменится:
*/

$form['field_testpole1_0']['#size'] = 10;

Как в форм_алтере изменять размер, чтобы все без ошибок было?

Аватар пользователя Stein Stein 1 июля 2008 в 10:05

Все разобрался, Всем спасибо. Я просто не доглядел в

print '<pre>';
print_r($form['field_name]);
print '
</pre>';

Поздравте теперь могу создать любую форму, хоть при помощи модуля хоть при помощи шаблона форм. И выводить вроде теперь тоже могу как хочу еееее)))