কোনও ফর্ম উপাদানটির ডিভ র‍্যাপারে শ্রেণি পরিবর্তন করুন


11

ফর্ম এপি ব্যবহার করে কোনও শ্রেণি ফর্ম র‌্যাপারে (ডিভের) যুক্ত করার বা পরিবর্তন করার উপায় আছে কি?

নাকি থিম ফাংশনটি দিয়েই এটি সম্পন্ন হয়েছে?

তা হলে কোন থিম ফাংশনটি এটি পরিবর্তন করতে ব্যবহৃত হয়?


আমি নিশ্চিত যে এটি একটি থিম ফাংশন। কোন থিম ফাংশনটি ব্যবহার করবেন তা প্রশ্ন। :)
আকালটা

আহ তুমি ঠিক আছে।
ক্রিসজলি

আমি মনে করি আপনি ক্লাস সংজ্ঞায়িত করতে # মানিবদ্ধ কীটিও ব্যবহার করতে পারেন
মিকা এ।

@ মিকা এ। এটি কেবলমাত্র <ইনপুট> ট্যাগের ক্ষেত্রে প্রযোজ্য যা আমি মোড়কের শ্রেণি (একটি <ডিভি>) পরিবর্তন করতে চাই।
ক্রিসজলি

উত্তর:


5

আপনি theme_form_element()যদি বিশ্বব্যাপী সেগুলি পরিবর্তন করতে চান তবে আপনি সাধারণত ওভাররাইড করতে পারেন। আপনি যদি কেবল একটি নির্দিষ্ট ফর্ম উপাদানটি পরিবর্তন করতে আগ্রহী হন তবে আমি বেশ কয়েকটি পছন্দ সম্পর্কে অবগত।

  1. আপনার আগ্রহী নির্দিষ্ট ধরণের ফর্ম উপাদানগুলির জন্য আপনি একটি নতুন থিম ফাংশনটি নিবন্ধন করতে পারেন (যেমন টেক্সটফিল্ড)। তাহলে আপনি এই থিম ফাংশন তৈরি (মূল উপর ভিত্তি করে, যেমন। theme_textfield()) কিন্তু যে কল করে না theme('form_element', ...)শেষে (আপনি পারেন উভয় মোড়কের এবং এক থিম ফাংশনে উপাদান হ্যান্ডেল করতে পারে, অথবা আপনি একটি পৃথক মোড়কের থিম ফাংশন বানাতে পারে এবং এটি ব্যবহার করুন)। অবশেষে আপনি #themeএকটি নির্দিষ্ট ফর্ম উপাদানগুলিতে একটি সম্পত্তি যুক্ত করুন এবং সেই উপাদানটি আপনার কাস্টম থেরিংটি পাবে।

  2. আপনি এমন একটি টেম্পলেট ফাইল তৈরি করতে পারেন form_element.tpl.phpযার সুনির্দিষ্টভাবে এর ডিফল্ট আচরণ থাকে theme_form_element()এবং তারপরে hook_preprocess_form_element()কোনও টেম্পলেট পরামর্শ যুক্ত করতে ব্যবহার করতে পারেন। তারপরে আপনি নতুন টেম্পলেটটি তৈরি করুন যা পরামর্শের সাথে মেলে। আপনি প্রায়শই লোকেদের উল্লেখ করতে শুনতে পান যে টেম্পলেটগুলি ফাংশনগুলির তুলনায় কিছুটা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ব্যবহৃত theme আমি অবশ্য এর জন্য কখনও কোনও পরিমাপ করি নি। এছাড়াও, পরামর্শটি তৈরি করতে আপনার প্রিপ্রোসেস পর্যায়ে পর্যাপ্ত প্রসঙ্গ থাকতে হবে।


আপনি একটি উদাহরণ দিতে পারেন?
ক্রিশ্জলি

@ ক্রিসজে.লি আপনি কি সমস্ত উপাদানগুলিতে মোড়ক বদলাতে চান, বা কেবল একটি নির্দিষ্ট?
অ্যান্ডি

শুধু একটি এক।
খ্রিস্টলি

@ chrisjlee আমি উত্তর আপডেট করেছি।
অ্যান্ডি

4

আমি জানি এটি একটি অতি পুরানো থ্রেড, তবে আমি কীভাবে ফর্ম উপাদানগুলিকে পরিবর্তন করতে এবং ক্লাস যুক্ত করতে শিখছি। আমি একটি কাস্টম মডিউল তৈরির কাছাকাছি পেয়েছি:

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>';
}

