खाका प्रकार के आधार पर पृष्ठ शीर्षक को कैसे छिपाएं template_preprocess_page () का उपयोग कर


10

मैं वर्तमान पृष्ठ का शीर्षक छिपाने की कोशिश कर रहा हूं (जैसा कि मुद्रित होता है page.tpl.php) यदि वर्तमान पृष्ठ 1 है) पूर्ण डिस्प्ले में एक नोड (जैसा कि टीज़र मोड के विपरीत), और 2) नोड प्रकार या तो कॉन्सर्ट या बायो है । मैं इन सामग्री प्रकारों के लिए नोड शीर्षक को सीधे नोड सामग्री में प्रिंट करता हूं, इसलिए मैं page.tpl.php द्वारा मुद्रित किए जा रहे डुप्लिकेट को छिपाना चाहता हूं। मैं सीधे पेज.tpl.php में काम करने के लिए इसे प्राप्त करने में सक्षम नहीं हूं, और मेरे पढ़ने से पता चलता है कि प्रीप्रोसेस और प्रक्रिया कार्यों का उपयोग करके टेम्पलेट में टेम्पलेट लॉजिक को संभालना सबसे अच्छा अभ्यास है। इसलिए, मैं वर्तमान पृष्ठ शीर्षक (उपरोक्त 2 शर्तों के साथ) का उपयोग करके छिपाने की कोशिश कर रहा हूं template_preprocess_page()। यह मेरा कोड है।

<?php
    function MYTHEME_preprocess_page(&$variables) {
        if (!empty($variables['node']) && $variables['node']->type == 'concert') {
            hide($variables['title']);
        }
    }
?>

मैंने पढ़ा है कि मैं template.php से एक चर प्रिंट करने के लिए नोड प्रकार के लिए परीक्षण कैसे करूं? और template_preprocess_page()अन्य विभिन्न साइटों के लिए प्रलेखन पृष्ठ , लेकिन मुझे अभी यह काम करने के लिए नहीं मिल सकता है। मैंने सुझाव दिए कि आपको नोड प्रकार के परीक्षण से पहले कॉल isset()करना होगा $variables['node'], लेकिन यह भी काम नहीं किया। मुझे कहीं भी एक स्पष्ट समाधान पोस्ट नहीं किया गया था, और मैं अपनी बुद्धि के अंत में हूं।

जवाबों:


9

और मेरा पढ़ना बताता है कि प्रीप्रोसेस और प्रोसेस फ़ंक्शंस का उपयोग करके टेम्पलेट में टेम्पलेट लॉजिक को संभालना सबसे अच्छा अभ्यास है।

रेंडरिंग कोड से लॉजिक को टालने का मतलब है कि टेम्प्लेट में कोड ।php एक वैरिएबल सेट करता है जिसे टेम्प्लेट फ़ाइल में चेक किया गया है। इस प्रकार, सभी टेम्पलेट टेम्पलेट फ़ाइल में तर्क निहित है, जबकि प्रतिपादन कोड सभी टेम्पलेट फ़ाइलों में है।

template.php

function mytheme_preprocess_page(&$variables) {
  if (!empty($variables['node']) && $variables['node']->type == 'concert') {
    $variables['show_title'] = FALSE;
  }
}

page.tpl.php

