Block Anzeige mit PHP definieren: Nur auf Userprofil und bei Beziehung aus User relationships in Kombination mit Profilschutz
am 07.09.2011 - 19:47 Uhr in
Hallo,
ich habe einen Block der soll nur auf bestimmten Seiten angezeigt werden. Dies habe ich hinbekommen... Nun wird es etwas komplizierter:
Der Block enthält vom User hochgeladen Bilder und wird nur auf der entsprechenden Profilseite angezeigt.
Jetzt kommts: ich habe die Profilseite mit der Möglichkeit versehen, von öffentlich auf privat einzustellen. Dann können nur Freunde (mit User relationships realisiert) die Profilseite aufrufen. Naürlich wird dann (obwohl der User vielleicht auf "privat" gestellt hat) leider immer noch der Block angezeigt.
Die Blöcke werden doch immer nur angezeigt, wenn PHP true zurück gibt... mit den Userseiten bekomme ich es hin, aber nun muss noch die Abfrage mit "Freund ja" oder "Freund nein" rein... Dieser Code hier klappt leider nicht:
<?php
if (arg(0) == 'user' && is_numeric(arg(1))) {
return TRUE;
}
if (arg(0) == 'user' && is_numeric(arg(1))) {
$account = user_load(arg(1));
if (isset($account->uid)) {
$node = content_profile_load('profile', $account->uid);
$user_is_friend = user_relationships_load(array('between' => array($user->uid, $account->uid), 'approved' => TRUE)) ? 1 : 0;
}
if (arg(0) == 'user' && $user->uid == arg(1)) {
return TRUE;
}
elseif ($account->profile_profilschutz == 'Nein') {
return TRUE;
}
elseif ($account->profile_profilschutz == 'Ja' && $user_is_friend == 0) {
return FALSE;
}
elseif ($account->profile_profilschutz == 'Ja' && $user_is_friend == 1) {
return TRUE;
}
return FALSE;
?>
Hat jemand einen Tipp, warum nicht?!
DANKE
- Anmelden oder Registrieren um Kommentare zu schreiben
Taxonomy Access?
am 08.09.2011 - 08:49 Uhr
Ich bin mir nicht sicher, ob es mit deinem selbstgestrickten PHP nicht langsam zu kompliziert wird. Hast du schon mal geguckt, ob du das nicht einfacher mit einem der Module für taxonomiebasierte Zugriffskontrolle hinbekommst?
http://drupalmodules.com/m?title=access&c=Taxonomy
Gruß
Frank
Bitte Erledigtes im Betreff des ersten Postings als [gelöst] markieren. Danke!
Hmm, da sieht so aus, als ob
am 08.09.2011 - 09:43 Uhr
Hmm,
da sieht so aus, als ob man damit den Zugriff auf Nodes steuert. Dann eben über Taxanomy.
Ich möchte ja aber eigentlich nur den Block entsprechend ein- bzw ausblenden, wenn bestimmte Zustände vorliegen.
1) soll also nur im Userprofil angezigt werden
2) eben nur wenn das Profil auf öffentlich steht
Dieser Code hier (leicht abgeändert) erzeugt also den Profilschutz:
<?php
global $user;
if (arg(0) == 'user' && is_numeric(arg(1))) {
$account = user_load(arg(1));
if (isset($account->uid)) {
$node = content_profile_load('profile', $account->uid);
$user_is_friend = user_relationships_load(array('between' => array($user->uid, $account->uid), 'approved' => TRUE)) ? 1 : 0;
if (arg(0) == 'user' && $user->uid == arg(1)) {
print $user_profile;
}
elseif ($node->field_profile_privacy_active[0][value] == 'Nein') {
print $user_profile;
}
elseif ($node->field_profile_privacy_active[0][value] == 'Ja' && $user_is_friend == 0) {
print views_embed_view('No_Friend', 'block_1');
}
elseif ($node->field_profile_privacy_active[0][value] == 'Ja' && $user_is_friend == 1) {
print $user_profile;
}
}}
?>
Das Profil wird dann entweder angeziegt oder es wird, wenn kein "Freund" und Profilschutz an, einfach ein Block aufgerufen (der "No friend" block)... Das ist es schon.
Und nun soll der Block mit den Bildern (welcher eben neben dem Userprofil aufgreufen wird) auch nur erscheinen, wenn gewünscht. Wie realisiere ich dies mit Rückgabe TRUE ?
Bin jetzt wirklich kein PHP Experte und experiemntiere hier lange rum, bis es auf der Reihe habe...vielleicht könnte mir jemand sagen, was ich falsch mache?
DANKE
Hat jemand eine Idee?
am 08.09.2011 - 17:21 Uhr
Hat jemand eine Idee?
kanst du das in den views
am 08.09.2011 - 18:40 Uhr
kanst du das in den views nicht mit relationship einstellen??
dann kannst du doch einfach einen block mit view erstellen
C.A.W. Webdesign
Freunde-Module im Vergleich
am 08.09.2011 - 19:40 Uhr
Vielleicht doch noch mal gucken, ob nicht jemand das Rad schon erfunden hat ;-)
http://www.mediacurrent.com/blog/comparison-friend-modules-drupal-6
http://drupalmodules.com/module/profile-privacy
http://drupalmodules.com/module/privacy-per-user
http://drupalmodules.com/module/flag-friend
http://drupalmodules.com/module/user-relationships
(Dort lohnt auch immer ein Blick auf die "Related Modules".)
Gruß
Frank
Bitte Erledigtes im Betreff des ersten Postings als [gelöst] markieren. Danke!
Hallo Frank, hallo caw,danke
am 08.09.2011 - 20:04 Uhr
Hallo Frank, hallo caw,
danke für die Tipps... die Idee mit dem View ist eigentlich gut, aber leider kann man hier bei FILTER nur Relationship JA oder NEIN bzw. OFFEN oder ANGENOMMEN auswählen. Dies geht aber dann ja so bei mir nicht... Wenn jemand sein Profil auf öffentlich hat, dann soll ja auch der NICHT-FREUND den Block sehen dürfen.
Ich möchte nochmals den Sachverhalt mit Bildern darstellen, vielleicht wird dann klarer was ich machen möchte.
Ich habe das Profil ganz normal mit den Profile Felder zusammengesetzt. Dann wird es über die user-profile.tpl.php aufgerufen. Dieses Profil hat nun ein Profile-Feld welches einfach mit JA oder NEIN 2 Werte wiedergibt. Es ist also das Feld
$account->profile_profilschutz
Der User kann nun wählen, ob Profilschutz, ja oder nein...entsprechend wird dann eben das Profil "geprinted" oder nicht...wenn nicht, wird einfach ein "No friend" Block aufgerufen mit dem Hinweis, das dieses Profil geschützt ist und man eine Freundschaftsanfrage stellen kann, um es aufrufen zu können (FAZZEBOOK lässt grüßen)
Neben diesem Profil gibt es dann eben Blöcke (links) die User generierten Content dieser Person zeigen. Jetzt kann ich ja unter dem Block einstellen, wann er aufgerufen werden soll bzw. darf.... da muss ich doch dann auch die If Bedingungen für den Profilschutz irgendwie mit TRUE oder FALSE eingebaut bekommen?!!
Bitte, helft mir den Horizont zu erweiteren und für viele andere Drupalianer auch! Falls Lonit diesen Beitrag liest...please! Du kannst helfen! Für dich wäre es nur eine Minute. DANKE!
Hmm, ich versuche und
am 08.09.2011 - 23:20 Uhr
Hmm, ich versuche und versuche und es will nicht gelingen:
folgender Ansatz: Der Block soll nur angezeigt werden, wenn folgende Bedingungen vorliegen:
1) es sich um eine user/* Seite handelt UND es sich um den Profilbesitzer handelt
2) es sich um eine user/* Seite handelt UND das Profilfeld "profil_schutz" auf NEIN steht
3) es sich um eine user/* Seite handelt UND das Profilfeld "profil_schutz" auf JA steht UND FREUNDSCHAFT auch auf JA steht
folgender Code klappt noch nicht:
<?php
if (arg(0) == 'user' && is_numeric(arg(1))) && (arg(0) == 'user' && $user->uid == arg(1)) {
return TRUE;
}
elseif (arg(0) == 'user' && is_numeric(arg(1))) && ($account->profile_profilschutz == 'Nein') {
return TRUE;
}
elseif (arg(0) == 'user' && is_numeric(arg(1))) && ($account->profile_profilschutz == 'Ja' && $user_is_friend == 1) {
return TRUE;
}
return FALSE;
?>
hmmm..
Titel präzisieren
am 09.09.2011 - 08:13 Uhr
Versuch mal den Titel vom OP präziser zu formulieren, dann lockst du vielleicht noch mehr Leute hierher ;-)
Gruß
Frank
Bitte Erledigtes im Betreff des ersten Postings als [gelöst] markieren. Danke!
wenn du mit userrealtionship
am 09.09.2011 - 08:23 Uhr
wenn du mit userrealtionship arbeitest wirds doch nur den freunden angezeigt
C.A.W. Webdesign
nein, das ist ja so nicht
am 09.09.2011 - 10:01 Uhr
nein, das ist ja so nicht korrekt. es soll ja 3 varianten geben:
1) es sich um eine user/* Seite handelt UND es sich um den Profilbesitzer handelt (losgelöst von userrelationships)?
2) es sich um eine user/* Seite handelt UND das Profilfeld "profil_schutz" auf NEIN steht (dann können es ja alle sehen, auch die ohne Beziehung aus userrelationships)
3) es sich um eine user/* Seite handelt UND das Profilfeld "profil_schutz" auf JA steht UND FREUNDSCHAFT auch auf JA steht
es handelt sich also immer um 2 Bedingungen gleichzeitig! ich habe es mit folgendem Code versucht, vermute aber da fehlt noch etwas... ich bin nicht so fit in PHP, deshalb hoffe ich auf einen konkreten tipp. muss ich vorher vielleicht erst noch im Code irgendwie darstellen, das es user realtionships gibt, damit drupal dies korrekt liest???
<?php
if (arg(0) == 'user' && is_numeric(arg(1))) && (arg(0) == 'user' && $user->uid == arg(1)) {
return TRUE;
}
elseif (arg(0) == 'user' && is_numeric(arg(1))) && ($account->profile_profilschutz == 'Nein') {
return TRUE;
}
elseif (arg(0) == 'user' && is_numeric(arg(1))) && ($account->profile_profilschutz == 'Ja' && $user_is_friend == 1) {
return TRUE;
}
return FALSE;
?>
Hi Anton, Du bist doch fit in
am 09.09.2011 - 14:55 Uhr
Hi Anton, Du bist doch fit in PHP...hast Du nicht eine Idee?
DANKE
Facebook-Clone mit Drupal?
am 09.09.2011 - 15:06 Uhr
http://www.google.com/search?q=drupal+facebook+clone&hl=de
Gruß
Frank
Bitte Erledigtes im Betreff des ersten Postings als [gelöst] markieren. Danke!
Hi Frank, danke für den Link.
am 09.09.2011 - 17:59 Uhr
Hi Frank,
danke für den Link. Interessante Module. Die werde ich mir in Ruhe mal anschauen...
Aber in diesem meinem Falle möchte ich ja eigentlich nur mit einem kleinen PHP Code die Ansicht von einem Block steuern. Das ist alles...es ist ja alles fertig und funktioniert!
Leider hat sich bis jetzt noch niemand von den PHP Experten gemeldet. Keine Ahnung warum.
Ich werde mich nun weiter mit dem Thema beschäftigen... Mir ist leider nicht bekannt, ob man auch komplexere PHP Schnipsel in die Blockansichssteuerung eingeben kann, oder ob man dort nur 1-2 Werte mit einer PHP TRUE Abfrage eingeben kann... ich muss weiter stöbern.
Meine Idee mit der doppelten Bedingung müsste aber eingentlich ok sein...
grübel, grübel....
Hallo, kann es sein, dass ich
am 10.09.2011 - 08:03 Uhr
Hallo,
kann es sein, dass ich den Wert bzw. die Werte erst laden muss? Bin jetzt nicht so der PHP Experte und stelle hier sicherlich ganz dumme Fragen...aber nunja, so ist es nun einmal.
Dieser Beitrag hat mich darauf gebracht: http://www.drupalcenter.de/node/34131
Kann es sein, dass ich eben nun die Profilvariable genauso wie diese bei laden diesen Node-Typs erst laden muss?
}
else if (arg(0) == 'node' && is_numeric(arg(1))) {
$nd = node_load(arg(1));
// Ist der Typ des geladenen Beitrags in der Liste enthalten?
return in_array($nd->type, array('anleitung'));
}
return FALSE;
?>
Wenn ja, wie ist der Befehl dafür?
DANKE