2010-11-26 11 views
-3

ich bin ein neuling von drupal, ich kann nicht den obigen code gut folgen, hoffe jemand kann es mir erklären.ich weiß, die erste zeile ist die 0 zuweisen zu $ ​​i, Ordnen Sie dann 'Seite' einem Array zu. und ich weiß arg ist ein Array in Drupal. zum Beispiel, jetzt ist die URL example.com/node/1. wie verwendet man diese URL, um den obigen Code zu verwenden.drupal --- theme code

+1

Dieser Code könnte alles tun, wir brauchen einen Kontext, dass es verwendet wird .. Der Rest des Codes auf dieser Seite würde wahrscheinlich auch helfen .. – martynthewolf

Antwort

0

Es sieht aus wie sein Zweck ist, ID-Strings (wahrscheinlich für eine CSS-Klasse) abhängig von Pfaden zu generieren und numerische Komponenten des Pfades aus der generierten ID auszuschließen. Zum Beispiel erzeugt 'my/123/article' die ID "page-my-article".

Es scheint, dass dies von einer Funktion kommt (weil die Schleife Parameter mit arg() liest) und dass es Drupal-Pfade wie "node/123/edit" erwartet.

So würde die Funktion so etwas genannt werden:

mystery_function("my/123/article", "even/better/article"); 

Variablen:

$i ist die Variable, die den Schleifenindex

$suggestion speichert eine Zeichenfolge, die die Speicherung generierte ID Es wird auf "page" initialisiert, weil die ID die Syntax "page-SOMETHING" haben soll.

$arg kommt von der while-Schleife: es ist der Parameter für das Geheimnis Funktion einer nach dem anderen

$suggestions bestanden liest, ist ein Array, das die erzeugten IDs enthält, eine pro-Argument, um das Geheimnis-Funktion übergeben.


In der Schleife:

Die "$arg = str_replace..." -Leitung entfernt unerwünschte Zeichen wie "\" (wie auch immer diese Linie auf jeden Fall verbessert werden könnte).

Die Zeile "$suggestions[] = ..." fügt dem Array der Ergebnisse die ID hinzu.

Die „if (!is_numeric($arg)...“ Linie schließt Zahlen aus der erzeugten ID (zB „mein/123/Artikel“ ist wahrscheinlich angeblich „my-Artikel“ zu produzieren)

Die „$suggestion .= ...“ Linie hängt den Wert von „$ arg“auf den Wert von‚$ Vorschlag‘und speichert sie in‚$ Vorschlag‘


Aber ehrlich gesagt, würde ich nicht raten, diesen Code zu verwenden: ich bezweifle es, wie beabsichtigt $suggestion gegeben funktioniert, ist nicht neu initialisiert Bei jeder Schleife wird der Wert des ersten Pfades an den zweiten und den dritten usw. angehängt, und I d das ist absichtlich.

+0

der obige Code ist in "Funktion template_preprocess_page (& $ Variablen) {} "---- theme.inc --- drupal, aber ich kann nicht finden, dass es einen Aufruf für diese Funktion gibt. – enjoylife

+0

@enjoy Das ist ein Haken, der über das drupal-Theming-System aufgerufen wird, wenn drupal gerade die Variablen in page.tpl.pgp – googletorp

+0

erzeugt, aber wie das drupal-Theming-System den Haken ruft? Danke, – enjoylife

0

Höchstwahrscheinlich befindet sich dieser Code in der Vorlage template.php im preprocess_page-Hook. In diesem Fall werden Vorlagenvorschläge basierend auf einem Argument wie der Knoten-ID erstellt, um das Erstellen einer Seitenvorlage pro Knoten zu ermöglichen.

Was dieser Code tut, ist, dass es alle Argumente in der Drupal URL Loops, Dies könnte user/3, node/3, taxonomy/term/3 oder jede benutzerdefinierte URL sein.

  1. Zuerst werden einige Bereinigungen im Argument durchgeführt, um sicherzustellen, dass keine seltsamen Symbole hinzugefügt werden. Dies wird für die meisten URLs nicht benötigt, ist aber wahrscheinlich als Sicherheit vorhanden, um zu vermeiden, dass in einigen Fällen seltsame Vorlagennamen erstellt werden müssen. Dies geschieht mit str_replace
  2. Als nächstes fügt es einen Vorschlag auf der Grundlage der Arg. Der Liste hinzu.
  3. Wenn das Argument nicht numerisch ist, wird es dem Vorschlag hinzugefügt, damit es in der nächsten Schleife verwendet wird.

Die Idee ist, dass Sie mit dem oben genannten URLs werden einige Vorlagen Vorschläge erhalten hinzugefügt, die wie folgt aussehen:

  • Seite
  • Seite Benutzer
  • Seite-user-3

Und

  • Seite
  • page-Taxonomie
  • page-Taxonomie-Begriff
  • page-Taxonomie-Begriff-3

In dieser Liste Drupal wird die letzte möglich, also wenn Seite-user-3 verwenden .tpl.php existiert, das als Seitenvorlage für user/3 verwendet wird, wenn nicht page-user.tpl.php verwendet wird und so weiter.

Dies kann gewünscht werden, wenn Sie benutzerdefinierte Seitenvorlagen für die Benutzerseite oder die Knoten-Seite erstellen und gleichzeitig benutzerdefinierte Seitenvorlagen für bestimmte Benutzer erstellen können.

Dies ist jedoch nicht eine Strategie, die ich verwenden möchte. Wenn Sie dies tun, werden Sie mit vielen verschiedenen Versionen einer Seitenvorlage enden und es wird am Ende der Wartungsalbtraum entstehen, den CMS-Systeme beseitigen sollten. Wenn Sie wirklich diese vielen verschiedenen Seitenvorlagen benötigen, sollten Sie stattdessen den Kontext oder die Bereiche betrachten und stattdessen etwas Logik einbauen.