Daten über aktuellen User bei Profilaufruf?
am 17.04.2007 - 20:36 Uhr in
Hallo Zusammen,
ich bin gerade dabei mein Userprofil etwas zu tunen und bin nun an dem Punkt angekommen, wo ich prüfen muss, ob der User, der sich das anschaut der Eigentümer des Profils ist oder ein anderer.
Grundsätzlich ist ja $user->uid die richtige Adresse (so wie ich das mitbekommen habe) aber das Array wird beim Profil mit den Daten geflutet vom aktuellen Profil.
Aber wie komme ich denn nun an die uid vom Betrachter? Selbst die Session scheint keine Infos über den aktuellen Nutzer zu speichern und auch sonst finde ich keine globale Variable, die erfolgsversprechend aussieht.
Zur Info: ich habe meine Profilseite mit einem Template versehen, wie in http://drupal.org/node/35728 und darin möchte ich die Unterscheidung treffen.
Danke
- Anmelden oder Registrieren um Kommentare zu schreiben
Du willst also den UID von
am 17.04.2007 - 22:35 Uhr
Du willst also den UID von den eingeloggten User?
mit
$GLOBALS['user']->uid
kannst du das erreichen.user-profile.tpl.php
am 17.04.2007 - 22:57 Uhr
Wahrscheinlich hast du in deiner template.php das user-profile folgendermaßen überschrieben:
<?php
function phptemplate_user_profile($user, $fields = array()) {
return _phptemplate_callback('user-profile', array('user' => $user, 'fields' => $fields));
}
?>
Wenn du jetzt, wie es normal wäre, in der 'user-profile.tpl.php', auf den user zugreifen möchtest, der sich das Profil anschaut hast du mit:
<?php
global $user;
$user->uid
?>
ein Problem.
Wenn du aber in deiner template.php z.B. folgendes schreibst:
<?php
function phptemplate_user_profile($user, $fields = array()) {
return _phptemplate_callback('user-profile', array('besucher' => $user, 'fields' => $fields));
}
?>
kannst du auf die Profilfelder mit $besucher->FELDNAME zugreifen und auf den user der sich das Profil anschaut mit: $user->uid.
Übrigens: der erste Parameter 'user-profile' ist auch beliebig. Man kann dort auch 'benutzerprofil' schreiben. Dann muss man allerdings eine 'benutzerprofil.tpl.php' benutzen.
Ich hoffe, das klärt mal einige Fragen zu Themeable Functions.
vg
--
md - DrupalCenter
mdwp
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
ja, da habe ich noch eine
am 17.04.2007 - 23:22 Uhr
ja, da habe ich noch eine Frage. Was ist denn der Unterschied, wenn ich statt _profile benutzerprolie schreibe und kann ich denn mit **.tpl.php beliebige Seiten eigentlich aendern? zum Beispiel die Imageseite oder so? oder eine View Seite?
thx
yippi
Seiten Templates
am 18.04.2007 - 00:01 Uhr
Ein sehr 'verstecktes' Feature der Drupal Template Engine ist folgendes:
Du kannst für jede Seite ein eigenes Template anlegen.
Beispiel:
page-front.tpl.php für die Homepage
page-blog.tpl.php für Blogseiten
usw.
Für Views gibts den Template Generator.
vg
--
md - DrupalCenter
mdwp
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
template Generator? kannst
am 18.04.2007 - 00:23 Uhr
template Generator?
kannst du das etwas erläutern bitte? Ich bin grad ganz müde, und ich will nicht mehr suchen. Oder ich kann auch morgen wieder suchen..
danke schon mal für den Tipp!
gute Nacht
Views Theme Wizard
am 18.04.2007 - 09:40 Uhr
Unter 'admin/build/views' findest du oben den Reiter 'Theme Wizard'.
Damit kannst du sehr einfach ein Template für eine View, egal ob Block- oder Pageview, erzeugen. Das ist sehr hilfreich, da alleine die richtige Namensgebung für ein View-Template eine Herausforderung ist.
vg
--
md - DrupalCenter
mdwp
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
Hi MD, das klingt
am 18.04.2007 - 18:37 Uhr
Hi MD,
das klingt einleuchtend, klappt aber nicht ;)
Der Grund: das neue Array ist leider nicht global verfügbar (entgegen user) und ist somit im theme nicht verfügbar.
Leider versagen meine Bemühungen das global verfügbar zu machen...
Also um weitere Infos wäre ich dankbar!
Was genau
am 18.04.2007 - 18:42 Uhr
Was genau ist denn bei dir wo nicht verfügbar?
vg
--
md - DrupalCenter
mdwp
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
Ich habe zur besseren
am 18.04.2007 - 18:56 Uhr
Ich habe zur besseren Übersicht Funktionen erstellt, die komplexe Ausgaben händeln. Und in diesen Funktionen ist das neue Array nicht verfügbar.
EDIT: Problem gelöst, mit dem Übergeben des Userobjekts an die Funktion geht es (zwar erst beim 2. Anlauf, aber das kann auch ein Cache-Problem gewesen sein).
User Object
am 18.04.2007 - 21:14 Uhr
Nur nochmal zur Klarstellung für alle anderen: es ist hier nicht vom globalen User, sondern von dem User dessen Profil gerade aufgerufen wird, die Rede.
vg
--
md - DrupalCenter
mdwp
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
Also so ganz klappt das
am 21.04.2007 - 12:27 Uhr
Also so ganz klappt das nocht nicht.
Ich brauche ja einen Vergleich in etwa wie:
If (aktueller_User == Profilinhaber)
{
#mach irgendwas
}
else
{
#mach halt was anderes
}
Das ist bisher mit deinen Vorschlägen nicht umsetzbar. Wenn ich die template.php wie empfolen umschreibe existiert das Array zu $user nicht in meinem Profiltemplate. In meinem neuen Array hingegen finden sich nur Daten zu dem Inhaber des Profils, aber nicht zu dem aktuellen Betrachter.
Somit bin ich noch nicht in der Lage die beiden User-IDs miteinander zu vergleichen (was ich ja eigenlicht möchte).
Danke fuer Hinweise.
Vasco
EDIT:
Man muss $user vorher als global setzen, also einfach ein "global $user;" am Anfang der Datei (in den PHP-Bereich) setzen und es tut dann auch.
*grml* das war definitiv ein Krampf, danke an alle die so viel Geduld mit mir hatten ;)
Richtig lesen
am 21.04.2007 - 13:13 Uhr
Hättest du den dritten Post von mir richtig gelesen wäre das klar gewesen. Oder kannst du die Themeable Function so überschreiben:
<?php
function phptemplate_user_profile($user, $fields = array()) {
return _phptemplate_callback('user-profile', array('user' => $user, 'fields' => $fields));
}
?>
und dann in deiner Template Datei
global $user nutzen ???
vg
--
md - DrupalCenter
mdwp
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services