একটি ব্লকের মধ্যে ফর্ম


14

আমি drupal_get_form('event_signup_form')আমার কাস্টম ফর্মটি একটি ব্লকের ভিতরে এম্বেড করতে ব্যবহার করছি । ফর্মটি উদ্দেশ্য হিসাবে রেন্ডার করা হচ্ছে, তবে ফর্মটি জমা দেওয়ার ফলে কিছুই ঘটছে না।

ফর্ম ফাংশন নিজেই বলা হয় event_signup_form($form, &$form_state)এবং জমা ফাংশন বলা হয় event_signup_form_submit($form, &$form_state)কিন্তু এটি কল করা হচ্ছে না।

আমি ফর্মটি দেখানোর জন্য হুক_ব্লক_ভিউ ব্যবহার করছি :

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
}

উত্তর:


15

ড্রুপাল of হিসাবে, ড্রুপাল_জেট_ফর্ম () স্ট্রিংয়ের পরিবর্তে একটি রেন্ডার অ্যারে প্রদান করে, তাই ব্যবহার করে দেখুন:

drupal_render(drupal_get_form('event_signup_form'));

ব্লকে ফর্মটি এম্বেড করতে। তথ্যের জন্য দেখুন বিভাগটি ড্রুপাল_জেট_ফর্ম () 6..x মডিউলকে x.x রূপান্তর করে নিবন্ধে স্ট্রিংয়ের পরিবর্তে একটি রেন্ডার অ্যারে প্রদান করে

এছাড়াও, আমি বিশ্বাস করি আপনার ফাংশনটি event_signup_form($form, &$form_state)কেবল event_signup_form()(তর্ক ছাড়াই) হওয়া উচিত ।


তবে হুক_ব্লক_ভিউয়ের মধ্যে থেকে ($ ডেল্টা = '') api.drupal.org/api/drupal/modules-- block-- block.api.php/… আমি একটি অ্যারে ফিরিয়ে দিচ্ছি, আমি কিছুই প্রিন্ট করছি না।
ক্রিশ্চিয়ান নিসসেন

4
আমি একটি সরঞ্জাম তৈরি করেছি যা ব্লক কোড তৈরি করে যা আপনি আপনার মডিউলে রাখতে পারেন: ব্রাউজ- টিউটোরিয়ালস
টলস

@ ক্রিশ্চিয়ান ঠিক আছে, আপনি আপনার প্রশ্নে সম্পাদিত কোডটি দিয়ে কাজ করে?
লক্ষ্মণ 13

হ্যাঁ আমি এটি কাজ করার ব্যবস্থা করেছিলাম, আমি প্রশ্নের একটি আপডেট যুক্ত করব
ক্রিশ্চিয়ান নিসসেন

এটি সম্পাদিত প্রশ্নের জন্য (সাজানোর) কাজ করতে পারে, তবে কোনও ব্লকের মধ্যে ওয়ার্কিং ফর্ম রাখার সঠিক উপায় নয় । আপনি একটি রেন্ডার অ্যারে চান, স্ট্রিং নয়। আপনার পক্ষেও যুক্তি থাকতে হবে (ফর্ম এপিআই দ্বারা নির্ধারিত হিসাবে) hook_form()। সঠিক উত্তরের জন্য ফ্রান্সিসকো লুজের উত্তর দেখুন।
ফ্রি র‌্যাডিকাল

11

আমার বাজি হ'ল $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);
}

1
একটি দুর্দান্ত উদাহরণ!
leymannx

1
দুর্দান্ত উদাহরণ। আমার কাস্টম ফর্ম জমা দেওয়ার দরকার পড়েনি, তবে প্রথম দুটি ফাংশন আমার কাস্টম ফর্মটিকে একটি ব্লকে রেখেছিল, যা এই পৃষ্ঠাটি খুঁজে পাওয়ার পরে আমি যা খুঁজছিলাম। ধন্যবাদ।
মিলিলেভ

আমি মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ফ্রি র‌্যাডিকাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.