PHP-anrop - hur gör man?

Events happening in the community are now at Drupal community events on www.drupal.org.
frippuz's picture

Hej,
jag tog steget från .NET till Drupal och PHP - så ni kanske fårstår hur förbryllad jag känner mig nu...

Jag har lyckats genomföra ett helt websitebygge utan att koda en rad PHP, och har börjat lära mig hur Drupal hänger ihop med vilka moduler som är bra och hur man konfigurerar dem - men. Nu har jag kört fast.

Jag använder mig av modulen userpoints samt några som hör ihop med den för att samla poäng som jag vill presentera i samband med användarens "signatur" - raden med namn och datum på nya noder eller kommentarer.
Jag kom så långt att jag gjorde en function garland_comment_submitted($comment)
i den försökte jag anropa userpoints_get_current_points($uid); för att få antal poäng -fast den tycks inte returerna något alls - eller så gör jag på fel sätt. I övrigt verkar modulen fungerna. . .

Efter denna något lång inledningen, har jag egentligen två frågor:

  1. Hur hämtar man med bas på ett användarnamn en hel användarprofil?
  2. Gör jag mitt anrop ovan rätt, eller vad missar jag?

Mvh,
Fredric

Comments

Hej! Om du kopierade

solipsist's picture

Hej!

Om du kopierade funktionen rakt av finns inte variabeln $uid. Du behöver ta den ur $comment-objektet (säkrast att se om funktionen finns först så vi slipper ett fatal error ifall modulen inte är aktiverad):

if (function_exists('userpoints_get_current_points')) {
  userpoints_get_current_points($comment->uid);
}

Du kan ladda in ett helt användarobjekt (med profilfält) så här:

$user = user_load($comment->uid);

Om du vill ha den inloggade användaren finns en global variabel:

global $user;

Jakob Persson - NodeOne

api.druopal.org

TBarregren's picture

Min kollega har ovan sagt allt som behöver sägas. Jag vill bara tipsa om api.drupal.org där du bl.a. kan läsa dokumentationen till user_load().


Thomas BarregrenNodeOne

Hej, tack för infon Jakob,

frippuz's picture

Hej,
tack för infon Jakob, jag har testat lite nu, och kommit en bit på väg.

så här såg min metod ut från början:

function garland_comment_submitted($comment) {
  $uid = $comment->uid;
  $points = userpoints_get_current_points($uid);

  return('uid: '. $uid. ', points: '. $points . ', name:'.$comment->name);
}

Denna returnerade uid: 5, points: 0, name:frpa

Jag la till kollen om metoden finns:

function garland_comment_submitted($comment) {
   $uid = $comment->uid;
   $points = -1;
 
   if (function_exists('userpoints_get_current_points')) {
      $points = userpoints_get_current_points($comment->uid);
}
 
   return('uid: '. $uid. ', points: '. $points . 'name:'.$comment->name);
}


...och resultatet blir fortfarande: uid: 5, points: 0, name:frpa

Det säger mig att metoden körs och att den returerar 0 - något verkar alltså vara knas här.

Anropet för att få tag på en användare fungerade utmärkt, tack!

Thomas: api.drupal.org verkar vara en bra källa, ska söka mer i den framledes. Tack å bock

Funktionen

solipsist's picture

Funktionen userpoints_get_current_points returnerar alltså 0. Har användaren 0 poäng? Vad förväntar du dig att funktionen skall returnera? Tar funktionen verkligen UID som argument och inte ett helt användarobjekt?


Jakob Persson - NodeOne

svar på funktionen

frippuz's picture

funktionen ska returnera antal poäng användaren har. Jag vet att användaren har 55 poäng, men inget returneras.

Metoden set ut så här:

/**
* @param uid: user id of the user to get or lose the points
*
* @return number of current points in that user's account
*/
function userpoints_get_current_points($uid = NULL, $tid = NULL) {
  if (!$uid) {
    global $user;
    $uid = $user->uid;
  }
  if (!$tid) {
    $tid = userpoints_get_default_tid();
  }
  elseif ($tid == 'all') {
    return (int)db_result(db_query('SELECT SUM(points) FROM {userpoints} WHERE uid = %d', $uid));
  }
  return (int)db_result(db_query('SELECT points FROM {userpoints} WHERE uid = %d AND tid = %d', $uid, $tid));
}

Jag har ändå lyckats få tag i det jag söker nu genom att gå genom $user och har fått önskad funktionalitet både på _comment_submitted samt _node_submitted.
Jag var osäker på jag hittat en bugg, eller om jag använde funktionen på fel sätt.

Tack för hjälpen.

//Fredric

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week