मैं नोड के लिए अतिरिक्त दृश्य मोड कैसे जोड़ूं?


19

मैं एक कस्टम सामग्री प्रकार बना रहा हूं। डिफ़ॉल्ट रूप से, नोड्स केवल दो दृश्य मोड ( fullऔर teaser) का समर्थन करते हैं :

function mymodule_view($node, $view_mode)
{
    if ($view_mode == 'full') {
         $node->content['#theme']= 'my_full_node_view_theme';
    }

    if ($view_mode == 'teaser') {
          $node->content['#theme']= 'my_teaser_node_view_theme'; 
    }
    return $node;
}

मैं इस नोड प्रकार के लिए कुछ अन्य दृश्य मोड जोड़ना चाहता हूं, जैसे:

  • small_box
  • small_box_with_user_pic
  • big_box

और नोड को इस तरह कोड के साथ प्रस्तुत करना चाहते हैं:

$node = node_load($my_nid);
$output = drupal_render(node_view($node, 'big_box'));

कोई सुझाव?


2
मुझे यह mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes मिला, शायद यह मददगार है!
जूल

यहाँ टिम कॉसग्रोव से व्यू मोड्स के बारे में प्रस्तुतिकरण दिया गया है: timcosgrove.net/drupalcon-viewmodes/#1 आप एक नया व्यू मोड ( उदाहरण ) जोड़ने के लिए hook_entity_info_alter का उपयोग करेंगे ।
अरू जूल

वह प्रस्तुति कमाल की थी।
niksmac

1
वेरिकियस द्वारा उल्लिखित लिंक को wunderkraut.com/NowOnWunderkraut/mearra/430 पर स्थानांतरित कर दिया गया है
एंड्री

पेज चला गया है। स्लाइड्स यहां हैं हालांकि: स्लाइडशेयर.नेट
कारी कामिनिन

जवाबों:


23

पहले हमें hook_entity_info_alter के साथ अतिरिक्त दृश्य मोड जोड़ना होगा

function customuserblog_entity_info_alter(&$entity_info) {
     $entity_info['node']['view modes']['blog_post_big'] = array(
        'label' => t('simple big  teaser'),
        'custom settings' => TRUE,
      );
    }

// हम अतिरिक्त थीम फ़ंक्शन या टेम्पलेट संलग्न कर सकते हैं और हुक_व्यू के साथ चर जोड़ सकते हैं

function customuserblog_view($node, $view_mode) {
  if ($view_mode == 'blog_post_big') {
   // add some additional variables for template
    $node->content['#theme'] = 'custom_blog_big_teaser_view';
  }
}

// हमारे हुक थीम में

customuserblog_theme(){
    return array(
      'custom_blog_big_teaser_view'= array(
          'render element' => 'form',
          'template' => 'custom-blog-big-teaser-view',
       ),

    );
}

मैंने आपके समाधान का उपयोग किया। यह अच्छा है, लेकिन यह हुक कस्टमरस्ब्लॉग_व्यू ($ नोड, $ view_mode) काम नहीं आया। इसलिए मैंने कस्टम व्यू मोड के लिए कस्टम tpl बनाने के लिए function गुमनाम_profile_preprocess_node (& $ var) के साथ hook_preprocess_node का उपयोग किया।
मेहरदाद २०

मैंने इस कोड में इस्तेमाल किए गए हुक के बारे में टिप्पणियां जोड़ दी हैं
वक्यूरियस

10

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

यदि आप यह सब कोड में करना चाहते हैं, तो exam_example उदाहरण मॉड्यूल से एक दृश्य मोड IIRC है। Drupal Commerce में कस्टम व्यू मोड के साथ कई कस्टम इकाइयाँ भी हैं।


धन्यवाद, लेकिन अतिरिक्त मॉड्यूल स्थापित करने की सराहना की हैकिंग मॉड्यूल कोड कुछ उपयोगी दे सकता है इस मॉड्यूल के लिए धन्यवाद नहीं कर रहा है
werqious

@werqious अद्यतन उत्तर
एंडी

1

यदि आप डिस्प्ले सूट का उपयोग कर रहे हैं, तो सुनिश्चित करें कि ds_ui मॉड्यूल सक्षम है और मौजूदा / सूची या नए व्यू मोड बनाने के लिए व्यवस्थापन / संरचना / ds / view_modes पर जाएं।


1

मुझे पता है कि यह एक पुराना विषय है, लेकिन मैंने अधिकांश उपयोग के मामलों के लिए ठीक काम करने के लिए निम्न विधि ढूंढी है।

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

फ़ाइल 1: my_module_view_modes.module

<?php
//Add more view modes for content type displays, in addition to default and teaser.
function almagest_view_modes_entity_info_alter(&$entity_info) {

//NB: media_ prefix required.
//You can repeat the following section for any view modes you'd like to create.

// First View Mode
// tag 1 references the entity type, ex. node or file
// tag 3 provides a machine name for your mode
  $entity_info['node']['view modes']['my_view_mode'] = array(
    'label' => t('My View Mode'), // This is what you'll see in your "Manage Display" tab.
    'custom settings' => TRUE,
  );

// Another View Mode    
  $entity_info['file']['view modes']['my_other_view_mode'] = array(
    'label' => t('Another View Mode'),
    'custom settings' => TRUE,
  );
}

फाइल 2: my_module_view_modes.info

name = My Module View Modes
description = Add additional "View Modes" for entities in this module. Helpful for additional displays in views or node rendering.
package = My Modules
version = 7.x - 0.1
core = 7.x

इन दो फ़ाइलों को अपने मॉड्यूल फ़ोल्डर में my_module_view_mode फ़ोल्डर में सहेजें और सक्षम करें। अपना कैश साफ़ करें और अब आप उनकी संबंधित संस्थाओं में नए दृश्य मोड देखेंगे।


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