Czas na quiz pop typecasting PHP! (Pełne ujawnienie: nie wygrałem w naszym biurze).
Jak już wspomniano, jest to kod l()
, który dotyczy:
if (isset($options['fragment']) && $options['fragment'] !== '') {
$options['fragment'] = '#' . $options['fragment'];
}
Oto pytanie: jaka wartość jest rzutowana na pusty ciąg, ale przekazuje następujące?
(isset($var) && $var !== '')
Odpowiedź brzmi FALSE
:!
Więc możemy spróbować tego:
l(t('My link'), NULL, array('fragment' => FALSE));
Co daje nam:
<a href="/#">My link</a>
Na szczęście możemy usunąć to wiodące cięcie, przekazując external => TRUE
:
l(t('My link'), NULL, array('external' => TRUE, 'fragment' => FALSE));
Co daje nam:
<a href="#">My link</a>
Bum. Rzeczy, które robimy, aby uniknąć łączenia łańcuchów HTML ręcznie, co?
Postscriptum:
Nie jestem pewien, czy poleciłbym wydrukowanie takiego linku z php w normalnych okolicznościach. Bez twojego javascript, cały ten link spowoduje, że przeskoczysz użytkownika na górę strony ( co, ku mojemu zaskoczeniu, jest sprecyzowanym zachowaniem ). Prawdopodobnie powinien wskazywać gdzieś, co działa bez javascript.
Jeśli link naprawdę ma sens tylko w javascript (jak formanty pokazu slajdów w js lub coś takiego), myślę, że lepiej jest dodać link do strony za pomocą javascript. Alternatywnie, jeśli naprawdę chcesz umieścić go w swoim źródle, upewnij się, że jest to display:none
domyślnie. Drupal ma .js
klasę w html do pokazania go, gdy jest w pobliżu javascript.
javascript:void(0)