[gelöst] Block bei bestimmten Profilen anzeigen
Eingetragen von 1000 (764)
am 06.07.2011 - 21:58 Uhr in
am 06.07.2011 - 21:58 Uhr in
Hallo,
ich möchte einen Block erstellen, der nur bei bestimmten Profilen angezeigt wird. Also bei Unternehmensprofilen soll der Autor die Möglichkeit haben eine Header Grafik hochzuladen. Diese Header Grafik soll dann immer bei diesem angelegten Profil angezeigt werden.
<?php
global $user;
if (arg(0) == 'user' && arg(1) == $user->uid && arg(2)=='') {
// eigenes Benutzerprofil
return TRUE;
} else {
// andere Seite
return FALSE;
}
?>
Ist leider der falsche Ansatz, da dies lediglich dazu führt dass der Block beim eigenen Benutzerprofil angezeigt wird. Betrachtet jemand dieses Profil wird der Block so leider nicht angezeigt. Kann mir da jemand weiterhelfen? Unternehmensprofile haben die Rolle "Unternnehmensprofil" Dadurch wäre eine Unterscheidung möglich. Gibt es sowas wie
if block exists then display for each???
- Anmelden oder Registrieren um Kommentare zu schreiben
Du mußt den Node, der
am 06.07.2011 - 22:29 Uhr
Du mußt den Node, der angezeigt wird ermitteln und laden. Eine Node Seite heißt intern immer node/###, also kannst Du hier mittels arg(0) auf 'node' prüfen, ob arg(1) numerisch ist und dann mit node_load(arg(1)) laden. Dann nimmst Du nicht den global $user sondern $node->uid.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Wie wäre es den Block mit den
am 07.07.2011 - 06:45 Uhr
Wie wäre es den Block mit den Inhalten zu erstellen und dann anhand der Sichbarkeitseinstellungen des Blocks diesen nur auf bestimmten Seiten oder für bestimmte Rollen anzeigen. In deinem Fall wäre das dann bei bestimmten Seiten (den gewünschten Userprofilen)
"user/"
Wenn der Block im Profil
am 07.07.2011 - 10:09 Uhr
Wenn der Block im Profil einer bestimmten Rolle angezeigt werden soll, dann verwende folgenden Code in den Sichtbarkeitseinstellungen des Blocks.
<?php
if (arg(0) == 'user' && is_numeric(arg(1))) {
$user = user_load(arg(1));
if (in_array('Name_der_Rolle', $user->roles))
{
return TRUE;
}
else
{
return FALSE;
}}
?>
Der User wird anhand arg(1) geladen und in der Variablen $user gespeichert. Im Object $user->roles befindet sich ein/mehrere Array/s und dort sind die Rollen enthalten. Diese werden dann mit in_array abgefragt.
Drupal rockt!!!
Das Problem ist, dass es
am 07.07.2011 - 16:15 Uhr
Das Problem ist, dass es einmal angezeigt werden soll, wenn der User angemeldet sein eigenes Profil betrachtet arg(0) == 'user' und einmal wenn ein anderer Userer dieses Profil betrachtet. Dann ist arg(0) != 'user'. Aber mal sehen, das könnte hilfreich sein. Ich probiere noch ein wenig. Vielen Dank ersteinmal !
1000 schriebDas Problem ist,
am 07.07.2011 - 16:32 Uhr
Das Problem ist, dass es einmal angezeigt werden soll, wenn der User angemeldet sein eigenes Profil betrachtet arg(0) == 'user' und einmal wenn ein anderer Userer dieses Profil betrachtet. Dann ist arg(0) != 'user'. Aber mal sehen, das könnte hilfreich sein. Ich probiere noch ein wenig. Vielen Dank ersteinmal !
Was? Nein!
arg(0) == 'user' bedeutet, dass der Code nur auf einem User-Profil ausgeführt wird und nicht auf einem Node. Mit dem eingeloggten oder betrachtenden User hat das überhaupt nichts zu tun.
Der Block wird also für den Profil-Inhaber sowie für alle anderen User, die das Profil besuchen, angezeigt.
Drupal rockt!!!
Stimmt leider so nicht. Die
am 07.07.2011 - 21:36 Uhr
Sorry, der Code hat funktioniert. Ich hatte nur noch "Nur für die Rolle Unternehmensprofil anzeigen" angemarkert. Vielen Dank! Kannst du den Code erklären? Ich dachte das arg(0) ist das erste element in einer URL.