Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

PHP-Profi Frage. User-Picture in dieses Script hinzufügen.

Eingetragen von deepz0ne (48)
am 19.06.2009 - 09:12 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

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">--&gt;</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">--&gt;</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;
?>

‹ cck feld in eigenen modul verwenden Drupal e-commerce ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

theme_username

Eingetragen von stBorchert (6003)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Irgendwie funktioniert dass

Eingetragen von deepz0ne (48)
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">--&gt;</span> ', $users_path); ?></li><?

Dann wird aber leider kein username, kein Bild und auch kein "Du" mehr angezeigt...

  • Anmelden oder Registrieren um Kommentare zu schreiben

print fehlt

Eingetragen von stBorchert (6003)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wow! Das hat funktioniert,

Eingetragen von deepz0ne (48)
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' irgendwie print theme('userpicture' oder so einfügen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

theme_username

Eingetragen von stBorchert (6003)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich benutze ein anderes

Eingetragen von deepz0ne (48)
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?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe es mal selber

Eingetragen von deepz0ne (48)
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?

  • Anmelden oder Registrieren um Kommentare zu schreiben

cool! ich habe jetzt

Eingetragen von deepz0ne (48)
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?

  • Anmelden oder Registrieren um Kommentare zu schreiben

user Bild

Eingetragen von stBorchert (6003)
am 19.06.2009 - 12:13 Uhr
deepz0ne schrieb

print theme('username', $user).' '. theme('user_picture', $user);

Das benötigst Du nicht.

deepz0ne schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

user_picture

Eingetragen von stBorchert (6003)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Global moechte ich dieses

Eingetragen von deepz0ne (48)
am 19.06.2009 - 12:51 Uhr

Global moechte ich dieses lieber nicht aktivieren, eigentlich in dieses Script. Leider funktioniert

Zitat:

<?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 :-(

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Tag 18 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 2 Tagen 10 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 6 Tagen
  • Hey danke
    vor 8 Wochen 9 Stunden
  • Update: jetzt gibt's ein
    vor 8 Wochen 1 Tag
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 2 Tagen
  • In der entsprechenden View
    vor 9 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 22 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association