是否可以在drupal 7模块的验证或提交功能中添加其他表单元素?以下代码有效,图像显示在表单上:
function test1_form($form, &$form_state)
{
$form['image']=array(
'#markup'=>'<img src="sites/all/modules/create_ad/th.jpeg"><br/>', //replace with your own image path
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
}
但是当我尝试在提交函数中提交后显示图像,如下所示,它不起作用:
function test1_form($form, &$form_state)
{
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
}
function test1_form_submit($form,&$form_state)
{
$form['image']=array(
'#markup'=>'<img src="sites/all/modules/create_ad/th.jpeg"><br/>', //replace with your own image path
);
}
欢迎任何积极的帮助。感谢。
答案 0 :(得分:8)
您可以按照多步骤表单方法在提交后向表单添加其他字段。
Here is a blog post讨论了一个多步骤的方法,可以给你一些见解。
基本上,在提交功能中,您可以存储值并设置要重建的表单。然后在表单函数中检查这些存储的值并添加新字段(如果存在)。
示例:
<?php
function test1_form($form, &$form_state)
{
if (isset($form_state['storage']['show-image'])){
$form['image']=array(
'#markup'=>'<img src="sites/all/modules/create_ad/th.jpeg"><br/>', //replace with your own image path
);
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
}
function test1_form_submit($form,&$form_state)
{
$form_state['rebuild'] = TRUE;
$form_state['storage']['show-image'] = true;
}
答案 1 :(得分:0)
以下是使用Ajax执行此操作的另一种方法。这样您就不会重新加载任何页面,因为只有图像将被加载到带有包装ID的div中。
以下是代码:
function test_menu()
{
$items = array();
$items['test'] = array(
'title' => 'test',
'page callback' => 'drupal_get_form',
'page arguments' => array('test1_form'),
'access callback' => array(TRUE),
'type' => MENU_CALLBACK,
);
return $items;
}
function test1_form($form, &$form_state)
{
$form['submit'] = array(
'#type' => 'button',
'#value' => t('Submit'),
'#name' => 'add',
'#ajax' => array(
'callback' => 'ajax_load_picture_callback',
'wrapper' => 'wrapper',
'method' => 'replace',
'effect' => 'fade',
),
);
$form['image'] = array(
'#markup' => '',
'#prefix' => '<div id="wrapper">',
'#suffix' => '</div>',
);
if (array_key_exists('triggering_element', $form_state) &&
array_key_exists('#name', $form_state['triggering_element']) &&
$form_state['triggering_element']['#name'] == 'add')
{
$form['image']['#markup'] ='<img src="themes/bartik/logo.png"><br/>'; //replace with your own image path
}
return $form;
}
function ajax_load_picture_callback($form, $form_state)
{
return $form['image'];
}
function test1_form_submit($form, &$form_state)
{
}