Gelöst: Views Variablen in page.tpl.php ausgeben.

am 25.10.2008 - 13:25 Uhr in
Hallo zusammen,
was muss ich in der template.php Datei angeben, das ich bestimmte Felder ausgeben kann.
Ich möchte z.B. die
<?php
print $profile_alter_value
?>
ausgeben lassen. Da ich sonst nicht weis wie ich zu den Variablennamen komme, lasse ich mir diese vom Views Theme Wizard ausgeben (die ich vorher in der Views als Field hinzugefügt habe).
Ziemlich umständlich aber kenn/kann es nicht anderst :)
Danke vielmals,
Grüße
- Anmelden oder Registrieren um Kommentare zu schreiben
Mein Vorhaben:
am 25.10.2008 - 14:58 Uhr
Ich möchte das registrierte User in der linken vertikalen Navigation Ihre Daten aufgelistet sehen.
Dazu hab ich Usernode und Userprofil installiert.
Ganz schön kompliziert finde ich. In anderen CMS Systemen kann man einfacher auf Daten zugreifen.
Hallo? ...
am 28.10.2008 - 22:47 Uhr
...so schwer?? :]
Ich kann jetzt nur einen
am 29.10.2008 - 01:28 Uhr
Ich kann jetzt nur einen Denkanstoss ins blaue geben, da ich mit UserProfile noch nicht gearbeitet habe,
trotzdem hoffe ich mal das es ein hilfreicher Denkanstoß wird.
Ich mach mal ein Beispiel mit einem Node und einem Node mit einem CCK-Feld,
also wenn ich einen Node-Title ausgeben möchte :
<?php
print $node->title;
?>
(da Node ein Objekt ist, ich denke mal $profile wird das Userprofil sein)
wenn ich ein CCK-Feld namens 'beschreibung' anlege dann komme ich an den Inhalt mit einem :
<?php
print $node->field_beschreibung[0]['value'];
?>
"field_" ist dabei das Standard-Prefix für CCK Felder.
Wenn nun $profile das Profil-Objekt ist, dann könnte ein
<?php
print '<pre>';
var_dump($profile)
print '</pre>';
?>
Aufschluss über die verwendete Struktur geben, und damit auch darauf wie auf die Informationen zugegriffen werden kann. Die beiden print befehle dienen nur der ordentlichen und übersichtlichen Anzeige.
Ich hoffe das meine Antwort in die richtige Richtung ging.
Content Type angelegt
am 01.11.2008 - 00:27 Uhr
Also ich habe jetzt einen neuen Content-Type angelegt, dieser nennt sich "Mein Profil", maschinenlesbar "mein_profil".
So, jetzt versuche ich wie du meintest ein Feld auszulesen via
print $mein_profil->field_alter[0]['value'];
Leider funktioniert das nicht, und es printed nichts aus.
Devel Modul
am 01.11.2008 - 00:34 Uhr
Hallo,
bei sowas hilft immer das Devel Modul weiter, http://drupal.org/project/devel
Damit kannst du dir sämtliche Bestandteile des $node Objekts anschauen, mit Variablennamen und Inhalten.
Gruß,
Boris
es gibt kein Objekt
am 01.11.2008 - 04:21 Uhr
es gibt kein Objekt $mein_profil, an der Stelle muss es $node heissen (weil in Drupal (fast) alles ein Node ist.
print $node->field_alter[0]['value'];
sollte passen.
Ansonsten wirklich mit dem Devel Modul gucken was in deinem Node so drinsteht (und was davon zu deinen CCK-Felder passt), denn bestimmte 'Datentypen' wie z.B. der CCK Link (seperates CCK Modul) haben einen anderen Aufbau.
Zeigt das Feld nur an wenn...
am 01.11.2008 - 11:58 Uhr
Also
print 'Dein Alter: '.$node->field_alter[0]['value'];
hatte ich ja schon vorher probiert. Hat nie funktioniert. Jetzt hab ich es weiter probiert und mir ist aufgefallen, wenn ich auf der entsprechenden Node bin, wird das Feld ALTER ausgefüllt. Das bedeutet ich müsste etwas coden wie:$nodeuserid = "hole deine zugehörige usernode";
print $nodeuserid->field_alter[0]['value'];
Der Code ist nur ein Dummy, soll euch nur verdeutlichen was ich vorhabe :)
Ich hatte schon die Codeschnippsel ausprobiert von http://groups.drupal.org/node/3892 habs aber nicht geschafft.
Danke
Etwa so?
am 01.11.2008 - 14:19 Uhr
Hallo,
es gibt ja das "normale" Modul dafür, nämlich profile. Für den aktuellen User kannst du die Daten auf folgende Weise bekommen:
<?php
global $user;
profile_load_profile ($user->uid);
?>
Hier wird also das normale User-Objekt um die Profilfelder erweitert. Ist dann allerdings ein User-Objekt, und kein Node-Objekt, die Daten stehen also z.B. in $user->field->Alter.
Wenn du nicht den aktuellen User haben möchtest, sondern irgendeinen, benötigst du auf jeden Fall zuerst mal dessen User-ID und musst dann mittels user_load dessen User-Objekt holen:
<?php
$benutzerid = ...irgendwoher
$benutzer = user_load ($benutzerid);
profile_load_profile ($benutzerid);
?>
Oder unterstützt Views noch gar keine Benutzerprofile? Dann nehm ich alles zurück...
Gruß,
Boris
und dann?
am 01.11.2008 - 14:41 Uhr
Und dann? :) bin schon ganz matschig im Hirn.
Ich habe das Profil ja schon erweitert mittels Userprofil, und das weist dem User eine bestimmte Node zu. Diese funktion muss ich auch simulieren.
"Hole von dieser UserID dessen zugehörige NODE und davon das FIELD"
Gibt 1000 Wege aber bis jetzt funzt noch keiner ;)
Devel sagt:
am 01.11.2008 - 15:13 Uhr
Devel gibt mir folgende
0.18 1 cache_get SELECT data, created, headers, expire FROM drupal_cache_content WHERE cid = 'content:126:126'
0.15 1 comment_nodeapi SELECT last_comment_timestamp, last_comment_name, comment_count FROM drupal_node_comment_statistics WHERE nid = 126
0.14 1 nodeasblock_nodeapi SELECT nid FROM drupal_nodeasblock WHERE nid = 126
Zeilen aus, das wäre die NodeID die ich bräuchte.
Hab es schon mit
$user->cache
probiert, pustekuchen :)Alle nodes dieses Users
am 01.11.2008 - 16:12 Uhr
Sagen wir ich bekomme die ID der jeweiligen Node heraus.
Wer kann mir diesen Code bitte vervollständigen:
print 'Dein Alter: '.$node['126']->field_alter[0]['value'];
Das ich die 126 durch eine Variable austauschen muss ist mir bewusst :)
Dankeschön
So sollte es doch gehen
am 01.11.2008 - 16:37 Uhr
So sollte es doch gehen :
<?php
// Hier kommt halt die ermittelte Node-ID hin
$nodeid = 126;
$node = node_load($nodeid);
print 'Dein Alter: '.$node->field_alter[0]['value'];
?>
Wenn das nicht zu einer Ausgabe führt erweitere den Code mal auf :
<?php
// Hier kommt halt die ermittelte Node-ID hin
$nodeid = 126;
$node = node_load($nodeid);
print '<pre>';
var_dump($node)
print '</pre>';
// print 'Dein Alter: '.$node->field_alter[0]['value'];
?>
Damit wird der Inhalt des Node-Objekts ausgegeben.
Da solltest du dann sehen können ob field_alter[0]['value'] existiert und ob der gewünschte Inhalt so erreichbar ist.
Super!
am 01.11.2008 - 16:58 Uhr
Jetzt müsste ich nur noch rausfinden wie man die verknüpfte Node ID des Users herausfindet (im obigen Codebeispiel die "nodeid").
Wie bereits oben erwähnt gibt DEVEL mir die zeilen aus, hab verschiedene Codeschnippsel ausprobiert aber vergeblich.
Aber das hat mich schon mal ein gutes Stück voran gebracht.
:)
Nach zufälligem und langem gruschteln auf Google
am 01.11.2008 - 17:40 Uhr
http://groups.drupal.org/node/9312
Aber
$nodeprofilenode = node_load( $node->uid);
print 'Das ist die ID '.$nodeprofilenode;
klappt nicht
--------- EDIT ---------
$nid = usernode_get_node_id($user->uid);
$nodeView = node_load($nid);
$output = nodeprofile_show_profiles($user->uid);
echo drupal_render($output);
Zeigt mir schon mal den gesamten Block an, ich will aber nur ein bestimmtes Feld.
Jetzt kommt ich der Sache schon näher *puuhhh*
und was passiert mit dem
am 01.11.2008 - 17:41 Uhr
und was passiert mit dem Code? :
<?php
$nid = usernode_get_node_id($user->uid);
$nodeView = node_load($nid);
print $nodeView->field_alter[0]['value'];
?>
ansonsten mal mit var_dump($nodeView) die Struktur angucken und nachsehen wie/wo das Feld anzusprechen ist.
War auch mein Ansatz.
am 01.11.2008 - 18:18 Uhr
Leider ist $nid die ID des Userprofils das die Node die ich brauch beinhaltet.
Ich müsste mit einem Befehl die ID herausfinden z.B.:
print ($node->nodeprofile->uid);
Hab es!
am 02.11.2008 - 10:58 Uhr
global $user;
$nodeid = nodeprofile_load('mein_profil', $user->uid);
$profileid = $nodeid->nid;
$node = node_load($profileid);
print 'Dein Alter: '.$node->field_alter[0]['value'];
mein_profil ist der Seitentyp (Maschinenlesbarer Name)
field_alter ist das Feld das man auslesen will.
Vielen Dank für eure Hilfe!
Sonst hätte ich es nicht geschafft!
:)