Saya mencoba menggunakan l()
untuk mendapatkan sesuatu seperti <a href='#' ...>
, untuk keperluan panggilan ajax. /programming/1698453/drupal-creating-anchor-only-link-with-l sangat dekat dengan hal yang benar - gunakan opsi dalam l()
suka 'fragment' => 'foo'
membuat tautan seperti <a href='#foo'...>
- tapi saya mencoba mendapatkan '#' yang bersih. Apakah ada cara untuk melakukan ini, atau haruskah saya memasukkan sesuatu sebagai bagian dari fragmen dan tidak khawatir tentang hal itu?
sumber
javascript:void(0)
javascript:
danjavascript:void(0)
sama. Satu-satunya perbedaan adalah "void (0)" :)PHP mengetik waktu kuis pop! (Pengungkapan penuh: Saya tidak menang di kantor kami).
Seperti yang sudah ditunjukkan, ini adalah kode
l()
yang kami perhatikan:Jadi inilah pertanyaannya: Nilai apa yang dilemparkan ke string kosong tetapi melewati yang berikut?
Jawabannya adalah
FALSE
:!Jadi, kita bisa mencoba ini:
Yang memberi kita:
Untungnya kita dapat menghapus garis miring dengan meneruskan
external => TRUE
:Yang memberi kita:
Ledakan. Hal-hal yang kami lakukan untuk menghindari merangkai string html secara manual, eh?
Nota bene:
Saya tidak yakin saya benar-benar merekomendasikan mencetak tautan seperti ini dari php dalam keadaan normal. Tanpa javascript Anda, semua tautan itu akan membuatnya melompat pengguna Anda ke bagian atas halaman ( yang, sedikit mengejutkan saya, adalah perilaku khusus ). Mungkin harus menunjuk ke suatu tempat yang berfungsi tanpa javascript.
Jika tautan benar-benar hanya masuk akal dengan javascript (seperti kontrol untuk tayangan slide hanya-js atau sesuatu), saya pikir lebih baik menambahkan tautan ke halaman dengan javascript. Atau, jika Anda benar-benar ingin meletakkannya di sumber Anda, pastikan itu
display:none
secara default. Drupal memiliki.js
kelas pada html untuk kemudian menunjukkannya ketika javascript ada.sumber
Sayangnya
url()
fungsi (yangl()
memanggil secara internal) cukup banyak nukes setiap peluang fragmen kosong dengan baris berikut:Itu memeriksa untuk memastikan fragmen itu bukan string kosong, yang adalah apa yang Anda harus lulus untuk mendapatkan bersih
#
. Saya pikir solusi termudah adalah dengan memilih id dari elemen yang cocok di suatu tempat di halaman dan menggunakannya untuk fragmen sebagai gantinya (ataujavascript:void
seperti yang disebutkan Sithu).Namun ... cara yang paling mudah diakses (dan selanjutnya, di banyak negara, cara legal; pikirkan bagian 508 di Amerika Serikat, DDA di Inggris, dll.) Adalah menyediakan konten yang sedang dimuat / disesuaikan dengan tautan Anda di halaman terpisah, dan gunakan URL untuk halaman itu sebagai tautan href sebagai gantinya. Anda kemudian akan menggunakan javascript untuk menghentikan acara pada tautan dari benar-benar mengarahkan ulang halaman untuk browser yang telah diaktifkan.
Dengan begitu Anda memiliki konten cadangan untuk pengguna tanpa javascript, Anda tetap legal, dan Anda membuat semua orang dan anjing mereka senang :)
sumber
print drupal_json_output($output)
di halaman panggilan ajax saya.Anda tidak dapat menggunakan bersih
#
.Tetapi mungkin untuk menambahkan
space symbol
setelah#
:sumber
Saya hanya memiliki masalah yang sama, tetapi tidak ada solusi yang memuaskan, jadi saya membuat sendiri:
Ini menghasilkan bersih
#
sumber
<a href="# ">link</a>
untuk saya.Saya akan menggunakan render ketik html_tag sebagai gantinya karena saya percaya tautan render menerima perhatian khusus dari Drupal. Kelemahannya adalah tidak ada fungsi pintas untuk itu, jadi kita harus menggunakan array render:
sumber
Ini pada dasarnya adalah jawaban yang sama dengan yang saya posting di sini ... Pengaturan
fragment
ke satu ruang akan dikonversi menjadi a#
, dan$current_path
disertakan karena jika tidak, tautan hanya akan diatur kewww.example.com/#
sebagai gantiwww.example.com/current-page#
:sumber