Katakanlah saya memperluas blockBase
Kelas untuk membuat blok kustom, dan saya menerapkan blockBuild
metode untuk membuat beberapa markup untuk blok saya. Sesuatu seperti ini:
class YourModuleBlock extends BlockBase {
/**
* Implements \Drupal\block\BlockBase::blockBuild().
*/
public function build() {
return array(
'#markup' => 'This is a block!',
);
}
}
Jika saya ingin memberikan tautan di markup ini, di D7 saya akan menggunakan l
fungsinya, tetapi ini tidak lagi tersedia ( lihat di sini ). Jadi, saya perlu menyediakan metode D8 baru untuk menghasilkan tautan. Saya hanya bisa menggunakan <a>
tag, tapi ini bukan praktik terbaik di D7.
Jadi, apa metode yang tepat untuk digunakan untuk membuat tautan dan bagaimana cara membuatnya tersedia untuk fungsi saya?
navigation
8
24ma13wg
sumber
sumber
Jawaban:
\ Drupal :: l sudah usang. Mungkin kasus ini akan bermanfaat bagi seseorang
sumber
toRenderable()
trik ini sangat berguna, terima kasih!Satu, ini belum 100% selesai, lihat masalah ini . Dengan itu, izinkan saya mengutip beberapa kode dari pemberitahuan perubahan :
Drupal 7:
Drupal 8:
Sunting: nama rute ada di
moduledirectory/modulename.routing.yml
file dan (secara default) di{router}
tabel.sumber
fromRoute('<front>')
Pilihan lain adalah membuat tautan dalam array render
Drupal memberi kami beberapa metode pembantu untuk membuat url dan tautan ke entitas.
Dan
sumber
#attributes
dapat ditambahkan karena ini adalah RenderElement .Berikut adalah beberapa contoh membuat tautan di Drupal 8. Perhatikan bahwa $ this-> t ('some text') tersedia dalam blok yang memperpanjang BlockBase. Jika Anda menyalin ini ke kelas lain yang tidak memilikinya atau menggunakannya dalam file .module, Anda mungkin perlu mengubahnya ke t () 1 .
Tautan Dasar ke sebuah simpul:
Ini membuat array render seperti ini:
Anda dapat membuat array render tanpa memuat simpul dengan cara ini:
Atau menggunakan kelas inti Tautan:
Jika Anda ingin menggunakan markup dalam teks tautan Anda, Anda tidak bisa hanya memasukkan string. Anda perlu menggunakan elemen array render:
Untuk membuat tautan absolut, Anda menambahkan opsi ini ke URL, bukan tautan:
Untuk menambahkan kelas ke tautan Anda, Anda juga perlu menambahkan ini ke URL, bukan tautan:
Untuk menambahkan string kueri ke tautan Anda, Anda juga perlu ini ke URL, bukan tautan:
Untuk mengatur tautan agar terbuka di jendela baru dengan target = _blank:
Berikut tautan ke halaman istilah taksonomi:
Inilah tautan ke halaman edit simpul:
Untuk membuat tautan eksternal:
Tautan ke beranda:
Perhatikan bahwa pada salah satu objek url ini, Anda bisa mendapatkan url sebagai string dengan memanggil:
Sebagai contoh:
sumber
link
Metode sudah ditinggalkan.Kemampuan untuk mengatur atribut tampaknya hilang atau berbelit-belit dalam contoh sebelumnya karena fungsinya tidak jelas. Ada dua cara untuk membuat tautan tergantung pada apakah ada rute atau tidak dan masing-masing berperilaku sedikit berbeda jadi di sini adalah contohnya.
Dengan sebuah rute. Ini paling masuk akal, Anda bisa menyediakannya dalam opsi.
Dengan url eksternal. Yang ini agak aneh. Tidak ada argumen opsi sehingga mungkin tampak mustahil tetapi sebenarnya OK. Alasannya adalah bahwa tautan yang tidak dapat dijelaskan tidak pernah memiliki opsi hanya URL yang mereka jelaskan. Ini berarti Anda meneruskan kelas ke URL saat Anda membuatnya dan itu hanya akan berfungsi.
Akibat dari semua ini adalah Anda juga bisa melakukan ini.
sumber
Contoh lengkap dengan atribut dan markup HTML di teks tautan:
sumber
Saya perlu menambahkan tautan ke tabel sebagai #suffix, tetapi harus meletakkannya sebagai html, untuk Mencapai ini saya lakukan
\Drupal\Core\Link::fromTextAndUrl("Add New page", Url::fromRoute('mymodule.add_new_page'))->toString();
Di mana mymodule.add_new_page adalah rute dari file modul yml saya.
sumber
Jawaban di sini memberi saya beberapa petunjuk bagus. Yang saya inginkan adalah memberikan tautan ke simpul di log saya ... Jadi, inilah yang akhirnya saya dapatkan
sumber
sumber