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


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.