[gelöst] Umsetzungsproblem: Block-Anzeige
am 02.09.2010 - 12:20 Uhr in
Hallo,
ich habe gerade ein Denkproblem.
Um Blöcke anzuzeigen, setze ich bei mir unter "Sichtbarkeits-Einstellungen"
Diesen Block nur auf den aufgelisteten Seiten anzeigen:
users/*
Damit wird der Block unter z.B. users/benny angezeigt.
Ich möchte aber erreichen, dass der Block auf dem Sub-Pfad users/benny/bewertungen oder users/benny/gaestebuch nicht zu sehen ist. Im Moment wird er dort auch angezeigt.
Wie kann man das am besten machen/angeben?
Zeige auf users/benny aber nicht auf users/benny/wasauchimmer !
Danke und Gruß
Matthias
- Anmelden oder Registrieren um Kommentare zu schreiben

Hmmm .... ich habs mit PHP
am 02.09.2010 - 13:01 Uhr
Hmmm ....
ich habs mit PHP versucht
<?phpglobal $user;
if (arg(0) == 'user' && arg(1) == $user->uid) && arg(2) != 'bewertungen' {
return TRUE;
} else return FALSE;
?>
Damit will ich sagen: "Wenn der Pfad anders als users/name/bewertungen ist, ist TRUE" -> "Wenn der Pfad users/name/bewertungen ist = FALSE"! != ist ja ungleich!
Leider scheint Drupal den Code aber zu ignorieren.
Grübelnde Grüße
PHP
am 02.09.2010 - 13:05 Uhr
Hallo.
Aktiviere das Modul "PHP" und wähle dann bei den Sichtbarkeitseinstellungen "Show if the following PHP code returns TRUE" aus.
Dann kannst Du im Eingabefeld abfragen, ob der erste Teil des Pfades "users" ist, ein 2. Teil existiert und ein 3. Teil nicht existiert:
<?phpreturn (arg(0) == 'users' && isset(arg(1)) && !isset(arg(2)));
?>
hth,
Stefan
Hallo Stefan, PHP hab ich
am 02.09.2010 - 13:13 Uhr
Hallo Stefan,
PHP hab ich natürlich aktiviert.
Wenn ich aber
<?phpreturn (arg(0) == 'users' && isset(arg(1)) && !isset(arg(2)));
?>
eingebe, gibts ne Fehlermeldung. Fatal error: eval()'d code on line 2
Edit: da war ein ! zu viel in !isset(arg(2)))
Oha - ich kann jetzt aber nicht mehr auf meien Drupalinstallation zugreifen. Egal was ich aufrufe -> Fatal Error.
Gibt es eine Möglichkeit den eingegebenen Block-Code wieder zu löschen?
Ok - kann mir die Frage
am 02.09.2010 - 13:18 Uhr
Ok - kann mir die Frage selbst beantworten. Über PHPMyAdmin konnte ich den Code löschen
Leider ergibt
<?phpreturn (arg(0) == 'users' && isset(arg(1)) && isset(arg(2)));
?>
trotzdem ne Fehlermeldung.
Mein PHP/Drupal kommt scheinbar mit dem isset nicht klar - das Problem hatte ich schonmal.
Grübel!
Sehr eigenartig! Wenn ich
am 02.09.2010 - 13:30 Uhr
Sehr eigenartig! Wenn ich
<?phpglobal $user;
if (arg(0) == 'users' && arg(1) == $user->uid) {
return TRUE;
}
if (arg(0) == 'users' && arg(1) == $user->uid && arg(2) == 'bewertungen' ) {
return FALSE;
}
?>
verwende, wird der Block nirgends mehr angezeigt obwohl arg(0) == 'users' && arg(1) == $user->uid TRUE ist.
eval
am 02.09.2010 - 13:32 Uhr
Wieder ein Beispiel, warum eval() böse ist :)
Das "!" ist übrigens nicht zuviel gewesen, das verneint nur die Aussage "isset(arg(2))". Das Problem an der Geschichte ist die Verwendung einer Funktion als Wert einer anderen Funktion in eval() (
arg()innerhalb vonisset()).Umgehen lässt sich das mit
<?php$arg0 = arg(0);
$arg1 = arg(1);
$arguments = arg();
return (arg0 == 'users' && isset($arg1) && count($arguments) <= 2);
?>
Stefan
Ich bin sehr verwirrt. Ich
am 02.09.2010 - 13:47 Uhr
Ich bin sehr verwirrt.
Ich habe den obigen Code im Block angegeben - es erfolgt nun keine Ausgabe des Blocks mehr weder auf users/benny noch auf users/benny/sowieso
Allerdings wird auch sonst nichts ausgegeben - ich sehe zumindest nichts - ich dachte nun werden an der Stelle des Blocks die args als text ausgegeben.
Oder was sollte passieren?
Stehe momentan wie der berühmte Ochs vrom Tor.
Völlig verwirrte Grüße
Also mit <?phpglobal $user;if
am 02.09.2010 - 14:13 Uhr
Also mit
<?phpglobal $user;
if (arg(0) == 'user' && arg(1) == $user->uid) {
return TRUE;
}
if (arg(0) == 'user' && arg(1) == $user->uid && arg(2) == 'bewertungen' ) {
return FALSE;
}
?>
funktioniert es nun - allerdings ausschließlich für mich als Profil-Inhaber/Autor - sprich - wenn ich mein eigenes Profil anschaue bzw. users/mein_eigener_name/bewertungen
Wenn ich mir ein anderes Fremd-Profil anschaue, wird aber kein Block ausgegeben. Auch für Gäste wird der Block nirgends mehr angezeigt bzw. die PHP-Anweisung arbeitet nicht.
Das wird sicherlich an $user->uid liegen oder an global $user (für mch als PHP-Laie) ... ujuijui ... mal gucken wie man das umschreiben muss.
Das ist ja schon wieder was hier.
Ich dachte nun, dass man im
am 02.09.2010 - 14:59 Uhr
Ich dachte nun, dass man im Code
arg(1) == $user->uiddurchis_numeric(arg(1)ersetzen muss ....if (arg(0) == 'user' && is_numeric(arg(1)
und
if (arg(0) == 'user' && is_numeric(arg(1) && arg(2) == 'bewertungen' )
aber wenn ich das so schreibe, wird der Block wieder überall angezeigt - unter users/benny aber auch unter users/benny/berwertungen/name_der_bewertung also wird die PHP-Anweisung ignoriert und/oder ist falsch.
<?phpglobal $user;
if (arg(0) == 'user' && is_numeric(arg(1) {
return TRUE;
}
if (arg(0) == 'user' && is_numeric(arg(1) && arg(2) == 'bewertungen' ) {
return FALSE;
}
?>
Wo liegt der Fehler?
Ok - habs selbst heraus
am 02.09.2010 - 16:51 Uhr
Ok - habs selbst heraus gefunden.
So muss der Code lauten.
<?phpglobal $user;
if (arg(0) == 'user' && is_numeric(arg(1)))
{
return TRUE;
}
if (arg(0) == 'node' && is_numeric(arg(1)))
{
return FALSE;
}
?>