সমস্ত ড্রুপাল ফর্মগুলিতে HTML5 স্থানধারক যুক্ত করা hold


22

আমি আমার ওয়েবসাইট জুড়ে সমস্ত পাঠ্যক্ষেত্রের মধ্যে স্থানধারক বৈশিষ্ট্য যুক্ত করার চেষ্টা করছি, তবে আমার ভাগ্য নেই।

আমি একটি মডিউল তৈরি করেছি যা ওভাররাইড করে hook_form_alter

function mymodule_form_alter(&$form, &$form_state, $form_id)
{
    foreach ($form as $key => $value) {
        if ("textfield" == $value["#type"]){
            $value['#attributes']["placeholder"] = t($value["#title"]);
        }
    }
}

আমার আপনাকে বলা উচিত যে আমি ওয়েবফর্ম মডিউলটিও ব্যবহার করছি।

উত্তর:


14

যেহেতু আমি ওয়েবফর্ম মডিউলটি ব্যবহার করছি আমি কেবলমাত্র বিশ্বব্যাপী ওয়েবফর্ম টেম্পলেট (ওয়েবফর্ম-ফর্ম.tpl.php) থিম করতে এবং এটি আমার থিম ফোল্ডারে রাখতে পারি। কোনও মডিউল দিয়ে জিনিসগুলিকে জটিল করার দরকার নেই।

foreach ($form["submitted"] as $key => $value) {
    if ("textfield" == $value["#type"]) {
        $form["submitted"][$key]['#attributes']["placeholder"] = t($value["#title"]);
    } 
}

আমি এটি টেম্পলেট ফাইলের শীর্ষে রেখেছি।


3
পূর্বাঞ্চ লুপটি করার সময় এটি কিছু "অপরিজ্ঞাত সূচক" ত্রুটি তৈরি করতে পারে, সূচীটি সেট করা আছে কিনা তা পরীক্ষা করে দেখুন ()
মাত্তিও

10

এটিকে সামান্য পরিবর্তন করুন ....

function mymodule_form_alter(&$form, &$form_state, $form_id)
{
    foreach ($form as $key => $value) {
        if ("textfield" == $value["#type"]){
            $form[$key]['#attributes']["placeholder"] = t($value["#title"]);
        }
    }
}

$value ফোরচ স্কোপ এ মান প্রকার নয় একটি রেফারেন্স।


সম্পাদনা করুন:

আমি কেবল নিম্নলিখিত কোডটি নিয়ে পরীক্ষা-নিরীক্ষা করেছি এবং পাঠ্যক্ষেত্রগুলির বৈশিষ্ট্যগুলি সম্পাদনা করার জন্য আমি ফর্মটির পুনরাবৃত্তভাবে পুনরাবৃত্তি করতে সক্ষম হয়েছি।

function add_placeholder(&$form){
    foreach($form as $key => $val){
        if(substr($key,0,1) == '#' && $form[$key] == 'textfield'){
            $form['#attributes'] = array('placeholder' => t('some text'));
        }else if(is_array($form[$key])){
            add_placeholder($form[$key]);
        }
    }
}

আপনার সাহায্যের জন্য ধন্যবাদ! যে আমার নিজের এটি করা উচিত। কারণ এটি আমার আসল সমস্যাটির সমাধান করছে না আমি আপনাকে সঠিক উত্তর দিয়ে পুরস্কার দিতে পারি না।
জোসুয়া পেদারসেন

4

আপনি সম্ভবত এটি করতে পারে সঙ্গে hook_form_alterবা hook_form_FORM_ID_alterএবং যোগ "স্থানধারক" অ্যাট্রিবিউট

উদাহরণস্বরূপ, অরক্ষিত, তবে এর মতো কিছু:

/**
 * Implements hook_form_FORM_ID_alter
 */
function mymodule_form_webform_client_form_12_alter(&$form, &$form_state) {
  drupal_set_message('<pre>'.print_r($form,1).'</pre>'); // debug form
  $form['submitted']['my_form_component']['#attributes'] = array('placeholder' => 'placeholder 1');
}

ফাংশন নামের form_idজন্য সঠিক ফর্ম আইডি পেতে নাম দেওয়া ওয়েবফর্ম এইচটিএমএলে লুকানো ফর্ম উপাদানটি সন্ধান করুন form_alter


আমি কি এই জন্য মডিউল করতে হবে?

1
আপনি একটি মডিউল করতে পারেন বা সেট করতে পারেন আপনার থিমের টেম্পলেট.পিএইচপিতে, টেমপ্লেটের মেশিনের নামে মাইমডিউল পরিবর্তন করে।
mariomc

এই কোডটি কি ডি 6 এর জন্যও কাজ করবে?
বালা

4

জোসুয়া পেদারসনের কোডের জন্য আরও ভাল পদ্ধতির:

foreach ($form['submitted'] as $key => $value) {
 if (isset($form['submitted'][$key])) {
   $types = array('textfield', 'webform_email', 'textarea');

   if (isset($value['#type']) && in_array($value['#type'], $types)) {
     $form['submitted'][$key]['#attributes']['placeholder'] = t($value['#title']);
   }
 }
}

+1, এই কোডটি দুর্দান্তভাবে কাজ করছে, আমি আমার কাস্টম মডিউলটিতে ডুপ্রাল 6 সহ কেবল অনুলিপি করে আটকিয়েছি, তবে আমি এই ত্রুটির সতর্কতা পেয়েছি: সি: \ wamp \ www \ r4launch \ সাইটস \ সবগুলিতে ফোরচ () এর জন্য সরবরাহ করা অবৈধ যুক্তি \ মডিউল \ উন্নত \ লাইন 16 advanced.module
বালা

