drupal - ड्रुपल विचार-क्या एक्सपोज़िंग फॉर्म संभव है?




drupal-6 drupal-views (4)

उपरोक्त स्पष्टीकरण से मैं मान रहा हूं कि आप ब्लॉक और सामग्री क्षेत्र में उसी फॉर्म को छू रहे हैं और आप पृष्ठ के कुछ हिस्से को छिपा रहे हैं, यदि यह सत्य है, तो आप अपने कस्टम मॉड्यूल में hook_form_alter () का उपयोग कर सकते हैं।

  1. वैश्विक चर में प्रपत्र तत्व (ब्लॉक में मौजूद) का मूल्य स्टोर करें
  2. अब उस वैश्विक वैरिएबल और सेट फॉर्म तत्व का उपयोग करें (सामग्री क्षेत्र में मौजूद, यह फ़ॉर्म तत्व उपयोगकर्ता के लिए दृश्यमान नहीं है)।

अधिक जानकारी प्रदान करें यदि आपने अन्य तरीके लागू किया है।

सादर, चिंतन

मुझे अपने पृष्ठ के साइडबार में उजागर किए गए फ़ॉर्म का हिस्सा प्रदर्शित करने और $content क्षेत्र में शेष फ़ॉर्म और सामग्री को प्रदर्शित करने $content है। वास्तव में कोई अच्छा तरीका नहीं है कि मैं यह करने के लिए मिल सकता है। मैं एक तरह से "खुला प्रपत्र" सेट के साथ एक "ब्लॉक" दृश्य बनाकर इसे दिखाने के लिए मिला है और फिर केवल उस भाग को दिखाने की कोशिश कर रहा हूं जिसे मैं .tpl फ़ाइलों के ज़रिए ज़रूरत है। समस्या यह है कि जब सबमिट बटन क्लिक किया जाता है (सबमिट बटन $content क्षेत्र में है), तब साइडबार में मौजूद फ़िल्टर को ध्यान में नहीं रखा जाता है।


कुछ पार्श्व सोच ... क्यों नहीं सीएसएस-केवल विकल्पों का पता लगाएं? आप उस फॉर्म तत्व को position:absolute साथ खेल सकते हैं position:absolute ? या (सही साइडबार पर विचार करना) float:right और फिर कुछ नकारात्मक दाएं मार्जिन इसे साइडबार पर धकेलने के लिए है? यदि आप 960 ग्रिड सिस्टम का उपयोग कर रहे हैं, तो pull साथ खेलें और कक्षाएं push


सबसे पहले मैं आपके प्रश्न का उत्तर देने जा रहा हूं, तो मैं आपको समझाऊंगा कि आप गलत सवाल क्यों पूछ रहे हैं:

यदि आप फॉर्मैपी के बाहर फार्म का निर्माण करते हैं, तो आपके पास कुछ भाग्य हो सकता है। यह उथल-पुथल हो जाएगा और आपको हमले के बारे में बहुत ज्यादा अतिरिक्त देखभाल करने की ज़रूरत होगी, जैसे बड़े पैमाने पर काम करना।

views_some_view.tpl.php :

<form name="input" action="/link/to/view" method="get">
  Country: <input type="text" name="country" />

my_custom_exposed_view.module: hook_block () शहर:

यह एक फार्म बनायेगा, जो अधिकतर स्थितियों में <form> साथ शुरू होगा, कुछ इनपुट फ़ील्ड हैं, फिर बहुत यादृच्छिक HTML है, फिर कुछ अधिक इनपुट फ़ील्ड और फिर समापन।

जैसा कि आप जानते हैं, एक <input type="submit" value="Submit" /> केवल उस form टैग के प्रत्येक पोस्ट करेगा जिसमें यह संलग्न है। सबमिट बटन निम्न HTML में है:

<form name="input_1" action="/link/to/view" method="get">
  Country: <input type="text" name="country" />
</form>
<form name="input_2" action="/link/to/view" method="get">
  City: <input type="text" name="city" />
  <input type="submit" value="Submit" />
</form>

केवल City भेज देंगे ये आप के लिए देख रहे हैं droids नहीं हैं।

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

आप सामग्री के किसी हिस्से में किसी हिस्से के हिस्से और दूसरे हिस्से में बस नहीं चाहते हैं

हालांकि, आप चाहते हैं कि यह विज़ुअलाइज़ किया जाए कि एक भाग शरीर में है, शेष एक साइडबार में है।

अच्छी खबर यह है, कि एचटीएमएल प्रस्तुति संरचना स्वतंत्र है यही वह जगह है जहां आपका समाधान झूठ है

  1. अपना फॉर्म-फ़ील्ड अच्छा आईडी और कक्षाएं दें। आप मौजूदा फॉर्म को बदलने के लिए एक hook_form_alter का उपयोग कर सकते हैं, लेकिन आप शायद केवल उस पूरे फॉर्म के लिए HTML बनाना चाहते हैं। विषय परत यह अनुमति देता है।
  2. सीडी का उपयोग आईडी या स्थिति के आधार पर एकल फॉर्म-फ़ील्ड लेने के लिए: सही जगह पर उन्हें पूर्ण करें। या क्लास और स्थिति द्वारा फ़ील्ड की कक्षाएं उठाएं: उन्हें सही जगह में रिश्तेदार।
  3. साधारण पहचान-दिनचर्या बनाएं जो शरीर-टैग को एक वर्ग जोड़ने की अनुमति देता है (निचे देखो)।
  4. साइडबार को कम करने के लिए कुछ सीएसएस जोड़ें, फार्म-फ़ील्ड में स्थानांतरित होने के लिए स्थान बनाते हुए, जब वह क्लास शरीर-टैग में होता है

    <body class="<?php print $splitform ?>">

    function my_themename_preprocess_page() {
      if ($GET['q'] == 'path/to/view') {
        $vars['spliform'] = "splitform"
      }
    }

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





drupal-theming