Saya memiliki bidang Tautan bernama field_my_link
(nama mesin).
Di dalam template Twig saya bisa mendapatkan nilai URL tautan dengan ini:
{{ node.field_my_link.uri }}
Jika di dalam URL Tautan ada URL eksternal , mis http://example.com
. Berfungsi baik.
Tapi, jika di dalam URL Tautan ada disimpan URL internal , misalnya "/node/11"
, saya mendapatkan nilai seperti ini:
"internal:/node/11"
dengan internal:
awalan " ".
Bagaimana saya bisa mendapatkan URL yang valid ?
Misalnya, jika URL tautan adalah " http://example.com
" Saya ingin " http://example.com
" (ini sudah berfungsi), jika URL tautannya adalah " /node/11
" Saya ingin URL relatif " /node/11
", jika URL tautannya adalah " <front>
" Saya ingin URL " /
", dll. .
EDIT
Saya bisa mendapatkan nilai yang saya inginkan dalam fungsi preprocess PHP, menggunakan ini:
$url = $variables['node']->get('field_my_link')->first()->getUrl();
Bagaimana saya bisa mengakses nilai yang sama dalam template Twig?
Saya tahu saya bisa melakukan ini dalam fungsi preprocess:
$variables['my_url'] = $url;
Kemudian akses url dalam Twig menggunakan {{ my_url }}
, tetapi saya akan menghindari untuk menulis fungsi preprocess setiap kali saya memiliki bidang tautan.
sumber
node.field_my_link.uri
seperti url eksternalhttp://www.example.com
?file_url(node.field_my_link.uri)
, dan jikanode.field_my_link.uri
ini"http://www.example.com"
bekerja (meninggalkan url tidak berubah), tetapi jikanode.field_my_link.uri
ini"internal:/"
kembali fungsi"/internal%3A/"
(bukan"/"
) ..node.field_my_link.entity.uri.value
mengembalikan nilai nol .. Ada ide lain?Anda dapat mengakses elemen array render secara langsung, dalam kasus Anda:
sumber
Anda harus membahas kedua kasus: URL eksternal dan internal.
Pertama mari kita periksa apakah URL itu eksternal dan cukup cetak
*.uri
.Jika itu internal kita harus mentransfer nama rute dan parameternya melalui
path($name, $parameters, $options)
fungsi Drupal .sumber
{% set url = path(node.field_link.0.url.routeName, node.field_link.0.url.routeParameters) %}
Lalu saya dapat membuat tautan khusus: `<a href="{{ url }}" class="mycustomclass">custom link text</a>
Tidak perlu praproses dan tidak perlu melalui content.field_link, jadi tidak perlu melakukan apa pun di 'Kelola tampilan' untuk bidang tautan hanya untuk mendapatkan url.Saya harus melakukan ini di Bidang Tautan di Blok. Ini bekerja dengan baik:
sumber
{{ content.field_my_link[0]['#url'] }}
tanpa render , seperti pada templat ranting, render array secara otomatis ditampilkan saat dicetak.Saya tahu ini adalah pos lama tetapi dengan versi terakhir Drupal 8 (8.6) Anda dapat langsung menampilkan url untuk kedua versi (eksternal dan internal):
Dan jika Anda perlu tahu apakah tautannya eksternal atau tidak (untuk kasus saya itu untuk target), Anda dapat menggunakannya:
Contoh:
sumber
Anda juga dapat menggunakan sesuatu seperti berikut ini, semuanya tergantung pada jenis objek yang Anda ekstrak dan nama bidang, Dalam kasus saya ini adalah paragraf dengan bidang bernama field_link dan yang berikut berfungsi:
sumber