リンクのテーマを設定するにはどうすればよいですか?


8

Drupal 7ではこれが可能でした。

$link = array(
  '#type'  => 'link',
  '#title' => t('My Title'),
  '#href'  => 'node/1',
);
drupal_render($link);

しかし、私はこれをDrupal 8で試しましたが、何も出力しません。

$link = array(
  '#type' => 'link',
  '#title' => t('test'),
  '#url' => 'node/1',
);
drupal_render($link);

Linkプラグインを直接呼び出さずにリンクをレンダリングしたり、独自のテーマ関数を作成したりする方法はありますか?

レンダー配列を出力する必要があるフィールドグループフォーマッターのテーマを設定しています。
の使用drupal_render()は非推奨であり、直接呼び出すことはできません。ここでは、例をわかりやすくするために使用しています。


実際にはこれでうまくいくはずです。何も出力しないとはどういう意味ですか?このレンダリングされたHTMLはどこに印刷しますか?drupal_render()は非推奨です。RenderServiceを直接呼び出します:\ Drupal :: service( 'renderer')-> render($ elements、$ is_recursive_call)使用できるリンクを生成するためだけに:Link :: fromTextAndUrl($ text、Url $ url)リンクを参照してくださいクラス
レミー

何をテーマにしたいですか?
レミー

答えてくれてありがとう、しかし述べたように私は直接リンクプラグインを呼び出したくありません。私のシナリオを理解するために、質問の背景情報を少し増やしました。
leon.nk 2016年

質問のテーマに関する情報を追加しました。
leon.nk 2016年

回答:


8

Drupal 8コードの問題は、「#url」にURLオブジェクトが必要なことだと思います。

外部URL

'#url' => Url::fromUri('https://www.drupal.org'),

ルートからの内部URL

'#url' => Url::fromRoute('entity.node.canonical', ['node' => 1]),

Drupal 8では、自分自身をレンダリングすることは想定されていません。Drupal 7からコードを移植する場合、すべてのレンダリングを削除し、レンダリング配列のみを返します。


これでうまくいきました。はい私はdrupal_render()直接ではありません、それは単なる例でした。
leon.nk 2016年


1

Drupal 8でカスタムクラスを使用してリンクをレンダリングする方法の例を次に示します。少し奇妙ですが、オプションはリンク関数ではなくURLに渡されます。

use Drupal\Core\Url;

$options = array('attributes' => array('class' => 'my-custom-class'));
$url = Url::fromUri('http://www.example.com', $options);
$markup = \Drupal::l(t('Link Text Goes Here!'), $url);

これは、マークアップが返されることを期待するフィールドフォーマッタで役立ちます。他の場所でこれを行う場合は、リンクレンダー配列項目に変換するのが最善です。

use Drupal\Core\Url;

$options = array('attributes' => array('class' => 'my-custom-class'));
$build['examples_link'] = [
  '#title' => t('Link Text Goes Here!'),
  '#type' => 'link',
  '#url' => Url::fromUri('http://www.example.com', $options)
];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.