टैक्सोनॉमी शर्तों की अल्पविराम से अलग सूची प्रदर्शित करें?


10

द्रुपाल al।

मेरे node.tpl.php में, मैं टैक्सोनॉमी शर्तों की एक सूची प्रिंट करना चाहता हूं (टैक्सोनॉमी को "चैनल" कहा जाता है)। अगर मैं उपयोग करता हूं:

<?php print render($content['field_channel']); ?>

यह काम करता है, स्पष्ट रूप से, लेकिन सबसे अच्छा मैं उन्हें इनलाइन प्राप्त करने के लिए कर सकता हूं सीएसएस का उपयोग उन्हें तैरने के लिए छोड़ दिया है। मैं चाहूंगा कि वे कॉमा से अलग हो जाएं। कोई विचार?

धन्यवाद।

जवाबों:


11

आप का उपयोग करके field.tpl.phpया उन्हें क्षेत्र की कोशिश कर सकते हैं theme_field()

एक उदाहरण के रूप में (उपयोग करते हुए field.tpl.php):

  1. field.tpl.php"मॉड्यूल / फ़ील्ड / थीम" से अपनी थीम निर्देशिका की प्रतिलिपि बनाएँ
  2. उस फ़ाइल की एक प्रतिलिपि बनाएँ और उसका नाम बदलें field--field-channel.tpl.php
  3. हालाँकि आपको जो फ़ाइल पसंद है उसे संपादित करें।

इस काम के लिए एक त्वरित / गंदे उदाहरण के रूप में, इस field--field-channel.tpl.phpतरह दिख सकता है:

<div class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
  <?php if (!$label_hidden) : ?>
    <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>:&nbsp;</div>
  <?php endif; ?>
  <div class="field-items"<?php print $content_attributes; ?>>
    <?php foreach ($items as $delta => $item) : ?>
      <div style="display:inline;" class="field-item <?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>>
        <?php 
          print render($item);
          // Add comma if not last item
          if ($delta < (count($items) - 1)) {
            print ','; 
          }
        ?>
      </div>
    <?php endforeach; ?>
  </div>
</div>

.Tpl फ़ाइल का उपयोग करके इसे पूरा करने के कई तरीके हैं, लेकिन यह सिर्फ एक विकल्प है। मैं एक शैली के बजाय DIV में एक वर्ग जोड़ने की सलाह देता हूं और इनलाइन शैलियों का उपयोग करने के बजाय अपनी स्टाइलशीट में परिवर्तन कर सकता हूं।


बहुत बढ़िया, यह पूरी तरह से काम किया। मुझे नहीं पता था कि आप इस तरह से खेतों पर टेम्पलेट्स का उपयोग कर सकते हैं। अभी भी इस सामान के साथ बहुत कुछ सीखना है। एक बार फिर धन्यवाद।
माइक

Tpl फ़ाइलों का उपयोग करना थोड़ा अधिक संसाधन गहन है और पसंदीदा मोड नीचे हुक_फ़ील्ड सुझाव का उपयोग करने के लिए है।
शैनोनबाइक

11

पाठ फ़ॉर्मेटर मॉड्यूल अब Drupal 7 के लिए उपलब्ध है, और आप कस्टम थीम काम के बिना यह कर सकते हैं।


टेक्स्ट फॉर्मैटर मॉड्यूल शायद अब इसका आदर्श समाधान है, जैसा कि ऊपर दिए गए चुने हुए उत्तर के विपरीत है, जिसके लिए विषय परत में चारों ओर मैकिंग की आवश्यकता होती है।
जेम्सविलसन

7

theme_fieldदृष्टिकोण का उपयोग करने का एक तरीका यहां है (इसे अपनी template.phpफ़ाइल में जोड़ें ):

/**
 * Implements theme_field()
 *
 * Make field items a comma separated unordered list
 */
function THEMENAME_field__NAME_OF_FIELD__NAME_OF_CONTENT_TYPE($variables) {
  $output = '';

  // Render the label, if it's not hidden.
  if (!$variables['label_hidden']) {
    $output .= '<div class="field-label"' . $variables['title_attributes'] . '>' . $variables['label'] . ':&nbsp;</div>';
  }

  // Render the items as a comma separated inline list
  $output .= '<ul class="field-items"' . $variables['content_attributes'] . '>';
  for ($i=0; $i < count($variables['items']); $i++) {
    $output .= '<li>'. drupal_render($variables['items'][$i]);
    $output .= ($i == count($variables['items'])-1) ? '</li>' : ', </li>';
  }
  $output .= '</ul>';

  return $output;
}

1
सुपर महान धन्यवाद यह वास्तव में बहुत मदद मिली! इसके अलावा पसंदीदा तरीका तो एक tpl फ़ाइल!
शैनोनबाइक

4

आप इसे आसानी से सिर्फ CSS में कर सकते हैं:

.field-type-taxonomy-term-reference .field-items .field-item {
  प्रदर्शन: इनलाइन-ब्लॉक;
  * प्रदर्शन: इनलाइन;
  * ज़ूम: 1;
}
.field-type-taxonomy-term-reference .field-items .field-item: के बाद {
  सामग्री: ", ";
}
.field-type-taxonomy-term-reference .field-items .field-item: अंतिम-बच्चा: {के बाद
  सामग्री: "";
}

1
धन्यवाद, हालांकि मुझे अंतरिक्ष के लिए बच गए यूनिकोड का उपयोग करना पड़ा, इस तरह content: ", \00a0": stackoverflow.com/a/5467676/724176
ह्यूगो


0
<?php
if ($node->taxonomy) {
    foreach($node->taxonomy as $term) {
        if ($term->vid == 3) { // the id of the vocabulary
            $my_terms[] = l(
                t($term->name),
                'taxonomy/term/' . $term->tid
            );
        }
    }
}

if ($my_terms) { ?>
    <div class="clear-block">
        <div class="terms">
            <?php print implode(", ", $my_terms); ?>
        </div>
    </div>
<?php } ?>

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

क्या साइड मॉड्यूल का उपयोग करना बेहतर है जो लगभग एक ही कर रहे हैं? क्या आप कृपया अधिक रखरखाव-अनुकूल कोड प्रदान कर सकते हैं?
मूल वि।

0

सीमांकक और आवरण के लिए और भी आसान है, आप टैक्नोमी फॉर्मैटर मॉड्यूल का उपयोग करते हैं: http://drupal.org/project/taxonomy_formatter

परियोजना पृष्ठ से अधिक जानकारी:

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

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