नोड शीर्षक से पहले एक फ़ील्ड कैसे प्रदर्शित करें?


41

मैं D7 में एक टीज़र प्रदर्शित करते समय नोड के शीर्षक से पहले एक निश्चित क्षेत्र प्रस्तुत करना चाहता हूं।

प्रभावी ढंग से मैं से जाना चाहता हूँ इस के लिए यह

मैंने नोड.tpl.php को अपडेट करने पर ध्यान दिया है, लेकिन मुझे लगता है कि यह अलग $titleहो जाता है $contentइसलिए मैं अनिश्चित हूं कि इस से कैसे संपर्क किया जाए। कुछ खोज के बाद मैंने पाया है कि लोगों ने Drupal-6 में इसे पाने के लिए CCK और ConTemplate मॉड्यूल का उपयोग करने का सुझाव दिया है, लेकिन मैं सोच रहा हूं कि क्या अधिक Drupal-7 समाधान है।

कोई सुझाव?


सभी php- आधारित टेम्पलेट समाधानों के अलावा, आप केवल CSS के साथ एक लंबा सफर तय कर सकते हैं। नकारात्मक मार्जिन बहुत कुछ कर सकता है। आपके jsfiddle उदाहरण में यह इस तरह दिखेगा ।
marcvangend

मैंने इस पर विचार किया था लेकिन लंबे शीर्षकों के लिए क्या होता है ?
आयरिशबज

आप बिलकुल सही हैं, यह केवल तभी काम करता है जब शीर्षक की निश्चित ऊंचाई हो। हर समाधान की तरह, इसके कमजोर बिंदु हैं। व्यक्तिगत रूप से, मुझे लगता है कि (डिज़ाइन और तकनीक की परवाह किए बिना) लंबे शीर्षक को संपादकों को शिक्षित करने से रोका जाना चाहिए, लेकिन मुझे लगता है कि यह हमेशा एक विकल्प नहीं है।
marcvangend

जवाबों:


53

Drupal 7 के साथ यह वास्तव में काफी सरल है।

के साथ renderऔर hideआप जानते हैं कि $contentड्रुपल 6 में आवश्यक सभी वस्तुओं को प्रिंट करने की आवश्यकता के बिना एक ही तत्व के प्लेसमेंट को नियंत्रित करने की सकारात्मकता है ।

एक सरलीकृत नोड टेम्पलेट इस तरह दिखता है:

<div>
  <h2><?php print $title; ?></h2>
  <div class="content">
    <?php print render($content); ?>
  </div>
</div>

थोड़ा संशोधन आपकी आवश्यकताओं को पूरा करेगा:

<div>
  <?php print render($content['field_name_of_image']); ?>
  <h2><?php print $title; ?></h2>
  <div class="content">
    <?php print render($content); ?>
  </div>
</div>

उपयोग करके render, आप एक तत्व का उत्पादन कर सकते हैं। यह सामान को प्रिंट करने की तुलना में अधिक चतुर है, क्योंकि ड्रुपल ने जो कुछ प्रस्तुत किया है, उसका ट्रैक रखेगा, उसी स्थान पर दो बार मुद्रित होने से बचने के लिए। जब आप शीर्षक के ऊपर के क्षेत्र का प्रतिपादन कर रहे हैं, तो जो प्रदान किया गया $contentहै , उसके लिए भी निकाल रहे हैं ।


2
बहुत अच्छा। एक आदर्श दुनिया में ड्रुपल को किसी अन्य क्षेत्र की तरह शीर्षक क्षेत्र का इलाज करना बेहतर होगा, लेकिन कम से कम ड्रुपल 7 में हमारे पास इस तरह के सरल समाधान हैं। कुडोस @googletorp!
१२:२४ पर आयरिशबुज

रिकॉर्ड के लिए: यह Drupal6 से शायद ही अलग है, इसके विपरीत जो ऊपर टिप्पणी की जा सकती है।
बर्क

1
@berkes: यदि आप D6 में अलग-अलग फ़ील्ड प्रिंट करते हैं, तो आपको नोड टेम्प्लेट बनाए रखना होगा, और नए फ़ील्ड जोड़ने में सक्षम होने के लिए कोड को संपादित करना होगा। यह D7 की तुलना में एक बड़ा अंतर है जहां आप फ़ील्ड जोड़ने और यूआई का उपयोग करके उन्हें क्रमबद्ध कर सकते हैं।
googletorp

प्रस्तुत करना वास्तव में नया है। लेकिन इसकी अवधारणा नहीं है। समान हासिल करने के लिए कई तरकीबें हैं। मेरे कहने का मतलब यह नहीं था कि Drupal6 में यह उतना ही सरल, साफ और अच्छा है। मर्ली है कि यह भी संभव है।
बर्क

@googletorp पृष्ठ.tpl.php में फ़ील्ड प्रिंट करने का एक तरीका है?
CocoSkin

9

डिस्प्ले सुइट भी काफी अच्छा है।

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


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

वास्तव में यह सच नहीं है, आपको बस सभी आवश्यक मॉड्यूल स्थापित करने की आवश्यकता है: drupal.org/project/ds , drupal.org/project/nd & drupal.org/project/nd_contrib
Decipher

