PHP-Profi Frage. User-Picture in dieses Script hinzufügen.
am 19.06.2009 - 09:12 Uhr in
Hallo,
ich habe einen Block erstellt mit folgendem PHP-Code (bei drupal.org gefunden. Jetzt möchte ich gerne nicht nur die Usernamen anzeigen, sondern auch die User-Pictures. Da ich mich mit der PHP-Programmierung garnicht auskenne, würde ich mich freuen wenn jemand mir helfen könnte. Ich nehme an, es müsste irgendwo im folgendem Teil eingefügt werden:? <li>DU --> <? print implode(' <span class="soc-conection-arrow">--></span> ', $users_path); ?></li>
Was auch noch toll wäre dass anstatt "DU" das User-Picture vom angemeldeten Benutzer angezeigt werden würde.
Danke schön!
Blockinhalt:
<?php
/**
* Find all paths from a user to another, up to a given number of hops (zero-based)
* @return array of arrays, each of which is a path starting at $from ending at $to, length up to $depth; or NULL if there is no connection
*/
function get_connections($from, $to, $depth = 0) {
global $user;
$rtid = 1;
//print "*enter ($from, $to, $depth)*";
//check if $to is a contact of $from
if (count(user_relationships_load(array('between' => array($from, $to), 'approved' => 1, 'rtid' => $rtid)))) {
return array(array($to));
}
//print "ND*";
//recurse over all contacts of $from looking which knows $to
//base case
if ($depth === 0) {
//print "BC*";
return array();
}
$result = array();
foreach(user_relationships_load(array('requester_id' => $from, 'approved' => 1, 'rtid' => $rtid)) as $rel) {
if ($rel->requestee_id == $user->uid) { continue; }
$chains = get_connections($rel->requestee_id, $to, $depth - 1);
if (count($chains)) {
//found a connection, prepend this contact to returned chain
//print "found(";
//print_r($chains);
//print ")*";
foreach($chains as $chain) {
array_unshift($chain, $rel->requestee_id);
$result[] = $chain;
//print "unshifted:";
//print_r($chain);
//print ":";
}
}
}
//print "*exit ($from, $to, $depth)*";
return $result;
}
/** Comparison function to sort shortest arrays before longer ones */
function array_length_compare($a1, $a2) {
return count($a1) - count($a2);
}
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
$uid = $node->uid;
}
else if (arg(0) == 'user' && is_numeric(arg(1))) {
$uid = arg(1);
}
//print "[$uid]";
global $user;
//special case - author is you
if ($user->uid == $uid) { return; }
//special case - author is an associate
$rel_to_author = user_relationships_load(array('between' => array($user->uid, $uid), 'approved' => 1, 'rtid' => $rtid));
if (count($rel_to_author)) {
$rel_to_author = array_pop($rel_to_author);
?><?= theme('username', user_load($uid)) ?> ist Dein <?= $rel_to_author->name ?><?
return;
}
//find indirect paths
$paths = get_connections($user->uid, $uid, 2);
if (count($paths)) {
usort($paths, "array_length_compare");
?>
<ul><?
$shown = 0;
$last_path_length = 0;
foreach ($paths as $path) {
$users_path = array();
//show up to 6 links, but do not increase lengths of the paths to keep it pretty
if ($shown < 6 && ($shown == 0 || count($path) <= $last_path_length)) {
$last_path_length = count($path);
foreach($path as $link) {
$users_path[] = theme('username', user_load($link));
}
?><li>DU --> <? print implode(' <span class="soc-conection-arrow">--></span> ', $users_path); ?></li><?
}
$shown++;
}
?></ul><?
}
?>Seiten:
<?php
global $user;
if (arg(0) == 'node' && is_numeric(arg(1)) && !arg(2)) {
//show on certain nodetypes, or on profile nodes of other users
$node = node_load(arg(1));
return array_search($node->type, array('blog', 'book', 'event', 'file', 'page', 'poll', 'story', 'webform', 'profile')) !== FALSE || ($node->type == 'profile' && $node->uid != $user->uid);
}
if (arg(0) == 'user' && !arg(2) && arg(1) != $user->uid) {
return TRUE;
}
return FALSE;
?>- Anmelden oder Registrieren um Kommentare zu schreiben

