it-swarm.asia

نموذج user_profile_form (نموذج تحرير المستخدم)

أنا أبحث عن طرق سهلة لتخصيص نموذج ملف تعريف المستخدم الذي سيسمح لي بإعداد تخطيط من عمودين للنموذج واستبعاد عناصر معينة.

كيف يمكنني تحقيق ذلك؟

7
areynolds

بصرف النظر عن استخدام وحدة Display Suite النمطية ، تتطلب معظم طرق نماذج النماذج كتابة القليل من التعليمات البرمجية. في الطريقة التالية أقوم بتعريف المتغيرات من النموذج الذي يمكن إخراجه في ملف قالب لملاءمة أي بنية HTML تريدها. أضع كل الكود الخاص بي في template.php ، ولكن يمكنك بسهولة إنشاء وحدة مخصصة للقيام بذلك.

  1. قم بإضافة تطبيق hook_theme ()

    function YOURTHEME_theme($existing, $type, $theme, $path){
      return array(
        'user_profile_form' => array(
          'render element' => 'form',
          'template' => 'user-profile-form',
          'path' => drupal_get_path('theme', 'YOURTHEME') . '/templates', 
          //add '/templates' only if you store template files in an additional folder
        ),
    
      );
    }
    

    هذا يخبر نظام Drupal نظامهم أن هناك ملف قالب ينتظره في YOURTHEME/قوالب.

  2. بعد ذلك ، سنحدد بعض المتغيرات لتمريرها إلى هذا القالب في دالة hook_preprocess_HOOK. يمكننا العثور على المصفوفة المنظمة للنموذج في $ variables ['form'] وتعيين عناصر النموذج إلى المتغيرات التي نرغب في طرحها حول ملف tpl.php الخاص بنا.

    function YOURTHEME_preprocess_user_profile_form(&$variables) {
      $form_inputs = array(
        'account' => $variables['form']['account'],
        'picture' => $variables['form']['picture'],
        'actions' => $variables['form']['actions'],
      );
      $variables['rendered'] = _YOURTHEME_form_variables_render_all($form_inputs);
    }
    
    function _YOURTHEME_form_variables_render_all($elements) {
        //Create array to return, with element name as key and element as value
        $elements_array = array();
        //For each element, render it and add it to the array
        foreach ($elements as $key => $element) {
            $elements_array[$key] = render($element);
        }
        //Return array
        return $elements_array;
    }
    

    سيضع هذا المثال حقول معلومات الحساب العامة ، وحقل تحميل صورة المستخدم (إذا تم تمكين الصور) ، وإجراءات الإرسال في متغير يسمى "معروض".

  3. الآن بعد أن حددنا هذه المتغيرات ، يمكننا إخراجها في ملف قالب. قم بإنشاء ملف قالب باسم user-profile-form.tpl.php في "YOURTHEME/templates". هذا مثال تجريبي:

    <div id="new-form">
      <?php echo $rendered['picture']; ?>
      <?php echo $rendered['account']; ?>
      <?php echo $rendered['actions']; ?>
      <input type="hidden" name="form_id" value="<?php print $form['#form_id']; ?>" />
      <input type="hidden" name="form_build_id" value="<?php print $form['#build_id']; ?>" />
      <input type="hidden" name="form_token" value="<?php print $form['form_token']['#default_value']; ?>" />
    </div>
    

لاحظ حقول النموذج المخفية في النهاية ؛ تتضمن هذه الرموز الحيوية Drupal الرموز التي تساعد على تأمين النماذج من الهجوم. لن يعمل النموذج الخاص بك بدونها.

عند زيارة صفحة تحرير المستخدم الخاصة بك ، يجب أن تشاهد الآن فقط بعض حقول معلومات الحساب العامة وحقول الصورة. قم بإنشاء متغيرات مختلفة في وظيفة ما قبل المعالجة لفصل عناصر النموذج ووضعها في أي مكان تريده في ملف user-profile-form.tpl.php ، وإضافة أي ترميز تريده.

7
areynolds

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

1
rpataca

بعض إصلاحات areynolds's code:

إصلاح ضعيف في عنصر العرض

function YOURTHEME_theme($existing, $type, $theme, $path){
  return array(
    'user_profile_form' => array(
      'render element' => 'form',
      'template' => 'user-profile-form',
      'path' => drupal_get_path('theme', 'YOURTHEME') . '/templates', 
      //add '/templates' only if you store template files in an additional folder
    ),

  );
}

إصلاح وظيفة ما قبل المعالجة من تجاوز البيانات (الحساب -> الصورة) وإضافة عناصر العمل (زر النموذج).

function YOURTHEME_preprocess_user_profile_form(&$variables) {
  $required_elements[]=$variables['form']['account'];
  $required_elements[]=$variables['form']['picture'];
  $required_elements[]=$variables['form']['actions'];
  $variables['rendered'] = drupal_render($required_elements);
}

لكن كل هذه التلاعبات تعطي مظهرًا فقط للشكل. ولكن النموذج لن يعمل بشكل صحيح لأنه يتطلب عناصر أخرى مثل التحقق من الصحة ، ومعالجات الإرسال ، وما إلى ذلك. لذا أعتقد أن أفضل طريقة لإخفاء العناصر غير المطلوبة في مجموعة $ variables ['form'] تترك جميع بيانات تعريف النموذج الضرورية.

0
ACD

يمكن أن تتولى اللجان بشكل كامل نموذج تحرير الملف الشخصي ومع عدد من التصحيحات (حاليًا) يمكنك سحب معلومات Profile2 كعلاقة مع اللوحات.

0
ergophobe