web-dev-qa-db-ja.com

ブレッドクラムをビューページに追加しますか?

ビューにパンくずリストを追加するにはどうすればよいですか? 簡単なパンくずリスト ビューを省略します。 Views breadcrumb はDrupalで正しく機能しません。8.フックを使用する簡単な方法はありますか?

編集2:多分私は何か他のものを意味しますか?

Drupal 7(カスタムブレッドクラムを使用)では、次のようになります。ビュー "Informationen"が呼び出されます。

The view is retrieved

ビューの外の1つのノードが呼び出されます。

node out of the view

Drupal 8(Easyブレッドクラムを使用)では、次のようになります。ビュー "Informationen"が呼び出されます: D8 view called

ビューの外の1つのノードが呼び出されます。

enter image description here

違いを説明できたらいいのですが。

2
Frank Giesecke

カスタムモジュールを作成する必要があります(コア> = 8.3を使用)。このコードをベースとして使用して開始します。

custom_breadcrumb.info.yml

name: 'Custom breadcrumbs'
description: 'Custom breadcrumbs implementation'
package: 'Custom'
# core: 8.x
type: module

version: '8.x-1.0'
core: '8.x'
project: 'custom_breadcrumb'
datestamp: 1443649740

custom_breadcrumb.services.yml

services:
  custom_breadcrumb.breadcrumb_views:
    class: Drupal\custom_breadcrumb\Breadcrumb\ViewsBreadcrumbBuilder
    tags:
      - { name: breadcrumb_builder, priority: 1 }

src/Breadcrumb/ViewsBreadcrumbBuilder.php

<?php

namespace Drupal\custom_breadcrumb\Breadcrumb;

use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Routing\LinkGeneratorTrait;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\Link;

class ViewsBreadcrumbBuilder implements BreadcrumbBuilderInterface {
  use LinkGeneratorTrait;
  use StringTranslationTrait;

  /**
   * @inheritdoc
   */
  public function applies(RouteMatchInterface $route_match) {
    // This breadcrumb apply only for some views.
    $parameters = $route_match->getParameters()->all();

    if (isset($parameters['view_id'])) {

       $views_id = array(
         'VIEW_MACHINE_NAME_1',
         'VIEW_MACHINE_NAME_2',
       );

       if (in_array($parameters['view_id'], $views_id)) {
         return TRUE;
       }
       return FALSE;
    }
  }

  /**
   * @inheritdoc
   */
  public function build(RouteMatchInterface $route_match) {
    // Breadcrumbs set up (cache settings are so important!).
    $breadcrumb = new \Drupal\Core\Breadcrumb\Breadcrumb();
    $breadcrumb->addCacheContexts(["url"]);
    $breadcrumb->addCacheTags(["view_id:{$parameters['view_id']}"]);

    $parameters = $route_match->getParameters()->all();
    if (isset($parameters['view_id'])) {
      if ($parameters['view_id'] == 'VIEW_MACHINE_NAME_1') {
         $breadcrumb->addLink(Link::createFromRoute(t('VIEWS NAME 1'), '<none>'));
      }
      else if ($parameters['view_id'] == 'VIEW_MACHINE_NAME_2') {
        $breadcrumb->addLink(Link::createFromRoute(t('VIEWS NAME 2'), '<none>'));
      } 
    }

    // Reverse order for this to work!!!.
    $breadcrumb->addLink(Link::createFromRoute($this->t('Home'), '<front>'));
    return $breadcrumb;
  }
}

VIEW_MACHINE_NAME_1VIEW_MACHINE_NAME_2をビューのマシン名に置き換えてください。また、VIEWS NAME 1およびVIEWS NAME 2を、各ビューに必要なブレッドクラムのタイトルに置き換えます。

2
Roger
  • ブロックレイアウトページに移動 http://drupal-823.local/admin/structure/block
  • たとえば、コンテンツの必要な領域にブロックを配置を選択します。
  • ポップアップでブレッドクラムを検索します。
  • [ブロックを配置]ボタンをクリックします

ページセクションを設定することで、ビューへのアクセスを制限できます。

enter image description here

enter image description here

1
developer