एक क्षेत्र का केवल पहला मूल्य प्रदर्शित करने के लिए टीज़र को सीमित करें


14

मेरे पास एक छवि फ़ील्ड के साथ एक सामग्री प्रकार है। यह फ़ील्ड आमतौर पर 0 से 4 मानों के साथ आबाद होगी। इस सामग्री प्रकार के लिए डिफ़ॉल्ट रूप से टीज़र सभी 0 से 4 छवियों को आउटपुट करता है। मैं केवल पहली छवि प्रदर्शित करने के लिए टीज़र को कैसे समायोजित कर सकता हूं?

जवाबों:


12

एक कस्टम मॉड्यूल बनाएं, मॉड्यूल MODULENAMEके नाम के field_imageसाथ और अपने क्षेत्र के नाम के साथ बदलें :

/**
 * Implements hook_entity_view().
 */
function MODULENAME_entity_view($entity, $type, $view_mode, $langcode) {
  if ($view_mode == 'teaser') {
    $entity->content['field_image']['#items'] = array_slice($entity->content['field_image']['#items'], 0, 1);
  }
}

देखें hook_entity_view () अधिक जानकारी के लिए प्रलेखन।


यह आशाजनक लग रहा है, मैं इसे एक कोशिश करूँगा। मैं इसे लागू करने और वापस रिपोर्ट करने से कुछ दिन पहले हो सकता है। मैं लेखन मॉड्यूल के लिए अपेक्षाकृत नया हूं, इसलिए मेरे पास कुछ सवाल हैं: (1) क्या आपका नमूना कोड काम करेगा (दुर्घटना नहीं) जब क्षेत्र में शून्य मान हैं और (2) क्या यह काम करेगा (दुर्घटना नहीं) जब वहां होते हैं छवि क्षेत्र के बिना अन्य सामग्री प्रकार? धन्यवाद!
ग्रेग

1) हाँ, यह चाहिए। 2) यदि आप बयान को बदल सकते हैं if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE')
टिम.प्लेटकेट

4
या बस && isset ($ संस्था-> सामग्री ['field_image']), फिर आपको फ़ील्ड को किसी अन्य सामग्री प्रकार में जोड़ने या उस एक का नाम बदलने पर कोड को अपडेट करने की आवश्यकता नहीं है, या .. :)
Berdir

हममम। यह काम कर सकता है, लेकिन यह एक विषय में क्या होना चाहिए कोड में डालने का एक उदाहरण है।
Artfulrobot

यह काम करेगा, लेकिन यदि आप कस्टम कोड द्वारा इस तरह के विचारों को हल करते हैं, तो भविष्य में साइट कम रखरखाव योग्य होगी। इसके बजाय अन्य उत्तरों में उल्लिखित drupal.org के कुछ मॉड्यूल का उपयोग करें।
Bobik

12

कस्टम कोड लिखने की आवश्यकता नहीं है।

फ़ील्ड मल्टीपल लिमिट मॉड्यूल का उपयोग करने का प्रयास करें ।

यह आपको अपने सामग्री प्रकार के लिए प्रदर्शन सेटिंग्स में जाने और केवल कुछ निश्चित मानों को प्रदर्शित करने के लिए टीज़र सेटिंग्स को कॉन्फ़िगर करने की अनुमति देता है। आप चाहे तो इसे स्किप वेस बना सकते हैं, उदाहरण के लिए अगर आप चाहते हैं कि यह मान 2 से 5 प्रदर्शित करे


4

यदि टीज़र टेम्प्लेट का उपयोग किया जाता है (जैसे: नोड - कंटेंट-टाइप - teaser.tpl.php ), तो यह काम करता है:

  <?php print render($content['IMAGE-FIELD'][0]); ?>

1

मैंने पहली छवि प्रदर्शित करने के लिए एक नया फ़ील्ड बनाने के लिए हुक_फ़ील्ड_एक्सफ़्रा_फ़िल्ड्स () और हुक_नोड_व्यू () का उपयोग किया ताकि मैं मूल छवियों फ़ील्ड के साथ छेड़छाड़ न करूं।

hook_field_extra_fields () नए फ़ील्ड को प्रारंभ करता है जो आपके नोड प्रकार के प्रबंधन प्रदर्शन टैब पर दिखाई देगा।

function HOOK_field_extra_fields() {
  $extra['node']['NODE_TYPE'] = array(
    'display' => array(
      'primary_image' => array(
        'label' => t('Primary Image'),
        'weight' => 0,
      )
    ),
  );
  return $extra;
}

तब हुक_नोड_व्यू () का उपयोग आपके नए फ़ील्ड की सामग्री होने के लिए पहली छवि को जोड़ने के लिए किया जाता है।

function HOOK_node_view($node, $view_mode, $langcode) {
  if($node->type == 'NODE_TYPE' && $view_mode == 'teaser') {

    //make sure there are images
    if(!empty($node->field_images)) {
      $node->content['primary_image'] = $node->content['field_images'][0];

      //hide the original field with multiple images
      hide($node->content['field_images']);
    }
  }
}

नोट: यदि आपके पास डिस्प्ले सूट सक्षम है तो आप इसे मैनेज डिस्प्ले टैब में कर सकते हैं।

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