विचारों को विषय के रूप में कैसे उजागर किया जाए?


12

मैंने कई सारे फ़िल्टर के साथ एक दृश्य बनाया है, लेकिन यह बहुत बदसूरत लग रहा है।

यहाँ छवि विवरण दर्ज करें

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

मैंने फॉर्म को var_dump करने का प्रयास किया, लेकिन यह हमेशा के लिए चलता रहता है और मेरा ब्राउज़र लॉक हो जाता है, इसलिए मैं उस तरीके के बारे में आसानी से कुछ नहीं सीख सकता।

मैंने फॉर्मसेट बच्चे के रूप में दूसरे रूप में डालने की भी कोशिश की, लेकिन सभी फॉर्म आईडी की जानकारी और इसी तरह समस्याग्रस्त साबित हुई (हालाँकि, मुझे फ़ील्डसेट स्टाइल मिला)।

किसी को कोई संकेत मिला?

अपडेट करें:

मैंने मॉड्यूल से अपनी साइट की थीम निर्देशिका के लिए टेम्पलेट पर प्रतिलिपि बनाई, और एक शुरुआत की।

<fieldset>
    <legend>Filters</legend>

    <div class="views-exposed-form">
        <div class="views-exposed-widgets clear-block">
            <?php foreach($widgets as $id => $widget): ?>
                <div class="views-exposed-widget">
                    <?php if (!empty($widget->label)): ?>
                        <label for="<?php print $widget->id; ?>">
                            <?php print $widget->label; ?>
                        </label>
                    <?php endif; ?>
                    <?php if (!empty($widget->operator)): ?>
                        <div class="views-operator">
                            <?php print $widget->operator; ?>
                        </div>
                    <?php endif; ?>
                    <div class="views-widget">
                        <?php print $widget->widget; ?>
                    </div>
                </div>
            <?php endforeach; ?>
            <div class="views-exposed-widget">
                <?php print $button ?>
            </div>
        </div>
    </div>
</fieldset>

