Bagaimana cara saya tema tautan?

8

Dalam Drupal 7 ini mungkin.

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

Tapi saya sudah mencoba ini dengan Drupal 8, dan tidak menghasilkan apa-apa.

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

Apakah ada cara saya dapat membuat tautan tanpa harus memanggil plugin Tautan secara langsung, atau membuat fungsi tema saya sendiri?

Saya menamai formatter grup grup, yang harus menampilkan array render.
Penggunaan drupal_render()sudah usang dan tidak boleh dipanggil secara langsung; Saya menggunakannya di sini untuk membuat contoh saya lebih jelas.

leon.nk
sumber
Sebenarnya ini seharusnya berhasil. Apa artinya tidak menghasilkan apa-apa? Di mana Anda mencetak HTML yang dirender ini ?? drupal_render () sudah usang. Hubungi RenderService secara langsung: \ Drupal :: service ('renderer') -> render ($ elements, $ is_recursive_call) Hanya untuk menghasilkan tautan Anda juga dapat menggunakan: Tautan :: fromTextAndUrl ($ teks, Url $ url) Lihat tautan kelas .
rémy
Apa yang ingin Anda tema ??
rémy
Terima kasih atas jawabannya, tetapi sebagaimana dinyatakan saya tidak ingin memanggil plugin Tautan secara langsung. Saya telah memperbarui pertanyaan saya dengan info latar belakang yang lebih sedikit untuk memahami skenario saya.
leon.nk
Telah menambahkan info tentang apa yang saya maksudkan dengan pertanyaan.
leon.nk

Jawaban:

8

Saya pikir masalah dengan kode Drupal 8 Anda adalah '#url' membutuhkan objek URL.

URL eksternal

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

URL internal dari suatu rute

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

Di Drupal 8 Anda tidak seharusnya membuat sendiri. Saat mengirim kode dari Drupal 7, hapus semua render dan kembalikan hanya render array.

4k4
sumber
Terima kasih banyak, ini berhasil! Ya saya tidak drupal_render()langsung, itu hanya untuk contoh.
leon.nk
1

Berikut adalah contoh cara merender tautan di Drupal 8 dengan kelas khusus. Agak aneh, tetapi opsi diteruskan ke URL, bukan fungsi tautan.

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);

Ini berguna dalam formatter bidang, yang mengharapkan markup dikembalikan. Jika Anda melakukan ini di tempat lain, yang terbaik adalah mengonversinya menjadi item array render tautan.

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)
];
oknate
sumber