@ डेटा: h2 टैग के ऊपर एक छवि-टैग को स्थानांतरित करने के लिए 3 मॉड्यूल स्थापित करना? आप मजाक कर रहे होंगे, ठीक है :)
बर्कस

@berkes - एक वेबपेज प्रदर्शित करने के लिए Drupal को इंस्टॉल करना, आप सही मजाक कर रहे होंगे? मेरा कहना यह है कि इन मॉड्यूलों को स्थापित करने के साथ ही आप इतना कुछ कर सकते हैं, जैसे कि ड्रुपल के साथ आप इतना कुछ कर सकते हैं, लेकिन आप इसका उपयोग एक मासिक कार्य को हल करने के लिए भी कर सकते हैं।
Decipher

@ डेटा: निश्चित रूप से, जेनेरिक मॉड्यूल स्थापित करने से आपकी साइट पर नए अवसर आते हैं। लेकिन यह केवल चित्रों की एक पंक्ति प्रदर्शित करने के लिए दृश्य, गैलरी, cck, filefiend और छवि क्षेत्र स्थापित करने के लिए बीमार सलाह है। यह अच्छी सलाह होगी यदि विचार, cck और बाकी का उपयोग अधिक के लिए किया जाएगा तो केवल यह सूची-ऑफ-इमेज। लेकिन ओपी ने इसका जिक्र बिल्कुल नहीं किया।
बर्क

8

शीर्षक मॉड्यूल पर एक नज़र - http://drupal.org/project/title । यह आपके परिदृश्य के लिए उपयोगी साबित हो सकता है। मैंने इसे किसी कारण से स्थापित / सक्षम किया है, शायद यह आपके लिए समान है, और यह शीर्षक क्षेत्र को कैसे रखा जाए, इसका लचीलापन देने के लिए लग रहा था।

मैंने इसे निष्क्रिय कर दिया है (और डिस्प्ले सूट का उपयोग कर रहा हूं), इसलिए मेरा रिकॉल थोड़ा स्केच हो सकता है।


5

यह एक हैडिश समाधान है और मुझे यकीन है कि कोई व्यक्ति कुछ अधिक सुरुचिपूर्ण के साथ आएगा, लेकिन यदि आप फंस गए हैं, और कोई भी नहीं करता है ...

आप पूरी तरह page.tpl.phpसे मुद्रण को हटाने के लिए उपयोग कर सकते हैं $title, और मशीन नाम $ new_title या ऐसा कुछ के साथ शीर्षक नामक एक नया कस्टम फ़ील्ड जोड़ सकते हैं। फिर नोड एडिट पर, मूल शीर्षक बॉक्स को छिपाएं, और नोड पर कॉपी को कॉपी करने के $new_titleलिए कंप्यूटेड फ़ील्ड या कुछ कस्टम php का उपयोग करें $title

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

जैसा मैंने कहा, यह एक हैक है - लेकिन यह काम करेगा। मुझे बताएं यदि आपको अधिक जानकारी की जरूरत है


1
सुझाव के लिए धन्यवाद फ्रेडरिक। जैसा कि आप इंगित करते हैं कि यह आदर्श से बहुत दूर है, लेकिन कुछ संभावित वर्कअराउंड में से एक जैसा दिखता है। मैं यह सुझाव देते हुए आपके समाधान में जोड़ दूंगा कि इस दृष्टिकोण को लेने पर auto_nodetitle मॉड्यूल का उपयोग किया जाना चाहिए। मैं अब के लिए प्रश्न को खुला छोड़ दूंगा क्योंकि मुझे वास्तव में उम्मीद है कि कुछ बेहतर तरीका है और मैं एक इनाम शुरू कर सकता हूं। आपके प्रयास के लिए +1 समान है।
३३:११ पर ३२:११

4

page.tpl.php (माला)

...
      <div id="center"><div id="squeeze"><div class="right-corner"><div class="left-corner">
          <?php print $breadcrumb; ?>
          <?php if ($mission): print '<div id="mission">'. $mission .'</div>'; endif; ?>

          /*
           * Print custom block or var
           */
          <?php if ($custom_block): print '<div id="custom-block" class="clear-block">'. $custom_block .'</div>'; endif; ?>

          <?php if ($tabs): print '<div id="tabs-wrapper" class="clear-block">'; endif; ?>
          <?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>
          <?php if ($tabs): print '<ul class="tabs primary">'. $tabs .'</ul></div>'; endif; ?>
          <?php if ($tabs2): print '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>
          <?php if ($show_messages && $messages): print $messages; endif; ?>
          <?php print $help; ?>
          <div class="clear-block">
            <?php print $content ?>
          </div>
          <?php print $feed_icons ?>
          <div id="footer"><?php print $footer_message . $footer ?></div>
      </div></div></div></div> <!-- /.left-corner, /.right-corner, /#squeeze, /#center -->
...

template.php

/**
 * Override or insert variables into the page template.
 */
function phptemplate_preprocess_page(&$variables) {
  $node = $variables['node'];
  if($node->type == MY_NODE_TYPE) {
    $variables['custom_block'] = 'bla bla bla';
  }
}

