PHP typecasting pop thời gian đố! (Tiết lộ đầy đủ: Tôi đã không giành chiến thắng trong văn phòng của chúng tôi).
Như đã chỉ ra, đây là mã l()
mà chúng tôi quan tâm:
if (isset($options['fragment']) && $options['fragment'] !== '') {
$options['fragment'] = '#' . $options['fragment'];
}
Vì vậy, đây là câu hỏi: Giá trị nào chuyển thành một chuỗi rỗng nhưng vượt qua sau đây?
(isset($var) && $var !== '')
Câu trả lời là : FALSE
!
Vì vậy, chúng ta có thể thử điều này:
l(t('My link'), NULL, array('fragment' => FALSE));
Cung cấp cho chúng tôi:
<a href="/#">My link</a>
Rất may, chúng ta có thể loại bỏ dấu gạch chéo hàng đầu đó bằng cách chuyển qua external => TRUE
:
l(t('My link'), NULL, array('external' => TRUE, 'fragment' => FALSE));
Cung cấp cho chúng tôi:
<a href="#">My link</a>
Bùng nổ. Những điều chúng tôi làm để tránh nối chuỗi html bằng tay, eh?
Bản thảo:
Tôi không chắc chắn tôi thực sự khuyên bạn nên in một liên kết như thế này từ php trong các trường hợp thông thường. Không có javascript của bạn, tất cả các liên kết sẽ làm điều đó sẽ đưa người dùng của bạn lên đầu trang ( điều mà tôi hơi ngạc nhiên là hành vi được suy đoán ). Nó có lẽ nên chỉ ra một nơi nào đó hoạt động mà không có javascript.
Nếu liên kết thực sự chỉ có ý nghĩa với javascript xung quanh (như các điều khiển cho trình chiếu chỉ js hoặc một cái gì đó), tôi nghĩ tốt hơn là thêm liên kết vào trang bằng javascript. Ngoài ra, nếu bạn thực sự muốn đặt nó vào nguồn của mình, hãy đảm bảo rằng nó display:none
theo mặc định. Drupal có .js
lớp trên html để hiển thị nó khi javascript ở xung quanh.
javascript:void(0)