আমার ফর্মটি থিম হিসাবে থিমযুক্ত কেন সঠিকভাবে ডেটা পোস্ট করছে না, বা সঠিকভাবে প্রদর্শন করছে না?


10

আমি অ্যাডমিনে একটি ফর্ম তৈরি করেছি।

$form['things'] = array(
  '#prefix' => '<div id="things">',
  '#suffix' => '</div>',
  '#tree' => TRUE,
  '#theme' => 'table',
  '#header' => array(t('Field Label'), t('Field Name'), t('Location'), t('Stuff')),
  '#rows' => array(),
);

আমি তারপরে প্রতিটি সারিটি এতে যুক্ত করব:

foreach ($type_fields as $field_name => $attrs) {
  $stuff = array(
    '#type' => 'textfield',
    '#default_value' => $attrs['stuff'],
  );

$form['things']['#rows'][] = array(
  array('data' => 'label'),
  array('data' => $field_name),
  array('data' => $field_name),
  array('data' => $stuff),
);

}

ফর্মটি দুর্দান্ত দেখাচ্ছে! তবে প্রথম সমস্যাটি হ'ল নির্ধারিত মানটি #default_valueফর্মটিতে প্রদর্শিত হচ্ছে না। যখন আমি এটিকে #valueসঠিক মানটিতে পরিবর্তন করি তখন দেখায়। সুতরাং আমি ভাবছি কীভাবে এটি করা উচিত? Drupal এর ডকুমেন্টেশন বলেছেন #valueফর্ম যদিও এটি ঠিক কিভাবে আমি এটা ফাংশন আশা কাজ হয় সঙ্গে ব্যবহার করা উচিত নয়।

মূল সমস্যাটি হ'ল আমি যখন কোনও পাঠ্যক্ষেত্রের মধ্যে কিছু পরীক্ষার ডেটা পূরণ করি এবং তা জমা দেই: আমি আমার _submitফাংশনে জমা দেওয়া কোনও মান দেখি না।

আমরাও $formনা $form_stateপাঠ্য ক্ষেত্রের মধ্যে মান আমি ইনপুটের কোনো রয়েছে।

আমি ভাবছি কারণ আমি যদি রেন্ডার করছি কেন #theme => "table"? কেউ কি এই ইস্যুতে দৌড়ে গেছে? আমি যে পরিবর্তনগুলি করতে পারি তার কোনও আইডিয়াস আমাকে _submitফাংশনে ফর্মটি পোস্ট করার সময় যে মানগুলি ইনপুট করছি তা দেখার অনুমতি দিতে পারে?

উত্তর:


13

সমস্যাটি হ'ল আপনার পাঠ্যক্ষেত্রের উপাদানগুলি #rowsআপনার রেন্ডারে অ্যারের সম্পত্তিটির নীচে অবস্থিত ।

দ্রুপাল যে কোনও অ্যারের কীটি #প্রপার্টি / অ্যাট্রিবিউট হিসাবে দেখায় এবং কোনও অ্যারে কী তার সাথে শুরু হয় না এমন উপাদান হিসাবে যা পুনরাবৃত্তভাবে অংশ নেওয়া প্রয়োজন। যেমন আপনি যে শিশুদের অধীনে #rowsএসেছেন তাদের ফর্ম নির্মাতা দ্বারা উপেক্ষা করা হবে।

যেহেতু theme_tableঅ্যারের রেন্ডার চলবে, আপনার ফর্ম উপাদানের হবে আসলে পর্দায় আউট রেন্ডার করা, কিন্তু ফর্ম মূল্যবোধের কোন জ্ঞান নেই পাবেন (যেমন তারা টেকনিক্যালি ফর্মের সন্তান নয়)।

আমার অভিজ্ঞতায় এই ধরণের জিনিসটি করার সর্বোত্তম উপায় হ'ল উপাদানটিতে একটি নির্দিষ্ট থিম ফাংশন ব্যবহার করা:

function MYMODULE_theme() {
  return array(
    'MYMODULE_textfield_table' => array(
      'render element' => 'element'
    )
  );
}

function theme_MYMODULE_textfield_table($vars) {
  $element = $vars['element'];

  $rows = array();
  foreach (element_children($element) as $key) {
    $rows[] = array(
      array('data' => 'label'),
      array('data' => $element[$key]['#extra_data']['field_name']),
      array('data' => $element[$key]['#extra_data']['field_name']),
      array('data' => render($element[$key]))
    );
  }

  $header = array(t('Field Label'), t('Field Name'), t('Location'), t('Stuff'));
  return theme('table', array('header' => $header, 'rows' => $rows));
}

তারপরে আপনার ফর্ম ফাংশনে আপনি নীচের মতো কোড ব্যবহার করবেন

$form['things'] = array(
  '#prefix' => '<div id="things">',
  '#suffix' => '</div>',
  '#tree' => TRUE,
  '#theme' => 'MYMODULE_textfield_table'
);

foreach ($type_fields as $field_name => $attrs) {
  $form['things'][] = array(
    '#type' => 'textfield',
    '#default_value' => $attrs['stuff'],
    '#extra_data' => array('field_name' => $field_name)
  );
}

এর পরে আপনার পাঠ্য ক্ষেত্রগুলি ফর্মটিতে নিবন্ধিত হওয়া উচিত এবং আপনি $form_stateঅ্যারেতে মানটি স্বাভাবিক হিসাবে দেখতে পারা উচিত ।


আপনার সহায়ক উত্তরের জন্য আপনাকে ধন্যবাদ। 1 ক্যোয়ারী: কীভাবে আমার একক পৃষ্ঠায় 1000 ফলাফলগুলি পৃষ্ঠার 50 টি ফলাফল এবং পরবর্তী পৃষ্ঠার জন্য পেজারে সীমাবদ্ধ করবেন? এটি দিয়ে থিম ('পেজার') রেন্ডার করতে আমার সমস্যা হচ্ছে।
হিমাংশু পাঠক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.