ফর্ম এপি ব্যবহার করে কোনও শ্রেণি ফর্ম র্যাপারে (ডিভের) যুক্ত করার বা পরিবর্তন করার উপায় আছে কি?
নাকি থিম ফাংশনটি দিয়েই এটি সম্পন্ন হয়েছে?
তা হলে কোন থিম ফাংশনটি এটি পরিবর্তন করতে ব্যবহৃত হয়?
ফর্ম এপি ব্যবহার করে কোনও শ্রেণি ফর্ম র্যাপারে (ডিভের) যুক্ত করার বা পরিবর্তন করার উপায় আছে কি?
নাকি থিম ফাংশনটি দিয়েই এটি সম্পন্ন হয়েছে?
তা হলে কোন থিম ফাংশনটি এটি পরিবর্তন করতে ব্যবহৃত হয়?
উত্তর:
আপনি theme_form_element()
যদি বিশ্বব্যাপী সেগুলি পরিবর্তন করতে চান তবে আপনি সাধারণত ওভাররাইড করতে পারেন। আপনি যদি কেবল একটি নির্দিষ্ট ফর্ম উপাদানটি পরিবর্তন করতে আগ্রহী হন তবে আমি বেশ কয়েকটি পছন্দ সম্পর্কে অবগত।
আপনার আগ্রহী নির্দিষ্ট ধরণের ফর্ম উপাদানগুলির জন্য আপনি একটি নতুন থিম ফাংশনটি নিবন্ধন করতে পারেন (যেমন টেক্সটফিল্ড)। তাহলে আপনি এই থিম ফাংশন তৈরি (মূল উপর ভিত্তি করে, যেমন। theme_textfield()
) কিন্তু যে কল করে না theme('form_element', ...)
শেষে (আপনি পারেন উভয় মোড়কের এবং এক থিম ফাংশনে উপাদান হ্যান্ডেল করতে পারে, অথবা আপনি একটি পৃথক মোড়কের থিম ফাংশন বানাতে পারে এবং এটি ব্যবহার করুন)। অবশেষে আপনি #theme
একটি নির্দিষ্ট ফর্ম উপাদানগুলিতে একটি সম্পত্তি যুক্ত করুন এবং সেই উপাদানটি আপনার কাস্টম থেরিংটি পাবে।
আপনি এমন একটি টেম্পলেট ফাইল তৈরি করতে পারেন form_element.tpl.php
যার সুনির্দিষ্টভাবে এর ডিফল্ট আচরণ থাকে theme_form_element()
এবং তারপরে hook_preprocess_form_element()
কোনও টেম্পলেট পরামর্শ যুক্ত করতে ব্যবহার করতে পারেন। তারপরে আপনি নতুন টেম্পলেটটি তৈরি করুন যা পরামর্শের সাথে মেলে। আপনি প্রায়শই লোকেদের উল্লেখ করতে শুনতে পান যে টেম্পলেটগুলি ফাংশনগুলির তুলনায় কিছুটা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ব্যবহৃত theme আমি অবশ্য এর জন্য কখনও কোনও পরিমাপ করি নি। এছাড়াও, পরামর্শটি তৈরি করতে আপনার প্রিপ্রোসেস পর্যায়ে পর্যাপ্ত প্রসঙ্গ থাকতে হবে।
আমি জানি এটি একটি অতি পুরানো থ্রেড, তবে আমি কীভাবে ফর্ম উপাদানগুলিকে পরিবর্তন করতে এবং ক্লাস যুক্ত করতে শিখছি। আমি একটি কাস্টম মডিউল তৈরির কাছাকাছি পেয়েছি:
function yourtheme_custom_form_alter(&$form, &$form_state, $form_id) {
case'webform_number_whatever':
_yourtheme_form_add_wrapper($form['submitted']['yourfieldhere'], array('form-field-some-style', 'not-label', 'whatever-other-styles-you-want'));
break;
}
function _yourtheme_form_add_wrapper(&$element, $classes = array(), $type = array('form-item', 'form-type-textfield'), $removeTitle = FALSE){
$element['#prefix'] = '<div class="' . implode(" ", $classes) . '"><div class="' . implode(" ", $type) . '">';
$element['#suffix'] = '</div></div>';
}
"মোড়ক" পরিবর্তন করতে আপনাকে ফর্ম_সিলিমে ওভাররাইড করতে হবে। মূলত সমস্ত ফর্ম উপাদান form_element থিম theme_form_element($element,$value);
(form.inc ফাইল) এর সাথে রেন্ডার হয়
সুতরাং কীভাবে এটি আপনার ফর্মের উপাদানগুলি রেন্ডার করে তা পরিবর্তন করতে আপনি কেবল সেই টেম্পলেটটি আপনার টেম্পলেট.এফপি ফোল্ডারে অনুলিপি করে এতে নাম পরিবর্তন করে: phptemplate_form_element($element,$value)
এখন আপনি যে কোনও পরিবর্তন করতে পারেন এবং সেগুলি মূল ফাংশনের পরিবর্তে ব্যবহৃত হবে
theme_form_element($element,$value);
Form.inc থেকে অনুলিপি করুনphptemplate_form_element($element,$value)
আপনি wrapper_attributes সম্পত্তি ব্যবহার করতে পারেন ।
$form['example'] = [
'#type' => 'textfield',
'#title' => $this->t('Example'),
'#wrapper_attributes' => ['class' => ['wrapper-class']],
];
গুরুত্বপূর্ণভাবে, থিম_ফর্ম_এলিমেন্ট কেবল প্রত্যক্ষ পিতামাতার মোড়ক ডিভ সংশোধন করবে এবং এটি সিএসএস প্রভাবগুলির জন্য লক্ষ্যযুক্ত লক্ষ্য নাও হতে পারে।
[যদিও প্রোগ্রামিমেটিক নয়, যদি কেউ কোনও নোড ফিল্ডের শীর্ষ-র্যাপারে (কেবল এটি র্যাপারের, র্যাপারের, র্যাপারের) ক্লাস প্রয়োগ করতে চায় তবে আমি ধারণা করতে পারি যে কোনও নির্দিষ্ট সামগ্রীর ধরণের জন্য "ক্ষেত্রগুলি পরিচালনা করুন" নির্বাচন করে "ফিল্ড গ্রুপ" মডিউলটি ব্যবহার করতে পারেন এবং একটি সাধারণ ডিআইভি হিসাবে "নতুন গ্রুপ যুক্ত করুন" নির্বাচন করুন। তারপরে লেবেলটি মুছে ফেলা যায় এবং অতিরিক্ত মোড়কের জন্য পছন্দসই ক্লাসগুলি বরাদ্দ করা যেতে পারে (তবে এখন আমাদের কাছে আরও বেশি মোড়ক রয়েছে - সীমাহীন নেস্টিং সহ]]
মোড়কের বৈশিষ্ট্যগুলি কনফিগারযোগ্য করুন!
আপনার থিমটিতে আপনার নিজস্ব ফর্ম-উপাদান থিম ফাংশন তৈরি করুন ...
sites/all/themes/MY_THEME/theme/form-element.theme.inc
function my_theme_form_element($variables) {
$element = &$variables['element'];
$attributes = isset($element['#my_theme_wrapper_attributes']) ?
$element['#my_theme_wrapper_attributes'] : array();
...
$output = '<div' . drupal_attributes($attributes) . '>' . "\n";
...
}
তারপরে আপনি এই জাতীয় জিনিসগুলি করতে পারেন ...
function my_module_form_alter(&$form, &$form_state, $form_id) {
$form['account']['mail']['#my_theme_wrapper_attributes']['class'][] = 'form-field--inline';
}
এমন কেস রয়েছে যেগুলি পছন্দসই ফলাফল দেয় না #prefix/#suffix
বা #attributes => array('class')
দেয় না। আমার বিশেষ কেস একটি পরিচালিত_ফায়াল উপাদানটির চারপাশে এজাক্স-র্যাপার ডিভিতে একটি ক্লাস যুক্ত করছে। #prefix/#suffix
একটি নতুন ধারক তৈরি করে এবং #attributes/'class'
বাইরেরতম নয়, একটি অভ্যন্তরের উপাদানটির শ্রেণি সংশোধন করে।
সাধারণ বাইরেরতম ডিভটি ঠিক
<div id="edit-doc1--XX-ajax-wrapper">
যা সিএসএসে লক্ষ্য করা শক্ত। আমি লক্ষ্য করতে পারি [id^="edit-doc"]
বা [id$="-ajax-wrapper"]
এই উভয়টিকেই আমি চেয়েছিলাম এমন উপাদানগুলির চেয়ে বেশি লক্ষ্য করতে পারি।
আমি যে সমাধানটি নিয়ে এসেছি তা হ'ল ফর্মটিতে একটি #process
উপাদান যুক্ত করা এবং ম্যানুয়ালি উপাদানটির কোডটি ম্যানিপুলেট করা। এখানে #process
ফর্ম আইটেমের ঘোষণায় যুক্ত বৈশিষ্ট্যটি রয়েছে:
$form['doc1'] = array(
'#type' => 'managed_file',
'#process' => array('mymodule_managed_file_process'),
);
এবং এখানে mymodule_managed_file_process()
ফাংশন:
function mymodule_managed_file_process($element, &$form_state, $form) {
// Call the original function to perform its processing.
$element = file_managed_file_process($element, $form_state, $form);
// Add our own class for theming.
$element['#prefix'] = str_replace(
'id=',
'class="managed-file-wrapper" id=',
$element['#prefix']
);
return $element;
}
স্ট্রিং বিকল্পের উপর নির্ভর করা খুব পোর্টেবল নয়, তাই str_replace
আপনার নিজের ঝুঁকিতে ব্যবহার করুন । এই কোডটি তবে প্রয়োজনীয় ক্লাস যুক্ত করতে সত্যই বহিরাগত ডিআইভি পরিবর্তন করে:
<div class="managed-file-wrapper" id="edit-doc1--XX-ajax-wrapper">
<?php
$form['#attributes'] = array('class' => 'your-class-name');
?>
আপনি ফর্ম উপাদানটিতে একটি শ্রেণি যুক্ত করতে উপরের উপায়টি ব্যবহার করতে পারেন।