Saya tahu saya dapat mengubah judul halaman drupal_set_title(t('Amy page title'))
, tetapi ketika saya mencobanya di Drupal 8 saya mendapatkan Tidak ada kesalahan fungsi seperti itu .
Bagaimana saya bisa mengubah judul halaman di Drupal 8?
Seperti yang Anda lihat di sini , fungsi tersebut sudah tidak digunakan lagi di Drupal 8.
Judul pada rute sekarang dapat diatur dengan berbagai cara, tergantung pada kasus penggunaan Anda. Sebelumnya hanya
drupal_set_title()
dipanggil di tempat apa pun. Ada kasus penggunaan berikut:Judul statis
Untuk judul statis, Anda menetapkan '_title' pada definisi perutean:
block.admin_add: path: '/admin/structure/block/add/{plugin_id}/{theme}' defaults: _controller: '\Drupal\block\Controller\BlockAddController::blockAddConfigureForm' _title: 'Configure block' requirements: _permission: 'administer blocks'
Judul dinamis
Jika Anda menulis controller dan Anda memerlukan judul yang dinamis, misalnya tergantung pada konfigurasi situs, gunakan _title_callback di default rute.
mymodule.test: path: '/mymodule/test' defaults: _controller: '\Drupal\mymodule\Controller\Test::getContent' _title_callback: '\Drupal\mymodule\Controller\Test::getTitle' <?php class Test { /** * Returns a page title. */ public function getTitle() { return 'Foo: ' . \Drupal::config()->get('system.site')->get('name'); } /** * Returns a page render array. */ public function getContent() { $build = array(); $build['#markup'] = 'Hello Drupal'; return $build; } } ?>
Ganti judul akhir
Jika Anda menulis pengontrol dan Anda perlu mengganti judul dari rute, Anda dapat mengembalikan #title dalam array render. Ini umumnya harus dihindari, karena judul untuk halaman ketika dirender sepenuhnya dapat berbeda dari judul dalam konteks lain (seperti dalam remah roti).
<?php class Test { /** * Renders a page with a title. * * @return array * A render array as expected by drupal_render() */ public function getContentWithTitle() { $build = array(); $build['#markup'] = 'Hello Drupal'; $build['#title'] = 'Foo: ' . Drupal::config()->get('system.site')->get('name'); return $build; } } ?>
Bendera keluaran
drupal_set_title()
Validasi output di Drupal 8 berlawanan dengan Drupal 7. Kita harus secara eksplisit menentukan PASS_THROUGH dan CHECK_PLAIN secara default di Drupal 7, sedangkan di Drupal 8 situasinya berbeda. Output otomatis diloloskan kecuali ditandai aman. Keduanya
t()
dannew FormattableMarkup
mengembalikan objek yang tidak akan lolos otomatis.$form['#title'] = $this->t('Add new shortcut');
$form['#title'] = $this->t("'%name' block", array('%name' => $info[$block->delta]['info']));
Drupal 8.5+
$request = \Drupal::request();
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
$route->setDefault('_title', 'New Title');
}
dan juga Anda dapat menggunakannya hook_preprocess_HOOK()
untuk menimpanya
/**
* Implements hook_preprocess_HOOK().
*/
function MYMODULE_preprocess_page_title(&$variables) {
// WRITE YOUR LOGIC HERE,
if ($YOUR_LOGICS === TRUE) {
$variables['title'] = 'New Title';
}
}
Ubah tag judul di kepala dokumen HTML Anda.
Ubah judul yang muncul di konten halaman.
sumber
drupal_set_title () di Drupal 8
drupal_get_title () di Drupal 8
sumber
Fungsi itu telah dihapus dari Drupal 8.
Ubah catatan: drupal_set_title () dan drupal_get_title () telah dihapus .
Anda sekarang dapat mengatur judul saat mendefinisikan rute di
modulename.routing.yml
. Contoh bagaimana hal itu bisa dilakukan, ditampilkan tautan ubah catatan di atas.sumber
Saya menemukan di D8 bahwa jika Anda ingin mengubah judul untuk tampilan entitas, Anda dapat menggunakan hook_ENTITY_TYPE_view_alter (). Misalnya, inilah cara Anda dapat mengubah tampilan entitas pengguna dengan bidang pada pengguna "field_display_name", alih-alih ID pengguna sebagai judul:
sumber
Saya telah menemukan cara lain, yang mungkin lebih sederhana jika Anda tidak memiliki controller dan ingin mengubah judul di seluruh situs web Anda. Anda dapat menggunakannya untuk mengubah judul berdasarkan simpul saat ini.
Pertama, hapus tag di html.html.twig Anda Lalu, kaitkan hook_page_attachments_alter
Anda bisa mendapatkan simpul saat istilah taksonomi dengan
sumber
Lihatlah Label Entitas Otomatis , modul kontribusi yang dibuat dengan sangat baik untuk mengatur judul node dan sejenisnya.
(Perhatikan bahwa 'judul halaman' adalah cara yang lebih sehari-hari untuk mengatakan 'label entitas', di mana 'halaman' adalah entitas konten dan 'label' mencakup judul dan setara dengan entitas lain misalnya subjek komentar, nama istilah taksonomi.)
Sementara op tampaknya meminta panduan untuk menulis kode khusus, tidak jelas dari detail yang tersedia bahwa kode kustom adalah rekomendasi terbaik. Untuk pembaca tanpa alasan yang sangat spesifik untuk menduplikasi fitur yang tersedia dari kode kontribusi, komunitas Drupal sangat menyarankan (dan pemilik situs mendapat manfaat besar dari) mengadopsi modul yang ada.
sumber
drupal_set_title()
dandrupal_get_title()
keduanya dihapus dari drupal 8 tetapi yang terbaik adalah ini ada blok terpisah untukpage_title
. Pengguna dapat menyembunyikan atau menambahkan blok ini di halaman / wilayah mana saja.Ada 2 solusi untuk ini.
title_block
pada halaman tertentu dan tambahkan blok khusus baru dengan beberapa markup untuk judul. Sekarang tempatkan blok ini tepat setelahtitle_block
di bagian blok drupal.Dengan menggunakan
hook_preprocess_block()
fungsi dicustom_theme.theme
file Anda .Berikut ini contoh kode:
Dalam kasus saya, saya telah menggunakan metode ke-2 di atas, yang hanya akan berfungsi untuk halaman profil pengguna.
sumber
Saya berjuang dengan ini dan mencoba semua solusi di atas. Solusi yang akhirnya berhasil adalah:
tetapi hanya setelah saya memperbarui berat modul khusus saya:
sumber
Mendapatkan judul halaman berfungsi dengan baik seperti yang tertulis dalam jawaban @ rpayanm. Namun pengaturannya ternyata cukup rumit. Akhirnya ditemukan bahwa
hook_preprocess_HOOK()
hanya dapat digunakan untuk preprocess judul halaman dengan mudah.Dan seperti yang telah disebutkan dalam jawaban lain di sini Anda juga dapat menggunakan
hook_preprocess_html()
untuk mengatur tag judul kepala HTML yang sesuai.sumber
saya telah mengubah blok page_title untuk pengguna / uid menjadi nama bidang akun khusus yang berbeda seperti ini:
sumber