मुझे यकीन नहीं है कि मैं इसका पालन कर रहा हूं कि यहां क्या हो रहा है क्योंकि पहला कोड स्निपेट इस बात का थोड़ा संकेत देता है कि नया क्या है और क्या मौजूद है। मैं माला के बजाय ज़ेन थीम का उपयोग कर रहा हूं, हालांकि आवश्यक परिवर्तन समान होना चाहिए। दूसरे कोड स्निपेट में आप एक हुक_परप्रोसेसर_पेज () लगा रहे हैं? क्या आप अधिक ठोस उदाहरण के साथ विस्तार कर सकते हैं?
मेरीबज

दूसरे कोड में हमने एक नया वेरिएबल 'custom_block' परिभाषित किया था। पहले कोड के उस हिस्से को देखें जहां हम 'custom_block' प्रिंटिंग कर रहे हैं। <? php if ($ custom_block): '<div id = "custom-block" वर्ग = "clear-block">' प्रिंट करें। $ custom_block। '</ div>'; अगर अंत; इस चर को उत्पन्न करने के लिए नियमों को परिभाषित करें। इसलिए? :)
डोबर्मन 21

4

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


मैं अभी भी एक शराबी n00b हूँ, क्या आप बता सकते हैं कि आपका क्या मतलब है?
केनी वायलैंड

3

मुझे लगता है कि आपको अपने टेम्पलेट में प्रीप्रोसेस कार्यों का उपयोग करना चाहिए

/**
 * Override or insert variables into the page template.
 */
function THEMENAME_process_page(&$variables) {
  // look for $variables['page_title'] if i remember
}

और अतिरिक्त के रूप में

/**
 * Override or insert variables into the node template.
 */
function THEMENAME_preprocess_node(&$variables) {
  //
}

डंप चर और कुछ भी तुम क्या चाहते हो। जोड़ें / निकालें / अद्यतन।


1
वे कार्य उस क्रम को नहीं बदलते हैं जिसमें शीर्षक और अन्य नोड फ़ील्ड आउटपुट होते हैं। उसके लिए, आपको टेम्पलेट फ़ाइल को बदलना चाहिए।
kiamlaluno

मैं देख रहा हूँ। मुझे लगा कि आप शीर्षक में फ़ील्ड मान जोड़ना चाहेंगे।
डोबर्मन

3

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

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

आप यहां उसी दृष्टिकोण का वीडियो देख सकते हैं: http://www.youtube.com/watch?v=y4wyjxyhbNA , निश्चित रूप से आपको ब्लॉक को शीर्षक के ऊपर (बाएं साइडबार को नहीं) अंत में रखना होगा।


2

कोड के नीचे ज़ेन टेम्प्लेट मेरे लिए काम करता है।

<?php
// this goes in template.php
// check if node type page and then add to $vars array
// declaring $vars['foo'] gives you a $foo variable to use in page.tpl.php

function YOURTHEMENAME_preprocess_page(&$vars, $hook) {
    if (isset($vars['node'])) :
        if($vars['node']->type == 'page'):       
            $node = node_load($vars['node']->nid);
            $output = field_view_field('node', $node, 'field_image', array('label' => 'hidden'));       
            $vars['my_image_field'] = $output;               
        endif;
    endif;
}
?>

तो आखिरकार, आप आसानी से अपने क्षेत्र को page.tpl.php में प्रिंट कर सकते हैं;

<?php
if ($my_image_field):
   print render($my_image_field);
endif;
?>

Page.tpl.php के बारे में, मुझे बिजनेस रिस्पॉन्सिव थीम के साथ एक अपरिभाषित चर चेतावनी मिल रही थी, लेकिन जब मैंने सशर्त हटा दिया, तो यह ठीक काम करता है। दूसरे शब्दों में, मैं बदल गया <? Php अगर ($ my_image_field): प्रिंट रेंडर ($ my_image_field); अगर अंत; ?> से <? php प्रिंट रेंडर ($ my_image_field); ?> जो मेरे सभी पृष्ठों पर कोई चेतावनी नहीं देता है।
एमी नेबेल

2

मुझे पता है कि आपने पहले से ही कुछ थीम का निर्माण करने के लिए उपयोग किया होगा और अब शीर्ष पर फ़ील्ड को जोड़ने की कोशिश कर रहे हैं।

Drupal 7 पर थीम बनाने वाले सभी डेवलपर्स के लिए मेरे सुझाव का उपयोग करना होगा: ओमेगा थीम + संदर्भ और डेल्टा मॉड्यूल। यह आपके लेआउट के लिए एक बहुत मजबूत आधार देता है।

और क्षेत्र, ब्लॉक और क्षेत्र की व्यवस्था पर लचीलापन।


1

आप पैनल मॉड्यूल के साथ ist कर सकते हैं


यहां पुराना जवाब है, लेकिन इसने एक झंडा पकड़ा। इस स्थिति में पैनल्स का उपयोग कैसे किया जा सकता है, इसे थोड़ा स्पष्ट करना बेहतर होगा।
mpdonadio

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