Ich versuche l()
, so etwas <a href='#' ...>
für Ajax-Calling-Zwecke zu verwenden. /programming/1698453/drupal-creating-anchor-only-link-with-l ist sehr nah an die Richtige - eine Option verwenden , in l()
wie 'fragment' => 'foo'
einen Link wie zu produzieren <a href='#foo'...>
- aber ich bin versuche ein sauberes '#' zu bekommen. Gibt es eine Möglichkeit, dies zu tun, oder sollte ich einfach etwas als Teil des Fragments einfügen und mir darüber keine Sorgen machen?
quelle
javascript:void(0)
javascript:
undjavascript:void(0)
sind gleich. Der einzige Unterschied ist "void (0)" :)Zeit für ein PHP-Typografie-Pop-Quiz! (Vollständige Offenlegung: Ich habe in unserem Büro nicht gewonnen).
Wie bereits erwähnt, ist dies der Code
l()
, mit dem wir uns befassen:Hier ist die Frage: Welcher Wert wird in eine leere Zeichenfolge umgewandelt, übergibt jedoch Folgendes?
Die Antwort lautet
FALSE
:!Also könnten wir das versuchen:
Welches gibt uns:
Zum Glück können wir diesen führenden Schrägstrich entfernen, indem wir ihn weitergeben
external => TRUE
:Welches gibt uns:
Boom. Was tun wir, um das manuelle Verketten von HTML-Strings zu vermeiden?
Nachsatz:
Ich bin mir nicht sicher, ob ich unter normalen Umständen empfehlen würde, einen solchen Link von PHP aus zu drucken. Ohne Ihr Javascript wird der gesamte Link dazu führen, dass Ihr Benutzer an den Anfang der Seite springt ( was zu meiner kleinen Überraschung ein spezielles Verhalten ist ). Es sollte wahrscheinlich irgendwo hinweisen, dass ohne Javascript funktioniert.
Wenn der Link wirklich nur mit Javascript Sinn macht (wie die Steuerelemente für eine Diashow nur mit js oder so), halte ich es für besser, den Link zur Seite mit Javascript hinzuzufügen. Wenn Sie es aber auch wirklich in Ihre Quelle einfügen möchten, vergewissern Sie sich, dass dies
display:none
standardmäßig der Fall ist . Drupal hat die.js
Klasse auf dem HTML, um sie dann anzuzeigen, wenn Javascript vorhanden ist.quelle
Leider macht die
url()
Funktion (diel()
intern aufruft) mit den folgenden Zeilen so ziemlich jede Chance auf ein leeres Fragment zunichte:Es wird überprüft, ob das Fragment keine leere Zeichenfolge ist. Dies ist die Zeichenfolge, die Sie übergeben müssen, um das Fragment zu bereinigen
#
. Ich denke, die einfachste Lösung wäre, die ID eines geeigneten Elements irgendwo auf der Seite auszuwählen und diese stattdessen für das Fragment zu verwenden (oderjavascript:void
wie Sithu es erwähnt hat).Der am besten zugängliche Weg (und später in vielen Ländern auf legalem Wege; denken Sie an Abschnitt 508 in den Staaten, die DDA in Großbritannien usw.) wäre jedoch, den Inhalt bereitzustellen, der von Ihrem Link auf geladen / angepasst wird eine separate Seite und verwenden Sie stattdessen die URL für diese Seite als href des Links. Sie würden dann JavaScript verwenden, um zu verhindern, dass das Ereignis auf dem Link die Seite für die Browser, in denen es aktiviert ist, tatsächlich umleitet.
Auf diese Weise haben Sie Fallback-Inhalte für Benutzer ohne Javascript, bleiben legal und halten alle und ihren Hund bei Laune :)
quelle
print drupal_json_output($output)
in meinem Ajax anrufende Seite.Sauber konnte man nicht gebrauchen
#
.Aber es ist möglich hinzuzufügen
space symbol
nach#
:quelle
Ich hatte nur das gleiche Problem, aber keine der Lösungen war zufriedenstellend, und so kam ich auf meine eigene:
Dies erzeugt eine saubere
#
quelle
<a href="# ">link</a>
für mich.Ich würde stattdessen den Render-Typ html_tag verwenden, da ich glaube, dass der Render- Link von Drupal besondere Aufmerksamkeit erhält. Der Nachteil ist, dass es keine Abkürzungsfunktion dafür gibt. Daher müssen wir ein Render-Array verwenden:
quelle
Dies ist im Grunde die gleiche Antwort, die ich hier gepostet habe ... Die Einstellung
fragment
auf ein einzelnes Leerzeichen wird in ein umgewandelt#
und$current_path
ist enthalten, da ansonsten der Link nur auf gesetzt wird,www.example.com/#
anstatt aufwww.example.com/current-page#
:quelle