मुझे यह पता नहीं लग सकता है कि दिनांक फ़ील्ड को कैसे जोड़ा जाए - मुझे किसी तरह विजेट गुणों को संशोधित करने की आवश्यकता है ताकि मैं उन्हें एचटीएमएल में लपेट सकूं (हुक_फॉर्म_ल्टर का उपयोग करने से काम नहीं चलता क्योंकि #prefix और #suffix को उनके साथ जोड़ा जाता $widget->widgetहै) उत्पादन तोड़ो)

जवाबों:


22

आइमिंग व्यूज़ का उजागर रूप कठिन है क्योंकि यह अधिकांश रूपों की तरह व्यवहार नहीं करता है और अपने स्वयं के लेबल तंत्र का उपयोग करता है। इसलिए, आप केवल तत्वों form_alterको जोड़ने #prefixऔर जोड़ने के लिए हुक का उपयोग नहीं कर सकते #suffixहैं। लेकिन उपयोग करते हुए THEME_preprocess_views_exposed_form, आप अपने स्वयं के प्रत्यय / उपसर्ग तंत्र को तैयार कर सकते हैं:

function THEME_preprocess_views_exposed_form(&$variables) {
  if ($variables['form']['#id'] == 'views-exposed-form-VIEWNAME-DISPLAYID') {
    foreach ($variables['widgets'] as $id => &$widget) {
      switch ($id) {
        case 'first_date_id':
          $widget->prefix = '<div class="date-widgets-wrapper">';
          break;
        case 'last_date_id':
          $widget->suffix = '</div>';
          break;
      }
    }
  }
}

और टेम्पलेट फ़ाइल में

<fieldset>
    <legend>Filters</legend>

    <div class="views-exposed-form">
        <div class="views-exposed-widgets clear-block">
            <?php foreach($widgets as $id => $widget): ?>
                <?php if (!empty($widget->prefix)) print $widget->prefix; ?>
                <div class="views-exposed-widget">
                    <?php if (!empty($widget->label)): ?>
                        <label for="<?php print $widget->id; ?>">
                            <?php print $widget->label; ?>
                        </label>
                    <?php endif; ?>
                    <?php if (!empty($widget->operator)): ?>
                        <div class="views-operator">
                            <?php print $widget->operator; ?>
                        </div>
                    <?php endif; ?>
                    <div class="views-widget">
                        <?php print $widget->widget; ?>
                    </div>
                </div>
                <?php if (!empty($widget->suffix)) print $widget->suffix; ?>
            <?php endforeach; ?>
            <div class="views-exposed-widget">
                <?php print $button ?>
            </div>
        </div>
    </div>
</fieldset>

7

आप टेम्पलेट को ओवरराइड करने के लिए अपने थीम पथ पर साइटों / सभी / मॉड्यूल / विचारों / थीम से विचारों-उजागर-form.tpl.php को कॉपी कर सकते हैं।


तुम भी केवल की तरह पैटर्न के साथ विशिष्ट दृश्यों के लिए ओवरराइड कर सकते हैं views-exposed-form--view_id.tpl.phpया views-exposed-form--view_id--display_id.tpl.php, और अधिक जानकारी
user56reinstatemonica8

3

इसके अलावा बेहतर एक्सपोजर फिल्टर मॉड्यूल पर एक नज़र डालें । आपको इन-डिसिप्लिबल फिल्टर्स ऑप्शन पाने के लिए इन -वायर रिलीज की जरूरत होगी, हालांकि मैं उम्मीद कर रहा हूं कि जल्द ही एक उचित 1.1 रिलीज हो ...


3

आपको form['#theme']आइटम में क्या देखना चाहिए । ऐसा करने का बेहतर तरीका (इससे बेहतर var_dump()) का उपयोग करना होगा dsm($form)या यहां तक ​​कि kpr($form), ये कार्य आपके द्वारा डेवेल मॉड्यूल ( http://drupal.org/project/devel ) स्थापित करने के बाद उपलब्ध होंगे । form['#theme']लगभग 7 तत्वों की एक सरणी होनी चाहिए। ये तत्व थीम हुक के नाम हैं जिन्हें तब कहा जाता है जब इस फॉर्म का प्रतिपादन किया जा रहा हो। आप का उपयोग कर सकते हैं आप उन्हें एक फार्म के विषय के अपने तरीके को लागू करने के लिए।

वस्तुओं में से एक कहा जाएगा views_exposed_form__VIEW_NAME__DISPLAY_ID

आपके मॉड्यूल में (यदि आपके पास एक है) एक हुक_टैम का कार्यान्वयन होना चाहिए ()

function MYMODULE_theme($existing, $type, $theme, $path) {
  return array(
    'views_exposed_form__VIEW_NAME__DISPLAY_ID' => array(
      'function' => 'my_exposed_form_theme_function',
      'render element' => 'form',
    )
  );
}

// somwhere later in code

function my_exposed_form_theme_function($vaiables) {
  //$vaiables['form'] contains a form array
  //to display a form element call drupal_render($vaiables['form']['some element'])
  //don't forget to call drupal_render($form) 
  //after you are done with rendering individual elements
  //
  //you can use template_preprocess_views_exposed_form() from 
  // views/theme/theme.inc as an example

  return "concatenated results of multiple drupal_render() calls";
}

2

पिछली स्थितियों में मैंने उपसर्ग और प्रत्यय को जोड़ने के लिए Hook_form_alter () का उपयोग किया है ताकि उन्हें div में लपेटने के लिए तत्वों का निर्माण किया जा सके जो तब स्टाइल हो सकते हैं। हालांकि फ़ील्डसेट में लपेटने के बारे में निश्चित नहीं है।

जैसे।

$form['submitted']['full_name']['#prefix'] = '<div class="background">';        
$form['submitted']['message']['#suffix'] = '</div>';

1

फ़ॉर्म को संशोधित करने के लिए Drupal के hook_form_FORM_ID_alter का उपयोग करें। यह वही है जो मेरे चरित्र क्षेत्र में एक £ चरित्र को उपसर्ग करने की मेरी समस्या को हल करता है (इसे आपके कस्टम मॉड्यूल में डालें):

function THEME_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
   // check this is the right form
   if ($form['#theme'][0] == 'REPLACE_THIS') {
      // add the prefix
      $form['price']['min']['#prefix'] = "£";
   }
}


0

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

यह थीम जानकारी हमें यह बताती है कि पदानुक्रम के अनुसार फ़ाइल का नाम कैसे दिया जाए (या आप जिस टेम्पलेट फ़ाइल को देख रहे हैं उसके प्रभाव का दायरा विचारों के स्वयं के खाकों को ओवरराइड करने वाला है।)

अब, यह थीम जानकारी उन सभी टेम्प्लेट फ़ाइलों को नहीं दिखा सकती है, जो दृश्य इस विशिष्ट दृश्य को प्रस्तुत करने के लिए उपयोग करता है।

इसलिए, साइटों / सभी / मॉड्यूल / विचारों / विषय पर जाएं और विचारों को उजागर-form -pl.tpl.php कॉपी करें (क्योंकि इस मामले में हम रेंडरिंग फिल्टर के लिए डिफ़ॉल्ट को ओवरराइड करना चाहते हैं!) और इसे अपने स्वयं के थीम फ़ोल्डर के अंदर पेस्ट करें। अब आपको इस ओवरराइडिंग टेम्प्लेट फ़ाइल के प्रभाव को नियंत्रित करने के लिए उसी विधि का पालन करना होगा जिसे आपने अपने थीम फ़ोल्डर के अंदर डालकर उसी के अनुसार नामकरण किया है। उदाहरण दृश्य-उजागर-प्रपत्र - आपका दृश्य नाम-फलक name.tpl.php (आप विषय को देखकर नामकरण को समझेंगे: दृश्य के संपादन पृष्ठ में जानकारी)

अब आप इस टेम्प्लेट फ़ाइल में व्यक्तिगत विजेट्स (फ़िल्टर हैंडलर द्वारा जनरेट) में सीएसएस जोड़ सकते हैं और उन सेटिंग्स को फ़िल्टर पर लागू किया जाएगा।

http://eureka.ykyuen.info/2011/07/25/drupal-theme-the-exposed-filter-in-views/ पर जाएं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.