Variablen uncompiliert auslesen
am 16.08.2010 - 18:10 Uhr in
Ich versuche gerade eine selbst erstellte Profilseite zu basteln. Dazu habe ich eine user-profile.tpl.php Datei in den Themes Ordner koppiert. Aus der Anleitung http://drupal.org/node/35728 habe ich eine Möglichkeit gefunden den complilierten Quellcode auszulesen. Leider sind alle Variablen bereits compiliert, so dass ich damit nicht viel anfangen kann. Wie kann ich den uncompilierten Quelltext des Arrays $user_profile sehen, so dass ich diesen einfach an meine Bedürfnisse anpassen kann?
Available variables
The following is a list of variables that is available to your custom user-profile.tpl.php.
<?php
print '<pre>'. check_plain(print_r($profile, 1)) .'</pre>';
?>in der user-profile.tpl.php zeigt zwar die generelle Struktur, die eigendlichen Variablen aber nicht.
- Anmelden oder Registrieren um Kommentare zu schreiben

Variablen
am 16.08.2010 - 18:46 Uhr
Hallo.
Öhm, bei PHP werden keine Variablen "kompiliert".
Wenn Du Dir den Inhalt von
$user_profileanzeigen lassen möchtest, verwendest Du am Besten das Modul [do:devel Devel] und dessen Funktion<?php dsm($user_profile) ?>.Damit erhälst Du dann eine komplette Übersicht der Struktur und des Inhalts von
$user_profile.Alternativ funktioniert auch
<?php drupal_set_message('<pre>'. var_export($user_profile, 1) .'</pre>') ?>ganz gut.Allerdings kann es dort bei Rekursionen (wie sie beispielsweise bei Views auftreten) zu Problemen kommen.
hth,
Stefan
Bei mir funktioniert die
am 16.08.2010 - 21:26 Uhr
Bei mir funktioniert die Methode mit dem kopieren der user-profile.tpl.php in den aktiven Theme Order nicht. Ein einloggen ist danach nicht mehr möglich. Es erscheint eine weiße Seite. Liegt wahrscheinlich an Logintobogan oder lgindestination. Kann ich nicht irgendwo die Originaldatei bearbeiten ???
WSOD
am 16.08.2010 - 21:28 Uhr
Wenn Du nur noch eine weisse Seite siehst, solltest Du einen Blick in das error-log von PHP werfen. Dort steht der Grund für die weisse Seite.
Stefan
Wenn ich das mit
am 17.08.2010 - 07:41 Uhr
Wenn ich das mit "Originaldatei bearbeiten" höre läuft es mir ständig kalt den Rücken runter.
Do not hack core
In Bezug auf dein Problem, schau mal in die Error Logs, wie Stefan schon sagte, da wirst Du mit Sicherheit den Fehler finden.
@ Stefan Die Funktion <?php
am 17.08.2010 - 13:43 Uhr
@ Stefan Die Funktion
<?phpdsm($user_profile)
?>
<?phpdpm( get_defined_vars() );
?>
liefert zwar die Variablen, die user_profile.tpl.php zur Verfügung stehen, allerdings nützt es auch nichts. Z.B. wird in der Variable user_picture ausgegeben:
div class="picture"> <a href="/user/1" title="Benutzerprofil anzeigen." class="active"><img src="http://xxx/sites/default/files/imagecache/user_image_smal/pictures/picture-1-9635800a17dbb6038336c977e82629f6.jpg" alt="Bild des Benutzers admin" title="Benutzerprofil anzeigen." class="imagecache imagecache-user_image_smal" width="40" height="40" /></a></div>Das Problem hierbei: Ich kann die Variablen innerhalb der Variable nur als ausgeführten Code sehen. Um Ihn verändern zu können benötige ich aber den "unkompilierten Code"
Deshalb @Sense würde ich gerne einfach die Coredatei finden und entweder anpassen oder den Inhalt in user_profile.tpl.php kopieren, falls möglich
kompiliert
am 17.08.2010 - 14:22 Uhr
Ich versteh ehrlich gesagt immer noch nicht, was genau Du mit "unkompiliertem Code" meinst.
Wenn
get_defined_varszum Beispiel "user_profile" liefert, dann heisst die Variable eben auch$user_profile.Oder suchst Du die Stelle, an der die Variable mit ihrem Inhalt gefüllt wird? Dann musst Du in den Dateien von Drupal nach
s['user_profile']suchen.Hintergrund: ich weiss jetzt nicht, ob
$variables['user_profile']oder$vars['user_profile']verwendet wird (vermute jedoch Ersteres).Stefan
Ich suche die Stellen an
am 17.08.2010 - 14:47 Uhr
Ich suche die Stellen an denen die Variablen mit Inhalt gefüllt werden. Hab bisher vergeblich gesucht. Also ich möchte z.B. die Profilbild größe von $profile['user_picture'] verändern oder am besten den gesamten
$account
am 17.08.2010 - 14:54 Uhr
Schau Dir mal den Inhalt der Variablen
$accountan (die sollte es da eigentlich geben; evtl. auch$profile).Dort müssten alle benötigten Informationen in "Reinform" stehen (zum Beispiel
$account->picture)..Stefan
Ich habe bereits die
am 17.08.2010 - 16:05 Uhr
Ich habe bereits die einzelnen Variablen aus $profile ausgelesen. Diese sind aber nicht in Reinform. Ich habe versucht mit:
<?phpprint $account['picture'];
?>
die $account-->picture variable auszulesen. Das funktioniert aber nicht. Ich erhalte Fehlermeldungen. Wie kann ich den diese Variable auslesen??
Bitte beachten: Es ist in PHP
am 17.08.2010 - 16:13 Uhr
Bitte beachten:
Es ist in PHP ein Unterschied, ob Du
print $account['picture'];schreibst oder
print $account->picture;.Das sollte man nicht verwechseln.
Beste Grüße
Werner
Auf gut deutsch: Wenn du auf
am 17.08.2010 - 17:05 Uhr
Auf gut deutsch: Wenn du auf Inhalte von $account zugreifen willst, musst du das z. B. mit $account->picture machen, da $account ein Objekt ist und kein Array.
Eine Abfrage <?php print
am 17.08.2010 - 17:25 Uhr
Eine Abfrage
<?phpprint $account->picture;
?>
liefert als Ausgabe:
sites/default/files/pictures/picture-3.jpg
d.h. hier wird wieder ein bereits verarbeiteter Code ausgegeben. Ich möchte aber den gesamten div Container ala
div class="picture"> <a href="/user/1" title="Benutzerprofil anzeigen." ..........</a></div>nur eben im Original Code (unverarbeitet) haben, um ihn anpassen zu können
Es wird hier der Pfad zu dem
am 17.08.2010 - 17:36 Uhr
Es wird hier der Pfad zu dem Userbild ausgegeben (dem Original). Das ist schon alles. Was soll daran verarbeitet sein? Du bist im Gegenteil noch vor dem Rendern des Bildes. Irgenwo kommt im profile-Modul dann die Verarbeitung, vermutlich in der Art:
theme_image($account->picture, ......... ):Wenn Du auf alles Einfluß nehmen willst, mußt Du Dir die ganzen Template-Files zusammensuchen und in den Ordner Deines Themes kopieren. Da kannst Du dran schrauben, wie Du willst. Evtl wirst Du noch entsprechende Preprocess-Funktionen im template.php Deines Themes einbauen müssen, um an die Einzelteile zu kommen.
Sieh Dir mal den Template-File im Zen-Theme an. Da finden sich eine Reihe von auskommentierten Preprocess-Funktionen, die Du so entsprechend in Deinem Theme einbauen kannst.
Beste Grüße
Werner
Eigendlich suche ich eine
am 18.08.2010 - 13:10 Uhr
Eigendlich suche ich eine Abkürzung: Ich möchte einfach, dass erstellte Kategorien nicht untereinanderweg gelistet werden. Ich möchte eine Tabelle mit 2 Spalten, wobei in der einen "persönliche Informationen" und in der anderen das Userbild in groß steht. Ist wirklich eine harte Nuss, da man auch das Bild nachträglich nicht verändern kann.
[user_picture] => <div class="picture"><a href="/user/3" title="Benutzerprofil anzeigen." class="active"><img src="http://xxx.de/sites/default/files/imagecache/user_image_smal/pictures/picture-3.jpg" alt="Bild des Benutzers Randy" title="Benutzerprofil anzeigen." class="imagecache imagecache-user_image_smal" width="40" height="40" /></a></div>
Da habe ich zwar Änderungen vornehmen können und auch die Variablen entsprechend ersetzen können. Leider wird das Bild dann nur sehr unscharf ausgegeben. Warum auch immer. Wie kann ich das Userbild als user_image_large ausgeben, welches in den Einstellungen von ImageCache definiert wurde??
Ein Versuch mit:
<?php$pic = $account->picture;
print theme('imagecache', 'user_image_large', $pic, $alt, $title, $attributes);
?>
liefert ebenfalls ein unscharfes Bild. Die Originaldatei ist nicht unscharf oder zu klein o.ä.
Ich habe schon mal hier
am 18.08.2010 - 13:29 Uhr
Ich habe schon mal hier gelesen, daß die GD-Library nicht immer gute Ergebnisse liefert. Unscharfe Bilder als Ergebnis sind mir da noch in Erinnerung, aber auch, daß das stark vom Ausgangsbild abhing. In manchen Fällen ist man dann zu ImageMagick gewechselt, aber das muß auf dem Server Deines Hosters auch installiert sein. Das soll bessere Ergebnisse liefern.
Beste Grüße
Werner
Ich habe keine Distribution
am 18.08.2010 - 15:23 Uhr
Ich habe keine Distribution für mein System gefunden. Ich benutze Linux Ubuntu x86_64
Auch eine Autoinstallation für Linux per wget wird nicht angeboten. Trotzdessen, vielen Dank für den Tipp !
Wie wäre es dann mit dieser
am 18.08.2010 - 15:32 Uhr
Wie wäre es dann mit dieser Seite (nur mal schnell gegoogled).
Beste Grüße
Werner
1000 schrieb Wie kann ich das
am 18.08.2010 - 15:51 Uhr
Wie kann ich das Userbild als user_image_large ausgeben, welches in den Einstellungen von ImageCache definiert wurde??
Am einfachsten so:
<?php
theme('imagecache', 'user_image_large', $user->picture);
?>
...oder als eigene, etwas mächtigere Funktion:
<?php
function _theme_my_user_picture($user, $size = 'user_image_default', $classes = '', $link = TRUE) {
$picture;
$result = "<div class='user_picture size_" . $size;
if (is_numeric($user) && $user) {
$user = user_load($user);
}
if ($user && !empty($user->picture) && file_exists($user->picture)) {
$picture = $user->picture;
} else if (variable_get('user_picture_default', '')) {
$picture = variable_get('user_picture_default', '');
$result .= " user_picture_default";
} else {
$result .= " user_picture_empty";
}
if ($classes != "") { $result .= " " . $classes; }
$result .= "'>";
if ($link) {
$result .= l(theme('imagecache', $size, $picture), 'user/' . $user->uid, array('html' => TRUE));
} else {
$result .= theme('imagecache', $size, $picture);
}
$result .= "</div>";
return $result;
}
?>
Bzgl. der Schärfe gibt es auch eine Einstellung für die GDLibrary im Drupal Administrations Backend, die afair standardmäßig auf 75% JPEG-Qualität ist. Auch daran könnte es liegen.
Ich habe die Funktion in
am 18.08.2010 - 18:12 Uhr
Ich habe die Funktion in meine user-profile.tpl.php eingebaut und aufgerufen. Kein Ergebnis. Ich nehme an, dass ich zuvor noch die Variable User beschaffen muss (aus dem Objekt). Leider weiss ich nicht genau was ich da falsch mache. Die JPEG-Qualität habe ich auf 100% gesetzt. Leider ohne Ergebnis.
@Werner sudo aptitude update
sudo aptitude install imagemagick aptitude install php5-imagick
hat funktioniert. Aber warum wird ImageMagick nicht in der phpinfo.php angezeigt??? Bei mir heisst es Imageick aber wahrscheinlich ist das so???
Ich habe nachgeschaut und die convert Datei befindet sich im richtigen Ordner. Ich erhalte trotzdem diese Fehlermeldung:
# warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/usr/bin/convert) is not within the allowed path(s): (/var/www/vhosts/xxx.de/httpdocs:/tmp) in /var/www/vhosts/xxx.de/httpdocs/includes/image.imagemagick.inc on line 55.# Die Datei /usr/bin/convert konnte nicht gefunden werden. Die open_basedir-Sicherheitseinschränkung von PHP ist auf /var/www/vhosts/xxx.de/httpdocs:/tmp eingestellt, welches die Lokalisierungsversuche von ImageMagick behindern kann.
1000 schrieb Ich habe die
am 18.08.2010 - 18:24 Uhr
Ich habe die Funktion in meine user-profile.tpl.php eingebaut und aufgerufen. Kein Ergebnis. Ich nehme an, dass ich zuvor noch die Variable User beschaffen muss (aus dem Objekt).
$account sollte funktionieren. Allerdings habe ich gerade gesehen, dass Du ja eigentlich schon selbst die richtige Funktion aufgerufen hast (s. o.
theme('imagecache', 'user_image_large', $account->picture)und es jetzt eigentlich nur noch um die Unschärfe des Bildes geht. Wenn das mit der JPEG-Kompression nichts geändert hat, liegt es wohl tatsächlich an GDlib vs ImageMagick. Kann mich auch daran erinnern, dass es da mal was auf drupal.org zu gab.Also ich bin nun zu folgendem
am 18.08.2010 - 23:12 Uhr
Also ich bin nun zu folgendem Ergebis gekommen:
Das Modul Devel würde eine Erweiterung gut gebrauchen können. Den Code einmal verarbeitet und einmal unverarbeitet anzeigen. Ansonsten eird man echt irre beim Suchen !
Jetzt löse ich es
ala
<div class="profile">
<?php print $profile['Persönliche Informationen']; ?>
</div>
und das Bild ala
<?php$pic = $account->picture;
print theme('imagecache', 'user_image_large', $pic, $alt, $title, $attributes);
?>
auslesen. Dann ein simples Tabellendesign nach gusto erstellen und dazu eine neue Klasse für die css erstellen. Damit kann ich es erreichen, dass z.B. Persönliche Informationen direkt neben dem Pic angezeigt werden und nicht untereinnader. Für das Bild werde ich wohl ImageMagick benutzen. Installiert ist es schoneinmal. Für die Fehler mache ich einen neuen Thread auf, weil es eigendlich mit den Thema hier nicht mehr viel am Hut hat.
Meine Vorgehensweise ist wohl nicht sehr professionell. Falls es da noch eine bessere Lösung gibt bin ich dankbar.
@Werner again. ImageMagick läuft nun. Speziell, wenn ich das Bild per:
<?php$pic = $account->picture;
$title = 'Profilbild';
print theme('imagecache', 'user_image_default', $pic, $alt, $title, $attributes);
?>
ausgebe wird es extrem unscharf. Ich habe das modul Profile Pictures installiert und die Ergebnisse in der Bildqualität verglichen. Erstere Variante bietet deutlich schlechtere Ergebnisse. Liegt es evt. an ImageCache???
Hast Du die entsprechenden
am 19.08.2010 - 09:26 Uhr
Hast Du die entsprechenden Bilder auch aus den Presetverzeichnissen vorher gelöscht? Imagecache rechnet die Bilder einmal um und speichert dann dieses Bild. Das wird dann immer wieder referenziert und nicht nochmal berechnet um den Server zu entlasten.
Beste Grüße
Werner
Ich habe extra komplet neue
am 19.08.2010 - 12:29 Uhr
Jetzt klappt es. Ich habe einfach unter Menu-->Bild-->Originalgröß einen Wert von 150 für die Höhe angegen. Nun werden die Bilder scharf.
???!!?!?! Zu früh gefreut !
Weiss jemand wie man dies einstellen kann?
Die Bildgröße wurde an die maximal zulässigen Abmessungen von 85x85 Pixel angepasst.