এটি একটি ভাল বিকল্প সমাধান - মোড়ক ডিভের জন্য কোনও শ্রেণি যুক্ত করবেন না, কেবল নিজের ডিভিতে মোড়ক ডিভটিকে আবৃত করুন এবং তারা আপনি যা চান ক্লাস প্রয়োগ করতে পারবেন।
ফেলিক্স ইভ

3

"মোড়ক" পরিবর্তন করতে আপনাকে ফর্ম_সিলিমে ওভাররাইড করতে হবে। মূলত সমস্ত ফর্ম উপাদান form_element থিম theme_form_element($element,$value);(form.inc ফাইল) এর সাথে রেন্ডার হয়

সুতরাং কীভাবে এটি আপনার ফর্মের উপাদানগুলি রেন্ডার করে তা পরিবর্তন করতে আপনি কেবল সেই টেম্পলেটটি আপনার টেম্পলেট.এফপি ফোল্ডারে অনুলিপি করে এতে নাম পরিবর্তন করে: phptemplate_form_element($element,$value)

এখন আপনি যে কোনও পরিবর্তন করতে পারেন এবং সেগুলি মূল ফাংশনের পরিবর্তে ব্যবহৃত হবে

  1. theme_form_element($element,$value);Form.inc থেকে অনুলিপি করুন
  2. এটি (আপনার থিম) টেম্পলেট.এফপিতে আটকান
  3. এটির নামকরণ করুন: phptemplate_form_element($element,$value)
  4. সমস্ত থিম ক্যাশে সাফ করুন
  5. আপনি যা চান পরিবর্তন করুন এবং সেগুলি ব্যবহৃত হবে।

1

আপনি wrapper_attributes সম্পত্তি ব্যবহার করতে পারেন ।

$form['example'] = [
  '#type' => 'textfield',
  '#title' => $this->t('Example'),
  '#wrapper_attributes' => ['class' => ['wrapper-class']],
];

এই উত্তরটি আমাকে সহায়তা করেছিল, তবে নোট করুন যে এটি দ্রুপাল ৮.x এবং তার পরে বিশেষত প্রযোজ্য।
মার্টিন

0

গুরুত্বপূর্ণভাবে, থিম_ফর্ম_এলিমেন্ট কেবল প্রত্যক্ষ পিতামাতার মোড়ক ডিভ সংশোধন করবে এবং এটি সিএসএস প্রভাবগুলির জন্য লক্ষ্যযুক্ত লক্ষ্য নাও হতে পারে।

[যদিও প্রোগ্রামিমেটিক নয়, যদি কেউ কোনও নোড ফিল্ডের শীর্ষ-র‌্যাপারে (কেবল এটি র‍্যাপারের, র‍্যাপারের, র‌্যাপারের) ক্লাস প্রয়োগ করতে চায় তবে আমি ধারণা করতে পারি যে কোনও নির্দিষ্ট সামগ্রীর ধরণের জন্য "ক্ষেত্রগুলি পরিচালনা করুন" নির্বাচন করে "ফিল্ড গ্রুপ" মডিউলটি ব্যবহার করতে পারেন এবং একটি সাধারণ ডিআইভি হিসাবে "নতুন গ্রুপ যুক্ত করুন" নির্বাচন করুন। তারপরে লেবেলটি মুছে ফেলা যায় এবং অতিরিক্ত মোড়কের জন্য পছন্দসই ক্লাসগুলি বরাদ্দ করা যেতে পারে (তবে এখন আমাদের কাছে আরও বেশি মোড়ক রয়েছে - সীমাহীন নেস্টিং সহ]]


0

আপনি ব্যবহার করতে পারেন

'#prefix' => '<div class="new_class">', '#suffix' => '</div>'

এবং এটি এটি প্রায় আবৃত হবে


0

মোড়কের বৈশিষ্ট্যগুলি কনফিগারযোগ্য করুন!

আপনার থিমটিতে আপনার নিজস্ব ফর্ম-উপাদান থিম ফাংশন তৈরি করুন ... 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';
}

0

এমন কেস রয়েছে যেগুলি পছন্দসই ফলাফল দেয় না #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">

-1
<?php
    $form['#attributes'] = array('class' => 'your-class-name');
?> 

আপনি ফর্ম উপাদানটিতে একটি শ্রেণি যুক্ত করতে উপরের উপায়টি ব্যবহার করতে পারেন।


6
তাহলে আপনি কীভাবে ডিভের ক্লাসটি সংশোধন করবেন? উপরের কোডটি <ইনপুট /> ট্যাগের শ্রেণি পরিবর্তন করে।
ক্রিসজলি

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