1
আমি যদি শর্তটি ভিতরে রাখি তবে এটি সমাধান করেছি। যদি (isset ($ form_state ['ওয়েবফর্ম'])) {উপরের কোডটি এখানে যায় ..}
বালা

3

আপনার কোডে, আপনি পরিবর্তনশীলটি পরিবর্তন করেন $valueযা কখনই আবার ভেরিয়েবলের সাথে সংযুক্ত না হয় $form, যা রেফারেন্স দ্বারা পাস হয়।

স্পষ্টতই, আপনি কিছু পরিবর্তন করেন তবে এটিকে দ্রুপালে ফেরত পাঠান না।

এছাড়াও, আপনি এটির মতো এটি করতে পারেন (আমি এটি পরীক্ষা করে দেখিনি তবে তাত্ত্বিকভাবে এটি কাজ করা উচিত)।

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  $keys = element_children($form);
  foreach ($keys as $key) {
    if (in_array(array('textfield', 'textarea'), $form[$key]['#type'])) {
      if (!empty($form[$key]['#title'])) {
        $placeholder = array('placeholder' => t($form[$key]['#title']));
        if (is_array($form[$key]['#attributes'])) {
          $form[$key]['#attributes'] = array_merge($form[$key]['#attributes'], $placeholder);
        }
        else {
          $form[$key]['#attributes'] = $placeholder;
        }
      }
    }
  }
}

আমি fieldsetবাচ্চাদের জন্য একটি চেক যোগ করতে এবং স্থানধারক যুক্ত করতে কেবল অলস ছিলাম । তবে আমার ধারণা আপনি এটি খুব সহজেই পরিবর্তন করতে পারবেন।


3

@ জোসুয়ার টেম্পলেট ফাইল সমাধানে সামান্য উন্নতি: এই কোডটি ওয়েবফর্ম ইমেল ফিডগুলিতে স্থানধারক পাঠ্য যুক্ত করবে।

foreach ($form["submitted"] as $key => $value) {
    if ("textfield" == $value["#type"]) {
        $form["submitted"][$key]['#attributes']["placeholder"] = t($value["#title"]);
    }
    if($value['#type'] == "webform_email") {
        $form["submitted"][$key]['#attributes']["placeholder"] = t($value["#title"]);
    } 
}

সত্যিকারের উন্নতি হওয়ার জন্য আপনার 2 টি কাজ করা উচিত: 1) সূচকটি 2 সেট করতে হবে চেক করুন) বিভিন্ন কেসগুলি পরীক্ষা করতে আরও ভাল বাক্য গঠন ব্যবহার করুন
ম্যাটটিও

2

hook_for_alter ব্যবহার করে এটি চেষ্টা করুন

function mymodule_survey_builder_form_alter(&$form, &$form_state, $form_id) {    
 if ($form_id == 'form_builder_field_configure') {
        $form['title']['#attributes']=array('placeholder' => t('Please enter the Qustion(English) name here.'));
}
}

1

এর একটি পুরোনো অথবা পুরোনো সংস্করণ ব্যবহার কারো জন্য Drupal এর এর ওয়েব-ফর্ম মডিউল , এটা লক্ষ করেন, স্থানধারক সমর্থন মূল্য যোগ করা হয়েছিল মধ্যে 7.x-4.x branch(জুন 2013)।

সুতরাং, এইচটিএমএল 5 প্লেসহোল্ডার কার্যকারিতা এখন একটি দেশীয়, বিল্ট ইন বিকল্প পাশাপাশি কাস্টম CSS এবং ক্লাসগুলির জন্য বেশ কয়েকটি দীর্ঘ অনুরোধযুক্ত বৈশিষ্ট্য।

নতুন কার্যকারিতাটি কীভাবে প্রদর্শিত হবে তার একটি স্ক্রিনশট এখানে:

HTML5 স্থানধারক সমর্থন দেখায় ড্রুপাল ওয়েবফোর্ম উপাদান সেটিংস


0

বেশিরভাগ ক্ষেত্রেই আমার ধারণা, কেউ কেবল কিছু ফর্মের মধ্যে স্থানধারক বৈশিষ্ট্য যুক্ত করতে চান।

আপনি যদি সমস্ত ওয়েবফর্মের মধ্যে স্থানধারক যুক্ত করতে চান তবে আপনি এটি এটি করতে পারেন:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  // If webform, add "placeholder" attributes to all textfields
  // got code here:http://drupal.stackexchange.com/questions/12706/adding-html5-placeholder-to-all-drupal-forms
  if (isset($form['#node']->type) && ($form['#node']->type == 'webform')) {
    foreach ($form["submitted"] as $key => $value) {
      switch ($value["#type"]) {
        case 'textfield':
        case 'textarea':
        case 'webform_email':
          $form["submitted"][$key]['#attributes']["placeholder"] = $value["#title"];
          break;
      } 
    }
  }
}

0

এটির জন্য কেবলমাত্র মডিউলটি ব্যবহার করুন: ওয়েবফর্ম ইঙ্গিত

এটি ঠিক আপনার যা প্রয়োজন এটি পরিচালনা করা সহজ এবং কাস্টম কোডের কোনও প্রয়োজন নেই। এই মডিউলটি উত্তরাধিকারী ব্রাউজারগুলির জন্য সমর্থনও সরবরাহ করে যা স্থানধারক বৈশিষ্ট্যটিকে সমর্থন করে না।

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