from ফর্ম উপাদানগুলি প্রদর্শন থেকে বাদ দিতে হবে?


20

আমি form_alter বা একটি টেম্পলেট ফাইল ব্যবহার করে ফর্মের নির্দিষ্ট উপাদানগুলিকে আড়াল করতে চাই। আমি কোথাও পড়েছি যে ড্রুপাল 7 এ, আমরা $ ফর্ম উপাদানগুলি নির্দিষ্ট করতে পারি যাতে এটি ফর্মটিতে প্রদর্শিত হয় না, তবে আমি মনে করতে পারি না! আনসেট করা হয়নি () তবে অন্য কিছু ফাংশন!

উত্তর:


29

unset()ফর্মগুলির জন্য ব্যবহার করা ভাল সমাধান নয় (যেমন আমি মনে করি আপনি জানেন), হ্যান্ডলারগুলি কীভাবে জমা দেওয়া / যাচাই করতে হবে তা আপনি কখনই জানেন না যে তারা যখন প্রক্রিয়াজাত হয় তখন আনসেট উপাদানটি উপস্থিত থাকতে পারে be এটি অযাচিত ত্রুটি বাড়ে।

ফর্ম উপাদানকে 'আড়াল' করতে আপনি নিরাপদে তিনটি পদ্ধতি ব্যবহার করতে পারেন

  • '#type' => 'value'উপাদানটিতে ব্যবহার করুন, যার ফলে এই প্রভাবটি পড়বে যে উপাদানটির মানটি এখনও তার যথারীতি #valueহিসাবে জমা / বৈধতা ফাংশনগুলিতে প্রেরণ করা হবে । এটি আমার পছন্দের পদ্ধতি।
  • '#access' => FALSEএটি স্ক্রিনে আউটপুট করা উচিত নয় বোঝাতে উপাদানটিতে ব্যবহার করুন।
  • ব্যবহারের '#type' => 'hidden'বার্ট হিসাবে প্রস্তাব করেছেন (যদিও এই ব্যবহারের আপনার ব্যবহার কেস উপর নির্ভর করে; আমি যদি আপনাকে যা করতে একটি ফর্ম উপাদান এর মান গোপন করবে না একটি লুকানো ইনপুট হিসাবে আকারে এটি আউটপুট করতে চান চেষ্টা করছেন কল্পনা)।

ভুলে গেছেন আড়াল ()
ইউসুফ

2
@ জিলিভেনটি hide()ফর্ম উপাদানগুলিতে ব্যবহার করা উচিত নয়, এটি সহজেই পুরো ফর্ম জমা দেওয়ার প্রক্রিয়াটিকে বিশৃঙ্খলা করতে পারে কারণ উপাদানগুলির বৈধতা এখনও চালানো হয়। উদাহরণস্বরূপ, আপনি যদি hide($form['title']);নোড ফর্মটিতে থাকেন তবে শিরোনাম ক্ষেত্রটি প্রয়োজনীয় হওয়ায় আপনি ফর্মটি জমা দিতে পারবেন না, তবে কোনও মান সরবরাহ করা হবে না। উপরের 3 টি পদ্ধতি ব্যবহার করার জন্য সর্বোত্তম পদ্ধতি:
ক্লাইভ

@ ক্লাইভ ধন্যবাদ, আমি উপরের পদ্ধতিগুলি জানি, আমার প্রশ্নটি হাইড সম্পর্কিত কিছু ছিল () আমি মনে করি (এখনও ফাংশনটি মনে করতে পারি না) .. যাইহোক দয়া করে আমার উত্তরটি প্রথম উত্তরটিতে উল্লেখ করুন, কেন drupal_render($form['base']['prices']['sell_price'])কাজ করছেন না?
Serjas

ফর্মটি সংশোধন করে এমন কোনও টেম্পলেট ফাইলে কোডটি কি? যদি তা না হয় তবে এটি কাজ না করার কারণটি হ'ল আপনি যখন স্ক্রিনে কোনও রেন্ডার উপাদানকে মুদ্রণ করতে পারবেন তখন আপনি drupal_render()কোনও ফর্ম ট্যাগ / টোকেন / ইত্যাদি পাবেন না। আপনি যদি পুরো $formঅ্যারে আউটপুট না করেন
ক্লাইভ

আমি হুক থিম এবং মুদ্রণ_আর ($ ফর্ম) এবং এমনকি ড্রুপাল_রেন্ডার ($ ফর্ম ['শিরোনাম']) ব্যবহার করছে, সমস্যাটি উল্লম্ব ট্যাবগুলির নিচে থাকা উপাদানগুলি!
সার্জাস

4

আপনি যদি কোনও টেম্পলেট ফাইল ব্যবহার করেন তবে আপনি লুকান () ব্যবহার করে জিনিসগুলি আড়াল করতে পারেন ।

আপনি একটি ফর্ম উপাদান আড়াল করতে চান hook_form_alter, unset()আপনার সেরা বিকল্প হতে পারে।

যদি এটি কেবল কোনও মান সঞ্চয় করতে হয় তবে আপনি '# টাইপ' => 'লুকানো'ও ব্যবহার করতে পারেন ।


এলিমেন্টের বিলুপ্তির জন্য হাইড করা ভাল পদ্ধতি।
ইউসুফ

আমি যা অর্জনের চেষ্টা করছিলাম সেটি ছিল একটি কাস্টম উবারসার্ট পণ্য নোড ফর্ম, আমি যা প্রদর্শন করতে চেয়েছিলাম তা হ'ল বিক্রয়_প্রাইস, এবং শিপিং, ওজন ইত্যাদির মতো অন্যান্য উপাদানগুলি লুকাতে drupal_render($form['base']['prices']['sell_price'])হবে তবে ফর্মটি প্রদর্শিত হবে, তবে এটি সংরক্ষণ করছে না!
সার্জাস

4

আমি খুঁজে পেয়েছি # অ্যাক্সেস থেকে অ্যাক্সেস ব্যবহার করে কিছু বোতাম জমা দিতে পারে যদি জমা বোতামে বা অনুরূপ ব্যবহার হয়। এই ক্ষেত্রে আমি উপাদানগুলি লুকানোর জন্য কেবল CSS ব্যবহার করেছি:

$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';

ঠিক অন্য একটি বিকল্প।

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