web-dev-qa-db-ja.com

ページマネージャー、パネル、テーマの提案

ページマネージャーとテーマの提案

2種類のレイアウトがあります

custom_2col_brick
custom_1col_landing

選択したレイアウトに従ってページをレンダリングする必要があります。基本的に、レイアウトごとに2つのページテンプレートが必要でした。次のようなもの:

page__custom_2col_brick.html.twig
page__custom_1col_landing.html.twig

これを行う方法はありますか?

Drupal 7では次のようにできますが、panels_get_current_page_displayがDrupal 8で機能しません

/**
 * Implements hook_preprocess_page().
 *
 * @see page.tpl.php
 */

function THEME_preprocess_page(&$variables) {

    if (module_exists('ctools') && module_exists('page_manager')) {
        $display = panels_get_current_page_display();
        $layout = (isset($display->layout)) ? $display->layout : false;

        /* layout e.g column_one_fluid, column_three_fluid etc. */
        $fluid   =  $layout ? preg_match("/\s*.+_fluid$/", $layout) : false;

        /* layout e.g column_one_landing, column_three_landing_fluid etc. */
        $landing =  $layout ? preg_match("/\s*.+_landing$|\s*.+_landing_fluid$/", $layout) : false;

        $variables['page_fluid'] = ($fluid) ? true : false;
        $variables['page_landing'] = ($landing) ? true : false;

        if($fluid) {
             $variables['theme_hook_suggestions'][] = 'page__fluid';
        }
        if($landing) {
            $variables['theme_hook_suggestions'][] = 'page__landing';
        }

    }
2
kLezer

hook_theme_suggestions_HOOK_alter() および \ Drupal :: routeMatch()-> getRouteObject() を使用します。

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function mytheme_theme_suggestions_page_alter(&$suggestions, &$vars) {
  $request = \Drupal::routeMatch()->getRouteObject();
  if ($request->getDefault('_entity_view') === 'page_manager_page_variant') {
    $page_name = $request->getDefault('page_manager_page');
    $page_variant = $request->getDefault('page_manager_page_variant');
    $suggestions[] = 'page__page_manager';
    $suggestions[] = 'page__page_manager__' . $page_name;
    $suggestions[] = 'page__page_manager__' . $page_name . '__' . $page_variant;
  }
}
1
gambry

まだ持っていない場合は、themeフォルダーにyourtheme.layouts.ymlファイルを作成してください。そこで、リージョン、プレビューアイコン、ラベルを定義します。

custom_2col_brick:
  label: Two Column Brick
  category: My Custom Layouts
  template: layouts/custom_2col_brick
  icon: layouts/custom_2col_brick.png
  regions:
    left:
      label: Left
    right:
      label: Right
    footer:
      label: Footer
custom_1col_landing:
  label: One Column Landing
  category: My Custom Layouts
  template: layouts/custom_1col_landing
  icon: layouts/custom_1col_landing.png
  regions:
    main:
      label: Main Region
    footer:
      label: Footer

これで、レイアウトフォルダーにpage__custom_2col_brick.html.twigファイルとpage__custom_1col_landing.html.twigファイルを作成できます。そこで、テンプレートを定義できます。たとえば、custom_1col_landing.html.twigには

<div class="one-column-layout">
    <div class="row main">
        {{ content.main }}
    </div>
    <div class="row expanded one-column-footer">
        {{ content.footer }}
    </div>
</div>

完了すると、次のファイルができます。 (プレビューアイコンはオプションです)

/yourtheme/yourtheme.layouts.yml
/yourtheme/layouts/custom_2col_brick.html.twig
/yourtheme/layouts/custom_1col_landing.twig
1
Matt

ギャンブリーの答えを拡張する:

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function mytheme_theme_suggestions_page_alter(&$suggestions, &$vars) {
    $request = \Drupal::routeMatch()->getRouteObject();
    if ($request->getDefault('_entity_view') === 'page_manager_page_variant') {
        $page_variant = $request->getDefault('page_manager_page_variant');
        $name = 'page_manager.page_variant.' . $page_variant;
        $config = \Drupal::configFactory()->getEditable($name);
        if ($config->get('variant') === 'panels_variant') {
            $layout_id = $config->get('variant_settings.layout');
            $suggestions[] = 'page__page-manager';
            $suggestions[] = 'page__page-manager__' . $layout_id;
        }
    }
}

レイアウトIDが表示されます。私の場合、デフォルトの1列のレイアウトを使用するパネルがあり、次のtwigテンプレートを使用できます。

  • page--page-manager--layout-onecol.html.twig
  • page--page-manager.html.twig
  • page.html.twig

ページの重要な部分についてはパネルレイアウトのtwigファイル(yourtheme.layouts.ymlメソッド)を使用する必要があることをマットに同意します。パネルレイアウトに基づく全体的なページテンプレート。

0
joncjordan