أستخدم drupal_get_form('event_signup_form')
لتضمين النموذج المخصص داخل كتلة. يتم تقديم النموذج على النحو المنشود ، ولكن تقديم النموذج لا يؤدي إلى أي شيء.
تسمى دالة النموذج نفسها event_signup_form($form, &$form_state)
وتسمى وظيفة الإرسال event_signup_form_submit($form, &$form_state)
ولكن لا يتم استدعاؤها.
أنا أستخدم hook_block_view لإظهار النموذج:
function event_block_view($delta = '') {
$blocks = array();
if ($delta ...) {
$blocks['content'] = drupal_render(drupal_get_form('event_signup_form'));
}
}
تمكنت من الحصول على هذا العمل - إليك كيفية (كعب):
function hook_block_view($delta = '') {
$blocks['content'] = drupal_render(drupal_get_form('event_signup_form'));
}
function event_signup_form() {
// Register form submit handler, same goes for validation handler
$form['#submit'][] = 'event_signup_form_submit';
return $form;
}
function event_signup_form_submit($form, &$form_state) {
// This is now triggered
}
اعتبارًا من Drupal 7، drupal_get_form () تُرجع مصفوفة تقديم بدلاً من سلسلة ، لذا حاول استخدام:
drupal_render(drupal_get_form('event_signup_form'));
لتضمين النموذج في الكتلة. للحصول على معلومات ، راجع القسم drupal_get_form () يعرض مصفوفة تقديم بدلاً من سلسلة في المقالة تحويل وحدات 6.x إلى 7.x
أيضًا ، أعتقد أن وظيفتك event_signup_form($form, &$form_state)
يجب أن تكون فقط event_signup_form()
(بدون وسيطات).
رهانتي هي أن $form['#submit'][] = 'event_signup_form_submit';
هو الجاني. يمكنك تعيين ذلك فقط إذا كنت تريد معالج إرسال إضافي.
هذا رمز عينة عامل.
<?php
/**
* Implements hook_block_info().
*/
function MYMODULE_block_info() {
$blocks = array();
$blocks['MYBLOCK'] = array(
'info' => t('My block'),
'cache' => DRUPAL_NO_CACHE,
);
return $blocks;
}
/**
* Implements hook_block_view().
*/
function MYMODULE_block_view($delta = '') {
$block = array();
switch ($delta) {
case 'MYBLOCK':
$block['subject'] = t('My block title');
$block['content'] = drupal_get_form('MYFORM_form');
break;
}
return $block;
}
/**
* Custom form.
*/
function MYFORM_form($form, &$form_state) {
$form['MYFIELD'] = array(
'#type' => 'textfield',
'#title' => t('Some Field'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit Button'),
);
return $form;
}
/**
* Custom form submit function.
*/
function MYFORM_form_submit($form, &$form_state) {
// You need the have Devel module enabled for dpm() to work.
dpm($form_state);
}