0

私の Drupal 8 サイトには、「治療」や「チーム」などの用語でタグ付けされたセクションがあり、単一のコンテンツ (各治療、各人 ...) はアンカー付きのノードです。ノード (たとえば、チーム全体) が 1 つのページに表示されます。私のメニューでは、アンカーハッシュタグを追加して、単一の治療またはチームメンバーに正確にスクロールすることは問題ではありません.

ただし、別のノードにリンクするためにエンティティ参照も使用します。これらのリンクは、システム内で自動的に生成されます (例、therapy/massage.html)。ここで、すべてのノード リンクを (たとえば) xxx.xxx.com/therapy#massage に書き換える書き換えルールを作成したいと考えています。ここで、"massage" はノードのタイトルです。

ヒント: pathautoでこれを行うことはできません! 私はすでにそれを試しました。

よろしくお願いします。

4

1 に答える 1

0

Url::fromUserInput() で可能なようです

次のリンクを見てください: https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Url.php/function/Url%3A%3AfromUserInput/8.1.x

コードは次のようになります

$url = Url::fromUserInput('#' . $node->getTitle());

これをどこに置くかは、ページの作成方法によって異なります。それが標準ビュー (私が想定している) である場合は、リンクの作成にフックして URL を変更する必要があります。

上記の場合、モジュールを作成し、フックを .module ファイルに追加する必要があります。

必要なフックは hook_link_alter() です。ドキュメントはこちらにあります: https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Menu!menu.api.php/関数/hook_link_alter/8.1.x

/**
 * Implements hook_link_alter().
 */
function module_link_alter(&$variables) {
  /** @var NodeInterface $node */
  $node = $variables['options']['node'];

  if ($node != NULL){
    $variables['url'] = Url::fromUserInput('#' . $node->getTitle());
  }

上記のコードはあなたのやり方であなたを導くはずです.私はまだ試していないので、うまくいくかどうかは完全にはわかりません.

お役に立てれば!

于 2016-05-02T07:05:20.703 に答える