PHP-Profi Frage. User-Picture in dieses Script hinzufügen.
Eingetragen von deepz0ne (48)
am 19.06.2009 - 09:12 Uhr in
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_username
und 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
<?php
global $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
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Irgendwie funktioniert dass
am 19.06.2009 - 10:14 Uhr
Irgendwie funktioniert dass nicht. Wenn ich anstatt "DU" folgendes eingebe:
<?php
global $user;
theme('username', $user);
?>
wird also die Zeile so:
<li><?php
global $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
print
vergessen :-).<?php
global $user;
print theme('username', $user);
?>
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
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_userpicture
gibt es in Drupal 6 nicht mehr.hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
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
<?php
global $user;
print theme('username', $user);
durch
<?php
global $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:
<?php
global $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
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
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:
<?php
foreach($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
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Global moechte ich dieses
am 19.06.2009 - 12:51 Uhr
Global moechte ich dieses lieber nicht aktivieren, eigentlich in dieses Script. Leider funktioniert
<?php
foreach($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 :-(