Помогите пожалуста, кно-нибудь, объсните как создать свою форму, сидел на api.Drupal.org не просек как это делается. Посдкажите как хотябы в ноду вывести обычную кнопку Button или чекбокс, какой код в какие файлы прописать, чтобы заработало?
Всем, конечно, спасибо. 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; }
Не работает, наверняка я поступил по нубски)), но пока лучше ни чего не придумал((. Поэтому вопрос все тот же как ззаставить вывестись простой элемент формы?
Уже коечто вывел, наконецто. Создал свой модуль, ну как свой, коечто убрал из готового, подкоректировал таблицу: http://api.drupal.ru/api/file/developer/examples/node_example.module/6/s... , но уже хоть чтото, правда не понимаю как он прописывается в списке контента, котрый можно создать, может кто-нибудь поможет разобраться?
Вообщем ладно форму создавать научился, а теперь как сделать так, чтоб поля созданные этой формой, были доступны во views, например я делаю вид списка и указываю какие поля нужно вывести.??
Ну для начала, данные введенные в форме в эти поля надо где то хранить (имеется ввиду БД), перекрыть hook_nodeapi ...
у вюьса тоже есть свой API ...
Проще всего взять любой модуль - доп поля которого показываются из views , и посмотреть как сделано там (например CCK или node_images)
Сделал то, что хотел, пошел другим путем. Взял текстовое поле в ССК и в его исходнике добавил что надо, пару новых реквизитов, и теперь работает: прямо при добавлении нового текстового поля указываю нужные мне параметры(типа длины поля) и выводится то что надо. Ну и естественно эти поля доступны во views,отлично. Теперь бы надо все таки научиться это сделать с помощью хуков с нуля.
hook_form_alter (как и остальные alter в 6ке) нужны для изменения чужих форм(объектов)
hook_nodeapi нужен для перехвата операций, которые происходят с нодой - обычно добавление каких-либо своих действий
А можете привести пример использования hook_form_alter, чтобы ,например, у поля созданного с помощью ССК изменить size к примеру на 20. Скока пробую не получается, потомучто даже не знаю наверняка правильно делаю или нет. Спасибо.
<?php ... print_r('<pre>'.$form.'</pre>'); // ну или даже так drupal_set_message(print_r('<pre>'.$form.'</pre>',1)); ... ?>
Вам будет выдан массив с полной структуой переданной формы, а так как $form передается по ссылке, то вы вполне можете изменить любой из его параметров,
например
$form['my_field']['#size'] = 20;
Размер поля (значение #size) не изменяется, или при выводе на экран не меняется ? Если второе , то скорее всего дело в темизации, вполне возможно, что например полую в css назначено width: 100%
Это да, в CSS я знаю там так и написано, но когда добавить '<div class="container-inline">''</div>', то размер то начинает меняться. Чтобы менять длину поля я в исходнике текстового поля добавил новый атрибут size и заключил это поле в div, который написан выше, т. е. при создание нового текстового поля теперь просто вводишь там размер, сохраняешь и поле той длины которую указал, но только это мне кажется как то неправильно, а в формальтере не работает такое.
Все вроде пока разобрался. Появился другой вопрос: как названия полей выровнять по левому краю, а сами поля - по правому, видимо нужно рассовать их в таблицу, но как? и как узнать id формы?
Вот блин глюки. У меня этот пост пустой. И ниодного ответа. Добавляю, ошибка... Добавляю, ошибка... Добавляю, а тут уже куча ответов в том числе и мой.
)) Спасибо. но то мне не подходит. Есть еще другой вопрос:
в форм_алтере для CCK поля устанавливаю размер, а он не в какую не меняется, почему? Хотя он конечно поменяется если перед этим заново тип определить:
$form['field_testpole1_0']['#type'] ="textfield"; $form['field_testpole1_0']['#size'] = 10; /*
так размер поменяется, но выводится ошибка, вообщем не работает;
а если сделать просто так, то размер не изменится:
*/ $form['field_testpole1_0']['#size'] = 10;
Как в форм_алтере изменять размер, чтобы все без ошибок было?
Комментарии
надо сначало понять как делается сам модуль а уже потом на основе его делать форму
сначала зайди сюда, а потом тебе скорее всего понадобится hook_nodeapi и и всякие form api
всякие form api
Всем, конечно, спасибо. Player, прочитал твою статью http://www.drupal.ru/node/10035, вроде с горем по полам в коде разобрался, а если хочется вывести все тот же чекбокс, то как надо поступить? пробовал вставить код:
$form['copy'] = array(
'#type' => 'checkbox',
'#title' => t('Send me a copy.'),
);
return $form;
}
Не работает, наверняка я поступил по нубски)), но пока лучше ни чего не придумал((. Поэтому вопрос все тот же как ззаставить вывестись простой элемент формы?
Уже коечто вывел, наконецто. Создал свой модуль, ну как свой, коечто убрал из готового, подкоректировал таблицу: http://api.drupal.ru/api/file/developer/examples/node_example.module/6/s... , но уже хоть чтото, правда не понимаю как он прописывается в списке контента, котрый можно создать, может кто-нибудь поможет разобраться?
Вообщем ладно форму создавать научился, а теперь как сделать так, чтоб поля созданные этой формой, были доступны во views, например я делаю вид списка и указываю какие поля нужно вывести.??
Ну для начала, данные введенные в форме в эти поля надо где то хранить (имеется ввиду БД), перекрыть hook_nodeapi ...
у вюьса тоже есть свой API ...
Проще всего взять любой модуль - доп поля которого показываются из views , и посмотреть как сделано там (например CCK или node_images)
Сделал то, что хотел, пошел другим путем. Взял текстовое поле в ССК и в его исходнике добавил что надо, пару новых реквизитов, и теперь работает: прямо при добавлении нового текстового поля указываю нужные мне параметры(типа длины поля) и выводится то что надо. Ну и естественно эти поля доступны во views,отлично. Теперь бы надо все таки научиться это сделать с помощью хуков с нуля.
По views http://drupal.org/node/99561
по формам
- если вы делаете форму для ноды (расширяете её) читать здесь
- если любые свои формы то Быстрое введение в Forms API и делее
hook_form_alter (как и остальные alter в 6ке) нужны для изменения чужих форм(объектов)
hook_nodeapi нужен для перехвата операций, которые происходят с нодой - обычно добавление каких-либо своих действий
А можете привести пример использования hook_form_alter, чтобы ,например, у поля созданного с помощью ССК изменить size к примеру на 20. Скока пробую не получается, потомучто даже не знаю наверняка правильно делаю или нет. Спасибо.
в hook_form_alter вставте
<?php
...
print_r('<pre>'.$form.'</pre>');
// ну или даже так drupal_set_message(print_r('<pre>'.$form.'</pre>',1));
...
?>
Вам будет выдан массив с полной структуой переданной формы, а так как $form передается по ссылке, то вы вполне можете изменить любой из его параметров,
например
$form['my_field']['#size'] = 20;
У меня сейчас написано так:
$form['pole']['#size'] = 50;
}
где pole это числовое поле, после этого оно должно стать длиной 50, как я понимаю, но оно какой длины было по умолчанию, такой и остается(
Кэшь не включен ? попробуйте почитсить, и попробуйте все-жеи посмотреть чтто выдает print_r, до и после присваивания.
ничего не происходит.
Хотя почему то у заголовка меняет, при условии если добавлю туда вот это:
$form['field_pole']['#suffix'] = '</div>';
Может потомучто заголовок у меня не ССК поле?
У созданных ССК вес меняется префиксы работают, а вот размер не в какую не меняется.
Размер поля (значение #size) не изменяется, или при выводе на экран не меняется ? Если второе , то скорее всего дело в темизации, вполне возможно, что например полую в css назначено width: 100%
Это да, в CSS я знаю там так и написано, но когда добавить
'<div class="container-inline">' '</div>'
, то размер то начинает меняться. Чтобы менять длину поля я в исходнике текстового поля добавил новый атрибут size и заключил это поле в div, который написан выше, т. е. при создание нового текстового поля теперь просто вводишь там размер, сохраняешь и поле той длины которую указал, но только это мне кажется как то неправильно, а в формальтере не работает такое.Все вроде пока разобрался. Появился другой вопрос: как названия полей выровнять по левому краю, а сами поля - по правому, видимо нужно рассовать их в таблицу, но как? и как узнать id формы?
Все с id формы разобрался оказывается все есть в print_r. Но вот с таблицей не разобрался
зачем в таблицу? сделай блоками
начните с этого http://drupal.ru/node/10035
начните с этого http://drupal.ru/node/10035
почитай пока http://drupal.ru/node/10035
Вот блин глюки. У меня этот пост пустой. И ниодного ответа. Добавляю, ошибка... Добавляю, ошибка... Добавляю, а тут уже куча ответов в том числе и мой.
)) Спасибо. но то мне не подходит. Есть еще другой вопрос:
в форм_алтере для CCK поля устанавливаю размер, а он не в какую не меняется, почему? Хотя он конечно поменяется если перед этим заново тип определить:
$form['field_testpole1_0']['#size'] = 10;
/*
так размер поменяется, но выводится ошибка, вообщем не работает;
а если сделать просто так, то размер не изменится:
*/
$form['field_testpole1_0']['#size'] = 10;
Как в форм_алтере изменять размер, чтобы все без ошибок было?
А что за ошибка?
вот она:
warning: preg_match() expects parameter 2 to be string, array given in Z:\home\drupal5\www\includes\bootstrap.inc on line 670.
попробуйте
<?php
$form['field_testpole1_0']=array('#type' =>textfield','#size'=>10,);
?>
нет, не помогло, пошел другим путем в исходнике текстового поля указываю нужные #size.
Все разобрался, Всем спасибо. Я просто не доглядел в
print_r($form['field_name]);
print '</pre>';
Поздравте теперь могу создать любую форму, хоть при помощи модуля хоть при помощи шаблона форм. И выводить вроде теперь тоже могу как хочу еееее)))