Aktuelle Seite abfragen
am 23.10.2009 - 11:27 Uhr in
Hallo,
wie kann ich in Drupal die momentan angezeigte Seite abfragen?
Kann ich beispielsweise in einem Block, der auf mehreren Seiten angezeigt wird eine Bedingung erstellen, die etwa folgendermaßen ausschaut:
If (seite == "about.php") { echo "xxxxx"; }
Funktioniert das auch, wenn die seite about.php Parameter enthält? z.B. about.php?id=2
Danke und Gruß,
Nick Dilis
- Anmelden oder Registrieren um Kommentare zu schreiben

Re: Aktuelle Seite abfragen
am 23.10.2009 - 12:11 Uhr
URLs haben in Drupal die Form
http://www.example.com/path/to/drupal/index.php?q=foo/bar/baz&a1=wert1&arg2=wert2Wenn du statdessen soetwas wie
http://www.example.com/path/to/drupal/foo/bar/baz?a1=wert1&arg2=wert2siehst, dann liegt das an URL-Rewriting und ist nur von außen sichtbar. Wenn du soetwas wie
http://www.example.com/path/to/drupal/about.htmlsiehst, dann liegt das wahrscheinlich an Pfad-Aliasen und ist ebenfalls nur von außen sichtbar. Intern arbeitet Drupal immer mit der ersten form.
Die anzuzeigende Seite wird durch
q=foo/bar/bazbestimmt. So kannst du auf diesen URL-Parameter zugreifen:<?php
if (arg(0) == 'foo' && arg(1) == 'bar' && arg(2) == 'baz') {
echo "Ich bin irgendwo unterhalb von foo/bar/baz";
if (!arg(3)) {
echo "Ich bin genau auf foo/bar/baz";
}
}
?>
So kannst du herausfinden, ob gerade ein Node angezeigt wird:
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
echo "Es wird Node $nid angezeigt";
}
?>
--

Zitat: wie kann ich in
am 23.10.2009 - 12:18 Uhr
wie kann ich in Drupal die momentan angezeigte Seite abfragen?
Kann ich beispielsweise in einem Block, der auf mehreren Seiten angezeigt wird eine Bedingung erstellen, die etwa folgendermaßen ausschaut:
If (seite == "about.php") { echo "xxxxx"; }
Funktioniert das auch, wenn die seite about.php Parameter enthält? z.B. about.php?id=2
darf ma fragen, was du genau vor hast? Wenn lediglich um Blöcke geht, dann kannst du die Sichtbarkeit auf spezielle Seiten über die Einstellungen des Blocks festlegen.
traxer schrieb So kannst du
am 23.10.2009 - 14:06 Uhr
So kannst du auf diesen URL-Parameter zugreifen:
<?php
if (arg(0) == 'foo' && arg(1) == 'bar' && arg(2) == 'baz') {
echo "Ich bin irgendwo unterhalb von foo/bar/baz";
if (!arg(3)) {
echo "Ich bin genau auf foo/bar/baz";
}
}
?>
Hallo Traxer,
vielen Dank für die Veranschaulichung.
Wird aber in dem Beispiel nicht immer die Meldung "Ich bin irgendwo unterhalb von foo/bar/baz" ausgegeben die bei fehlendem arg(3) zusätzlich durch die Meldung "Ich bin genau auf foo/bar/baz" ergänzt wird?
Danke und Gruß,
Nick Dilis
Hallo Stebeg, das ist mir
am 23.10.2009 - 14:13 Uhr
Hallo Stebeg,
das ist mir bekannt, danke für den Hinweis
Ich habe einen Block, der auf mehreren Seiten angezeigt wird, jedoch nur eine MySQL Abfrage starten soll, wenn eine bestimmte seite angezeigt wird.
Sicherlich könnte ich jetzt zwei Blocks dafür erstellen, einmal mit und einmal ohne die MySQL-Abfrage, aber ich denke, dass die Lösung mit einem Block und einer integrierten Wenn-Dann Abfrage die bessere Lösung ist.
Gruß,
Nick Dilis
Re: traxer schrieb So kannst du
am 24.10.2009 - 10:23 Uhr
Wird aber in dem Beispiel nicht immer die Meldung "Ich bin irgendwo unterhalb von foo/bar/baz" ausgegeben ...
Nein, wie kommst du darauf? Bei
http://www.example.com/index.php?q=adminwird es nicht ausgegeben, daarg(0) == 'foo'nicht erfüllt ist.--

traxer schrieb Nikdilis
am 24.10.2009 - 15:03 Uhr
Wird aber in dem Beispiel nicht immer die Meldung "Ich bin irgendwo unterhalb von foo/bar/baz" ausgegeben ...
Nein, wie kommst du darauf? Bei
http://www.example.com/index.php?q=adminwird es nicht ausgegeben, daarg(0) == 'foo'nicht erfüllt ist.--

Hallo Traxer,
das war sehr ungenau formuliert von mir, sorry.
Ich meinte, wenn ich genau auf der Seite foo/bar/baz bin, dann wird meinem Verständnis nach in Deinem Beispiel zunächst die Meldung "Ich bin irgendwo unterhalb von foo/bar/baz" ausgegeben; Da aber keine 3. Komponente in der Pfadangabe des Adressfelds folgt, wird daraufhin zusätzlich die Meldung "Ich bin genau auf foo/bar/baz" ausgegeben.
Besser:
(erklärt am Beispiel der Seite: Drupalverzeichnis/node/37)
<?phpif (arg(0) == 'node' && arg(1) == '37') {
if (!arg(2)) {
//im Adressfeld steht die Seite: "Drupalverzeichnis/node/37"
//der folgende Code führt zu folgender Bildschirmausgabe:
//"Ich bin genau auf node/37
//Array ( [0] => node [1] => 37 ) "
echo "Ich bin genau auf node/37 <br>";
print_r (arg());
}
else {
//im Adressfeld steht die Seite: "Drupalverzeichnis/node/37/Irgendwas"
//der folgende Code führt zu folgender Bildschirmausgabe:
//"Ich bin unterhalb von node/37
//Array ( [0] => node [1] => 37 [2] => Irgendwas ) "
echo "Ich bin unterhalb von node/37 <br>";
print_r (arg());
}
}
?>
Mehr Informationen zu der Drupal Funktion Arg gibt es hier:
http://api.drupal.org/api/function/arg
Danke nochmals für Dein Beispiel. Dadurch habe ich es verstanden.
Und an dieser Stelle auch einmal ein dickes Lob an drupalcenter.de, wo man immer schnell Hilfe findet. Echt super!
Gruß,
Nick Dilis