<?php if ($show_title && $title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?>

hide()काम नहीं करता क्योंकि $variables['title']एक स्ट्रिंग है, रेंडरिंग सरणी नहीं। hide()हमेशा एक रेंडरिंग सरणी के साथ उपयोग किया जाता है, और इसका स्ट्रिंग के साथ कोई प्रभाव नहीं होता है, तब भी नहीं जब स्ट्रिंग को पास किया जाता है render()
दरअसल, एक स्ट्रिंग (या कोई भी मान जो एक सरणी वाले चर का संदर्भ नहीं है) को पारित करने के hide()लिए एक PHP त्रुटि का कारण होगा, क्योंकि फ़ंक्शन इस कोड का उपयोग करता है।

function hide(&$element) {
  $element['#printed'] = TRUE;
  return $element;
}

इससे परेशान $variables['title']होकर unset($variables['title'])भी काम नहीं करता, क्योंकि template_process_page()इससे पेज का शीर्षक मिल जाएगा drupal_get_title()

if (!isset($variables['title'])) {
  $variables['title'] = drupal_get_title();
}

बेशक आप के $titleसाथ वास्तविक चर भी बदल सकता है mytheme_process_page(&$variables) { $title = false; }
रॉब

4
@RobW जो होगा mytheme_process_page(&$variables) { $variables['title'] = false; }और जो BTW काम करता है।
डंकनमो सिप

इस पर एक और नोट; जब तक आपके विषय में लपेटता है तब <?php print $title; ?>तक <?php if (!$title_hidden): ?>आप बस सेट कर सकते हैं$variables['title_hidden'] = TRUE;
डंकनमो

2

आप drupal_set_title () का उपयोग करके इसे प्रबंधित कर सकते हैं।

function mytheme_preprocess_page(&$vars){
    if (isset($vars['node']) && $vars['node']->type == 'news'){
        drupal_set_title('');
    }
}

यह मेरे लिए काम नहीं किया। क्या कुछ और हो सकता है template_preprocess_page()? मैंने डुप्लिकेट पृष्ठ शीर्षक का निरीक्षण करने के लिए थीम डेवलपर मॉड्यूल का उपयोग किया है और पुष्टि की है कि यह कहा जा रहा है page.tpl.php। क्या मुझे शीर्षक को हटाने के बारे में सोचना चाहिए page.tpl.phpऔर फिर इसे वापस जोड़ना चाहिए जहां मैं इसका उपयोग करना चाहता हूं template_preprocess_page()? मैं शीर्षक प्रदान करना चाहता हूं, उदाहरण के लिए, जब पृष्ठ में नोड्स का दृश्य होता है, लेकिन तब नहीं जब पृष्ठ एक निश्चित प्रकार / प्रकार का एक नोड होता है।
डाइकुनस्टेडरफ्यूज

1
यह भी स्क्रीन पाठकों का उपयोग कर आगंतुकों से महत्वपूर्ण जानकारी को दूर कर सकता है। यह उपयोगकर्ताओं के टैब में पृष्ठ का शीर्षक भी अलग करता है। शुरू से ही एक्सेसिबिलिटी के बारे में सोचें।
रिक

1

यदि आपकी स्थिति सही है तो यह मानकर प्रयास करें :)

 function MYTHEME_preprocess_page(&$variables) {
        if (!empty($variables['node']) && $variables['node']->type == 'concert') {
            unset($variables['title']);
        }
    }

यह काम नहीं करता है: template_process_page ()$variables['title'] से लौटाए गए मान के साथ सेट होगा drupal_get_title()
kiamlaluno

0

इससे कम जटिल तरीका यह है कि इसे अपने पेज में प्रिंट करके रखें

<?php hide($title); ?>

लेकिन अगर आप चाहते हैं कि यह गतिशील हो तो मैं preprocess_pageदूसरों द्वारा सुझाए गए उपयोग करने का सुझाव दूंगा।


1
यह काम नहीं करता है। hide()रेंडरिंग सरणियों के साथ प्रयोग किया जाता है, तार नहीं।
kiamlaluno

0

CSS में, मैंने अपने विषय के लिए ऐसा किया

/*    Front Page - hide title  */
body.front header h1 {
 position: absolute; 
 left: -999em;    
}

Http://www.alistapart.com/articles/now-you-see-me/ द्वारा अनुशंसित

क्यों? क्योंकि आप अभी भी हेडर और h1 'दृश्यमान' को स्क्रीन रीडर तक पहुँच के लिए रखना चाहते हैं। यदि आप बस H1 के मूल्य को छीन लेते हैं, तो आप अपने अंधे और कम दृष्टि वाले आगंतुकों को कुछ संभावित महत्वपूर्ण जानकारी लूट रहे हैं।


यह काम नहीं करेगा। क्यों? क्योंकि आप प्रोग्रामिंग साइट n
AyeshK

ड्रुपल ऊपर इस्तेमाल किए गए 'फ्रंट' जैसे तत्वों के लिए कक्षाएं जोड़ता है। खुद के लिए, मुझे फ्रंट पेज पर शीर्षक छिपाने की जरूरत है, लेकिन स्क्रीन पाठकों के लिए इसे 'दृश्यमान' छोड़ दें। इसलिए, मैं कैस्केडिंग नियमों के तर्क का उपयोग स्पष्ट रूप से यह परिभाषित करने के लिए कर सकता हूं कि जब मुझे दृष्टि वाले उपयोगकर्ताओं से छिपाया जाए और जब मुझे इसकी आवश्यकता न हो।
रिक

0

mytheme_preprocess_page का सुझाव मेरे लिए काम करता है लेकिन अगर इसका उपयोग किया जाता है$vars['title_hidden'] = TRUE;

function mytheme_preprocess_page(&$vars) {
  if (isset($vars['node']->type) && $vars['node']->type == 'type') {
    $vars['title_hidden'] = TRUE;
  }
}

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