2012-07-04 10 views
5

मैं वास्तव में ड्रूपल फॉर्म एपीआई के आसपास अपना सिर पाने के लिए संघर्ष कर रहा हूं ... वास्तव में पूरी तरह से ड्रूपल।ड्रूपल 7 - ओवरराइडिंग मूल फॉर्म एचटीएमएल मार्क-अप

यहां मेरी समस्या है, मैंने ठीक से प्रस्तुत करने के साथ एक फॉर्म बनाया है, हालांकि अब मुझे कुछ फॉर्म तत्वों के चारों ओर रैपर divs करना है, इसलिए मैं अपने रूप को इस तरह से शैलीबद्ध करता हूं जो मेरे अनुरूप होगा साइट और कुछ बॉक्स मानक बकवास नहीं।

क्या कोई व्यक्ति "अच्छा" ट्यूटोरियल की सही दिशा में कम से कम बिंदु पर मदद कर सकता है और कुछ संक्षिप्त और बहुत अस्पष्ट बकवास नहीं है जो पूरे वेब पर plastered है?

धन्यवाद।

+0

क्या आपने कोई कस्टम फॉर्म बनाया है या आप मौजूदा को स्टाइल करना चाहते हैं? इसे आजमाएं [ट्यूटोरियल] (http://www.jaypan.com/tutorial/themeing-drupal-7-forms-cluding-css-and-js) या [यह एक] (http://www.digett.com/ब्लॉग/05/26/2011/कैसे-थीम-टिप्पणी-फॉर्म-ड्रूपल -7) –

+0

मैंने फॉर्म एपीआई का उपयोग करके अपना खुद का कस्टम फॉर्म बनाया है, लेकिन मैं इसे जिस तरह से चाहता हूं उसे स्टाइल नहीं कर सकता क्योंकि मुझे इसकी आवश्यकता है समूह का एक भार अर्थात व्यक्तिगत विवरण (नाम, पता, फोन, आदि, आदि)। असल में मैं स्क्रीन पर फॉर्म के हिस्सों को स्लाइड करना चाहता हूं, जब प्रत्येक भाग भर जाता है, इसलिए मुझे अतिरिक्त HTML मार्क-अप जोड़ने की आवश्यकता है। –

+0

उत्तर के लिए धन्यवाद। जयपान द्वारा भेजा गया पहला ट्यूटोरियल रिलीज के बाद ठीक काम करता है मुझे कुछ बदलावों के बाद मॉड्यूल को पुनरारंभ करना पड़ा। –

उत्तर

13

hook_form_alter यहां आपका मित्र है।

अपने विषय के template.php फ़ाइल में आप रूपों, प्रपत्र तत्वों आदि

को उपसर्गों और प्रत्यय जोड़ सकते हैं नीचे एक साइट मैं हाल ही में किया था से एक उदाहरण है।

function bhha_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'user_login') {  
    $form['#prefix'] = '<div class="loginForm">'; 
    $form['#suffix'] = '</div>'; 
    $form['name']['#title'] = Null; // Change text on form 
    $form['name']['#description'] = Null; // Change text on form 
    $form['name']['#attributes'] = array('placeholder' => t('username')); 
    $form['name']['#size'] = '30'; 
    $form['pass']['#title'] = Null; 
    $form['pass']['#description'] = Null; // Change text on form 
    $form['pass']['#attributes'] = array('placeholder' => t('password')); 
    $form['pass']['#size'] = '30'; 
    //$form['actions']['submit']['#value'] = t('password'); 
    $form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . path_to_theme() . '/images/Login.png'); 
    $form['links']['#markup'] = '<a class="user-password" href="'.url('user/password').'">' . t('Forgot your password?') . '</a>'; // Remove Request New Password from Block form 
    $form['links']['#weight'] = 540; 
    } 
} 

फॉर्म को प्राप्त करने के लिए अपना कोड जांचें। हाइफ़न के साथ अंडरस्कोर को बदलें और आप जो चाहते हैं उसे करने के लिए ऊपर दिए गए उदाहरण का उपयोग करने में सक्षम होना चाहिए।

मुझे लगता है कि यह सबसे बुनियादी है एक उदाहरण होगा:

function THEME_NAME_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'FORM_ID') {  
     // Adds a wrapper div to the whole form 
    $form['#prefix'] = '<div class="loginForm">'; 
    $form['#suffix'] = '</div>'; 

     // Adds a wrapper div to the element NAME 
    $form['name']['#prefix'] = '<div class="formRow">'; 
    $form['name']['#suffix'] = '</div>'; 
    } 
} 
+0

मदद के लिए धन्यवाद बदलने के लिए वास्तव में मदद की, इसे करने के अन्य तरीकों की कोशिश की। –

+0

जब आप चेकबॉक्स की गतिशील सूची (वर्गीकरण शर्तों से) करते हैं तो आप क्या करते हैं और आप उनका नाम हार्ड कोड नहीं कर सकते हैं। मेरे पास # विकल्प के गतिशील संख्या वाले # टाइप चेकबॉक्स हैं। एटीएम प्रत्येक विकल्प एक अवांछित div wrapper दिखाता है, मैं किसी भी रैपर बिल्कुल नहीं चाहता। मुझे पूर्ण नियंत्रण चाहिए। –

2

कई तरीके यह करने के लिए। उदाहरण

  1. आप जमीनी स्तर पर मार्कअप अधिलेखित करने के लिए देख रहे हैं के लिए, आप field.tpl.php या template_preprocess_field() इस्तेमाल कर सकते हैं।
  2. यदि आप अपने फॉर्म के संलग्न मार्कअप को बदलना चाहते हैं (हालांकि मुझे आश्चर्य होगा कि ड्रूपल का मानक मार्कअप बेहद स्टाइल-सक्षम क्यों है), तो आप विषय कार्यों को पंजीकृत करना और मार्कअप को इस तरह से संभालना चाहते हैं। यहां एक nice article है जो इस पर विस्तृत करता है।
संबंधित मुद्दे