it-swarm.asia

إضافة عنصر نائب HTML5 إلى جميع نماذج drupal

أحاول إضافة سمة العنصر النائب إلى جميع حقول النص عبر موقع الويب الخاص بي ، لكني لا حظ لي.

لقد أنشأت وحدة نمطية تتجاوز 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"]);
        }
    }
}

يجب أن أخبرك أنني أستخدم أيضًا وحدة نموذج الويب.

22
Josua Pedersen

لأنني أستخدم وحدة نموذج الويب ، يمكنني فقط تصميم قالب نموذج الويب العالمي (webform-form.tpl.php) ووضعه في مجلد السمة الخاص بي. لا حاجة لتعقيد الأمور مع الوحدة النمطية.

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

أضع هذا في الجزء العلوي من ملف القالب.

14
Josua Pedersen

قم بتغييره قليلاً إلى ....

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]);
        }
    }
}
10
Shoaib Nawaz

ربما يمكنك القيام بذلك باستخدام hook_form_alter أو hook_form_FORM_ID_alter وإضافة السمة "placeholder"

على سبيل المثال ، لم يتم اختباره ، ولكن شيء مثل:

/**
 * 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');
}

ابحث عن عنصر النموذج المخفي في نموذج HTML بتنسيق الويب المسمى form_id للحصول على معرف النموذج الصحيح لاسم الوظيفة form_alter.

4
David Thomas

نهج أفضل لرمز Josua Pedersen:

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']);
   }
 }
}
4
Sohail

تحسن طفيف في حل ملف قالب @ Josua: سيضيف هذا الرمز أيضًا نص العنصر النائب إلى حقول البريد الإلكتروني الخاصة بنموذج الويب.

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"]);
    } 
}
3
Steven B

في الكود الخاص بك ، يمكنك تغيير المتغير $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
yvan

باستخدام hook_form_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.'));
}
}
2
Mohamed Ibrahim

لأي شخص يستخدم إصدارًا قديمًا أو قديمًا من وحدة نموذج Webup Drupal ، تجدر الإشارة إلى أن دعم العنصر النائب تمت إضافته في 7.x-4.x branch (يونيو 2013).

وبالتالي ، أصبحت وظيفة العنصر النائب لـ HTML5 الآن خيارًا أصليًا مدمجًا جنبًا إلى جنب مع فئات CSS المخصصة للمكونات والعديد من الميزات الأخرى المطلوبة منذ فترة طويلة.

فيما يلي لقطة شاشة لكيفية ظهور الوظيفة الجديدة:

Drupal Webform Component Settings showing HTML5 placeholder support

1
rjb

أعتقد أنه في معظم الحالات ، قد يرغب المرء فقط في إضافة سمات العنصر النائب في بعض النماذج.

إذا كنت ترغب في إضافة عنصر نائب إلى جميع نماذج الويب ، فيمكنك القيام بذلك على النحو التالي:

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
rosell.dk

ما عليك سوى استخدام الوحدة: تلميحات نموذج الويب

بالضبط ما تحتاجه. من السهل إدارة وليس هناك حاجة إلى رمز مخصص. توفر هذه الوحدة أيضًا دعمًا للمتصفحات القديمة التي لا تدعم سمة العنصر النائب.

0
ANDiTKO