Verhindern Sie, dass Drupal # in URLs als% 23 umschreibt


7

Ich habe ein Feld, in dem ich die Ausgabe umschreibe, sie beschneide und einen Link zum Lesen bereitstelle. Der Link "Weitere Informationen" enthält ein #, da es sich um einen Seitenanker handelt, der ein Ansichtsakkordeon auf der Zielseite auslöst.

Views konvertiert das Zeichen # in% 23 im tatsächlich angezeigten Link, wodurch der Link unterbrochen wird.

Wie kann ich es wieder in ein # -Zeichen in der URL konvertieren?


Etwas verwandt: drupal.stackexchange.com/questions/21124/… . Ich musste auf die Vorverarbeitung der Ansicht zurückgreifen, ich konnte sie nicht über die Benutzeroberfläche zum Laufen bringen
Clive

Antworten:


3
function drupal_urlencode($text) {
  if (variable_get('clean_url', '0')) {
    return str_replace(array('%2F', '%3F', '%3D', '%26', '%2523'),
                       array('/', '?', '=', '&', '#'),
                       urlencode($text));
  }
  else {
    return str_replace('%2F', '/', urlencode($text));
  }
}

3

Das war es also, was wir letztendlich getan haben, ohne dass Vorverarbeitungen oder Überschreibungen erforderlich waren. Vielen Dank an Peter Bull von Acquia für die Hilfe:

Wir haben dies mit einigen zusätzlichen Ansichtsfeldern behandelt, um den HTML-Code neu zu schreiben.

  1. Es wurde ein zusätzliches Feld für die Begriffsbeschreibung hinzugefügt, das mit dem identisch ist, das Sie derzeit hatten, außer dass Sie "Von Anzeige ausschließen" auswählen und den "Mehr-Link" entfernen.

  2. Die Reihenfolge der Felder wurde geändert, sodass das neue Begriffsbeschreibungsfeld vor dem vorhandenen geladen wird.

  3. Das ursprüngliche Begriffsbeschreibungsfeld wurde bearbeitet. Aktivieren Sie "Ausgabe dieses Felds neu schreiben", setzen Sie das Token für das neue Feld in den Textbereich und hängen Sie den HTML-Code für Ihren Link an. Sie schreiben die HTML-Ausgabe also wie folgt um:

[token-for-new-term-description-field] <a href="https://drupal.stackexchange.com/mypagewiththeview#training-block-[counter]" class="foo">more</a>

Dann habe ich den weiteren Link entfernt, da er in der obigen Umschreibung enthalten war.

Diese Problemumgehung behält die abgeschnittene Ausgabe des Beschreibungsfelds bei und ermöglicht es Ihnen, den Link mit der entsprechenden Zähler-ID im Anker zu rendern, ohne diesen Pfad durch l () und check_plain () auszuführen.

Wird auch benötigt, um dem Link ein / voranzustellen, damit er root-relativ ist. Da es nicht über l () übergeben wird, wird dies nicht automatisch durchgeführt. Wenn diese Ansichtsseite einen Pfad hat, der nicht relativ zur Docroot ist, können fehlerhafte Links angezeigt werden.

Wheeeee!


2
$url = l(t("title of your page"),"$link_url",array('fragment' => 'hash url without #'));

Das erste Argument ist der Titel Ihrer Seite

Das zweite Argument ist $ link_url und bedeutet ex. www.google.com/link_url.

und das letzte ist ein Fragmentarray in diesem Array. Sie können den Link übergeben, den Sie nach # übergeben möchten

Ex. http://domain.com/india#rajkot, damit Sie keine andere Konvertierung codieren oder decodieren müssen

volle Syntax ist

l(t('My Anchor Link'), '', array(
 'fragment' => ' ',
 'external' => TRUE,
 'attributes' => array(
 'title' => 'Title here.'
 ),
 ));
?>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.