2016-12-09 4 views
1

Drupal 8のnode.html.twigでサイドバーを呼び出すことはできますか?そのようなDrupal 8:node.html.twigのサイドバー

何か:

<article{{ attributes }}> 

    {{ title_prefix }} 
    {% if not page %} 
    <h2{{ title_attributes }}> 
     <a href="{{ url }}" rel="bookmark">{{ label }}</a> 
    </h2> 
    {% endif %} 
    {{ title_suffix }} 

    {% if display_submitted %} 
    <footer> 
     {{ author_picture }} 
     <div{{ author_attributes }}> 
     {% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %} 
     {{ metadata }} 
     </div> 
    </footer> 
    {% endif %} 

    <div{{ content_attributes }}> 
    {{ content }} 
    </div> 
<div{{ content_attributes }}> 
    {{ sidebar}} 
    </div> 

私は、各ノードごとに異なるサイドバーを表示したいと思います。

答えて

2

あなたはこのソリューションを試すことができますが、ここでhttp://atendesigngroup.com/blog/making-region-content-available-node-templates-drupal-8が見つかりました:

/** 
* Implements hook_preprocess_node() for NODE document templates. 
*/ 
function THEME_preprocess_node(&$variables) { 
    // Allowed view modes 
    $view_mode = $variables['view_mode']; // Retrieve view mode 
    $allowed_view_modes = ['full']; // Array of allowed view modes (for performance so as to not execute on unneeded nodes) 

    // If view mode is in allowed view modes list, pass to THEME_add_regions_to_node() 
    if(in_array($view_mode, $allowed_view_modes)) { 
    // Allowed regions (for performance so as to not execute for unneeded region) 
    $allowed_regions = ['primary_content']; 
    THEME_add_regions_to_node($allowed_regions, $variables); 
    } 
} 

/** 
* THEME_add_regions_to_node 
*/ 

function THEME_add_regions_to_node($allowed_regions, &$variables) { 
    // Retrieve active theme 
    $theme = \Drupal::theme()->getActiveTheme()->getName(); 

    // Retrieve theme regions 
    $available_regions = system_region_list($theme, 'REGIONS_ALL'); 

    // Validate allowed regions with available regions 
    $regions = array_intersect(array_keys($available_regions), $allowed_regions); 

    // For each region 
    foreach ($regions as $key => $region) { 

    // Load region blocks 
    $blocks = entity_load_multiple_by_properties('block', array('theme' => $theme, 'region' => $region)); 

    // Sort ‘em 
    uasort($blocks, 'Drupal\block\Entity\Block::sort'); 

    // Capture viewable blocks and their settings to $build 
    $build = array(); 
    foreach ($blocks as $key => $block) { 
     if ($block->access('view')) { 
     $build[$key] = entity_view($block, 'block'); 
     } 
    } 

    // Add build to region 
    $variables[$region] = $build; 
    } 
} 

私はノードを無効にするために、このフックを使用していました。 node.html.twigに{{primary_content}}を渡すことができます

+0

ありがとう、完璧に動作します! –