Добавление элементов формы в узел для пользовательского ввода в drupal 7 - PullRequest
3 голосов
/ 25 ноября 2011

У меня есть свой собственный тип контента, созданный в моем модуле.Имеет текстовые и графические поля.

Теперь я хочу добавить поля формы, такие как радиоблок и кнопку отправки, чтобы при визуализации узла пользователь мог внести свой вклад.Я не могу этого сделать.

1) Моя первая попытка не удалась, когда я попытался добавить радио-блок при создании своего типа контента.

simplequiz_radio11' => array(
'field_name' => 'simplequiz_radio11,
**'type'       => 'radio',**

Что я пишу в поле типа помимо текстаи изображение.Я хотел бы еще раз упомянуть, что радиоблок должен принимать пользовательский ввод, когда узел отображается не в режиме редактирования.

2) Я попытался использовать drupal_get_forms, и я могу прикрепить форму и ее элементы кузел использует drupal_get_forms, но у моего узла есть много изображений (полей), и мне нужен элемент формы для каждого изображения, поэтому использовать его таким способом нецелесообразно.Ниже мой код:

function simplequiz_node_view($node, $view_mode, $langcode)
{  
$f = drupal_get_form('simplequiz_form', $node);
$f['#weight'] = 100;
$node->content['data_collection_form'] = $f;
}

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

// Мне удалось решить эту проблему, так как моя логика была неправильной, мне нужно работать с форматером, а неполя в друпале.

function simplequiz_field_formatter_info() {
return array(

'simplequiz_example_field' => array(
  'label' => t('radio button on node'),
  'field types' => array('text'),
),
 'simplequiz_btn_field' => array(
  'label' => t('button on node'),
  'field types' => array('text'),
), 

);


}

/**
* Implements hook_field_formatter_view().
*/


function simplequiz_field_formatter_view($object_type, $object, $field, $instance,    
$langcode, $items, $display) {
switch ($display['type']) {
 case 'simplequiz_example_field':
  $element[0]['#type'] = 'markup';
  $element[0]['#markup'] = theme('simplequiz_example_field', array('value' => $items[0]   
['safe_value']));
  break;

case 'simplequiz_btn_field':
  $element[0]['#type'] = 'markup';
  $element[0]['#markup'] = theme('simplequiz_btn_field', array('value' => $items[0]  
['safe_value']));
  break;
 }
 return $element;
 }

/**
* Theme the example field.
 */
function theme_simplequiz_example_field($variables) {
return '<form><input type="radio" name="type" value="silver">Gold'
.$variables['value']. ' </br> <input type="radio" name="type" value="Gold"> Silver </br>   
</form>'

    ;
}

function theme_simplequiz_btn_field($variables) {
 return '<input type="submit" class="form-submit" value="Submit" name="op" id="edit-   
submit--2">'

    ;
}

Приветствия, Вишал

1 Ответ

0 голосов
/ 01 февраля 2012

// Мне удалось решить эту проблему, так как моя логика была неправильной, мне нужно работать с форматером, а не с полями в drupal.

function simplequiz_field_formatter_info() {
return array(

'simplequiz_example_field' => array(
  'label' => t('radio button on node'),
  'field types' => array('text'),
),
 'simplequiz_btn_field' => array(
  'label' => t('button on node'),
  'field types' => array('text'),
), 

);


}

/**
* Implements hook_field_formatter_view().
*/


function simplequiz_field_formatter_view($object_type, $object, $field, $instance,    
$langcode, $items, $display) {
switch ($display['type']) {
 case 'simplequiz_example_field':
  $element[0]['#type'] = 'markup';
  $element[0]['#markup'] = theme('simplequiz_example_field', array('value' => $items[0]   
['safe_value']));
  break;

case 'simplequiz_btn_field':
  $element[0]['#type'] = 'markup';
  $element[0]['#markup'] = theme('simplequiz_btn_field', array('value' => $items[0]  
['safe_value']));
  break;
 }
 return $element;
 }

/**
* Theme the example field.
 */
function theme_simplequiz_example_field($variables) {
return '<form><input type="radio" name="type" value="silver">Gold'
.$variables['value']. ' </br> <input type="radio" name="type" value="Gold"> Silver </br>   
</form>'

    ;
}

function theme_simplequiz_btn_field($variables) {
 return '<input type="submit" class="form-submit" value="Submit" name="op" id="edit-   
submit--2">'

    ;
}

Cheers, Вишал

...