it-swarm.asia

شكل داخل كتلة

أستخدم 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
}
14
kristian nissen

اعتبارًا من 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() (بدون وسيطات).

15
Laxman13

رهانتي هي أن $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);
}
11
Francisco Luz