Bir düğüm için nasıl ek görünüm modları ekleyebilirim?


19

Özel bir içerik türü oluşturuyorum. Varsayılan olarak, düğümler yalnızca iki görünüm modunu ( fullve teaser) destekler:

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;
}

Bu düğüm türü için başka görünüm modları eklemek istiyorum, örneğin:

  • small_box
  • small_box_with_user_pic
  • big_box

ve düğümü şu kodla oluşturmak istiyoruz:

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

Herhangi bir öneri?



Tim Cosgrove'un görünüm modları hakkındaki sunumu: timcosgrove.net/drupalcon-viewmodes/#1 Yeni bir görünüm modu eklemek için hook_entity_info_alter kullanacaksınız ( örnek ).
aroo

Bu sunum harikaydı.
niksmac

1
Werqious tarafından bahsedilen bağlantı wunderkraut.com/NowOnWunderkraut/mearra/430
Andrey

Sayfa gitti. Slaytlar burada olsa da: slideshare.net/Phase2Technology/…
Kari Kääriäinen

Yanıtlar:


23

önce hook_entity_info_alter ile ek görünüm modları eklemeliyiz

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

// ek tema işlevleri veya şablonlar ekleyebilir ve hook_view ile değişkenler ekleyebiliriz

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';
  }
}

// kanca temamızda

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

    );
}

Çözümünüzü kullandım. iyi ama bu hook customuserblog_view ($ node, $ view_mode) işe yaramadı. bu nedenle özel görünüm modu için özel tpl yapmak için anonymous_profile_preprocess_node (& $ vars) işleviyle hook_preprocess_node kullandım.
Mehrdad201

Bu kodda kullanılan kancalar hakkında yorum ekledim
werqious

10

İstediğiniz tek şey özel görünüm modlarıysa, Varlık Görüntüleme Modu yardımcı olabilir. Display Suite ayrıca, özel görünüm modları oluşturmayı, yeni sözde alanlar oluşturmayı ve çeşitli görünüm modlarında farklı öğeleri yerleştirmek için hoş bir sürükle ve bırak arayüzüne sahip olmayı kolaylaştırır.

Tüm bunları kod içinde yapmak istiyorsanız , Örnekler modülünden entity_example öğesinin IIRC görünüm modu vardır. Drupal Commerce ayrıca özel görüntüleme modlarına sahip bir dizi özel varlığa sahiptir.


teşekkürler ama ek modüller yüklemek takdir edilmez bu modüller için teşekkürler modül kodlarını hack faydalı bir şey verebilir
werqious

@werqious güncellenmiş cevap
Andy

1

Display Suite kullanıyorsanız, ds_ui modülünün etkin olduğundan emin olun ve mevcut bir liste almak ve yeni görünüm modları oluşturmak için admin / structure / ds / view_modes adresine gidin.


1

Bunun daha eski bir konu olduğunu biliyorum, ancak çoğu kullanım durumunda işe yarayacak aşağıdaki yöntemi buldum.

Bu basit adımlar, yeni görünüm moduyla kendi modülünüzü oluşturmanıza yardımcı olacaktır. Oldukça basit. Atıfta bulunmak isterim, ancak bunun temelini nerede bulduğumu hatırlayamıyorum. Yine de werqious'ın cevabı ile aynı mantığı takip eder.

Dosya 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,
  );
}

Dosya 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

Bu iki dosyayı modüller klasörünüzdeki my_module_view_mode klasörünüze kaydedin ve etkinleştirin. Önbelleğinizi temizleyin ve şimdi ilgili varlıklarında yeni görünüm modlarını göreceksiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.