theme_username
am 19.06.2009 - 09:56 Uhr
Moin.
Dazu überschreibst Du
theme_usernameund gibst dann in der modifizierten Version das Bild des Benutzers (so denn vorhanden) anstelle des Nutzernamens aus.Das Wort "Du" kannst Du dann auch einfach mittels
<?phpglobal $user;
theme('username', $user);
?>
ersetzen. Dann hast Du dort auch gleich einen Link zum entsprechenden Benutzerprofil dabei.
Beispiel:
<?php
function garland_username($object) {
if ($object->uid && $object->name) {
// Shorten the name when it is too long or it will break many tables.
if (drupal_strlen($object->name) > 20) {
$name = drupal_substr($object->name, 0, 15) .'...';
}
else {
$name = $object->name;
}
$name = check_plain($name);
$image = FALSE;
// Check if user pictures are enabled in theme settings.
if (variable_get('user_pictures', FALSE)) {
if ($account->picture && file_exists($account->picture)) {
$name = theme('image',
$object->picture,
t('picture of !name', $name),
t('picture of !name', $name),
array('class' => 'userpicture'),
);
$image = TRUE;
}
}
if (user_access('access user profiles')) {
$output = l($name,
'user/'. $object->uid,
array('attributes' => array('title' => t('View user profile.'), 'html' => $image)),
);
}
else {
$output = $name;
}
}
else if ($object->name) {
// Sometimes modules display content composed by people who are
// not registered members of the site (e.g. mailing list or news
// aggregator modules). This clause enables modules to display
// the true author of the content.
if (!empty($object->homepage)) {
$output = l($object->name,
$object->homepage,
array('attributes' => array('rel' => 'nofollow')),
);
}
else {
$output = check_plain($object->name);
}
$output .= ' ('. t('not verified') .')';
}
else {
$output = check_plain(variable_get('anonymous', t('Anonymous')));
}
return $output;
}
?>
hth,
Stefan
--
sei nett zu Deinem Themer
Irgendwie funktioniert dass
am 19.06.2009 - 10:14 Uhr
Irgendwie funktioniert dass nicht. Wenn ich anstatt "DU" folgendes eingebe:
<?phpglobal $user;
theme('username', $user);
?>
wird also die Zeile so:
<li><?phpglobal $user;
theme('username', $user);
?> --> <? print implode(' <span class="soc-conection-arrow">--></span> ', $users_path); ?></li><?
Dann wird aber leider kein username, kein Bild und auch kein "Du" mehr angezeigt...
print fehlt
am 19.06.2009 - 10:27 Uhr
Sorry, hatte in der Schnelle ganz einfach das
printvergessen :-).<?phpglobal $user;
print theme('username', $user);
?>
Stefan
--
sei nett zu Deinem Themer
Wow! Das hat funktioniert,
am 19.06.2009 - 10:54 Uhr
Wow! Das hat funktioniert, danke danke danke!
Dass andere habe ich so richtig verstanden. Was müsste ich denn überschreiben? Kann ich denn nicht beispielsweise anstatt
print theme('username'irgendwieprint theme('userpicture'oder so einfügen?theme_username
am 19.06.2009 - 11:04 Uhr
Naja, der lange Code-Schnipsel von mir ist schon eine fertige überschriebene Version von
theme_username(ausgehend von der Annahme, dass Du garland als Theme verwendest).theme_userpicturegibt es in Drupal 6 nicht mehr.hth,
Stefan
--
sei nett zu Deinem Themer
Ich benutze ein anderes
am 19.06.2009 - 11:34 Uhr
Ich benutze ein anderes Template und Drupal 6 (sorry dass ich dass nicht angegeben habe). Aber nochmal darauf zurück zu kommen: ist es nicht möglich anstatt den Usernamen das Userbild in diesem Code aus zu geben?
Ich habe es mal selber
am 19.06.2009 - 11:42 Uhr
Ich habe es mal selber versucht und
<?phpglobal $user;
print theme('username', $user);
durch
<?phpglobal $user;
print theme('user_picture', $account);
?>
ausgetauscht.
Leider funktioniert dass nicht. Es erscheint nur der Benutzername, aber nicht als Link und mit einem komischen Kästchen umrandet. Warum funktioniert dass nicht so?
cool! ich habe jetzt
am 19.06.2009 - 11:51 Uhr
cool!
ich habe jetzt folgendes eingefügt:
<?phpglobal $user;
print theme('username', $user).' '. theme('user_picture', $user);
?>
Jetzt gibt er mir den Namen und das Bild aus! Genau so wollte ich es auch haben. Nur..., wie kann ich die anderen User auch so hinbekommen?
user Bild
am 19.06.2009 - 12:13 Uhr
print theme('username', $user).' '. theme('user_picture', $user);
Das benötigst Du nicht.
Nur..., wie kann ich die anderen User auch so hinbekommen?
Indem Du die von mir gepostete Funktion in die template.php Deines Themes einfügst und "garland" durch den Namen Deines Themes ersetzt. Dann wird der Nutzername (immer) durch das Bild ersetzt (wenn der Nutzer denn eins hochgeladen hat).
hth,
Stefan
--
sei nett zu Deinem Themer
user_picture
am 19.06.2009 - 12:24 Uhr
Btw.: wenn Du das ohne Überschreiben machen willst, kannst Du bei den anderen Nutzern einfach auch das
theme('user_picture'anfügen.Dann jedoch so:
<?phpforeach($path as $link) {
$current_user = user_load($link); // was steht da eigentlich in $link?
$users_path[] = theme('username', $current_user) . theme('user_picture', $current_user);
}
?>
Stefan
--
sei nett zu Deinem Themer
Global moechte ich dieses
am 19.06.2009 - 12:51 Uhr
Global moechte ich dieses lieber nicht aktivieren, eigentlich in dieses Script. Leider funktioniert
<?phpforeach($path as $link) {
$current_user = user_load($link); // was steht da eigentlich in $link?
$users_path[] = theme('username', $current_user) . theme('user_picture', $current_user);
}
?>
nicht richtig. Jetzt bekomme ich alle User 2x, und mein Bild (dass was wir vorhin ersetzt haben) ist jetzt komplett verschwunden :-(