id des Posters
Eingetragen von C4 (5)
am 13.08.2007 - 13:33 Uhr in
am 13.08.2007 - 13:33 Uhr in
Hallo,
Ich schaff es nicht die id des Artikelverfassers zu laden. Leider hab ich
recht wenig Erfahrung mit Drupal und kann kaum PHP. Kann mir jemand helfen?
<?php
$uid = $node->uid;
?>
Beabsichtigt ist es eine action zu erstellen, die mit Hilfe des Modules Vote Actions
dann den Verfasser des jeweiligen Artikels mit User points belohnt, wenn sein Artikel
gut bewertet wurde. Jetzt muss ich eigentlich dann nur noch die id des Verfassers
weitergeben, aber das klappt ja wie erwähnt nicht.
Der ganze Code:
<?php
function action_node_point($op, $edit = array(), &$node) {
switch($op) {
case 'do':
global $user;
$points = 10;
$uid = $node->uid;
userpoints_userpointsapi('points', $points, $uid, $event, $description);
watchdog('action', t('Points'));
break;
case 'metadata':
return array(
'description' => t('Add 10 Points to Poster'),
'type' => t('Node'),
'batchable' => true,
'configurable' => false,
);
break;
}
}
?>
Vielen Dank schonmal im Vorraus.
- Anmelden oder Registrieren um Kommentare zu schreiben
Siehe hier:
am 13.08.2007 - 14:02 Uhr
Siehe hier: http://www.drupalcenter.de/node/4309#comment-14215
--
bv - drupalcenter.de
Soweit hatte ich das ja auch
am 13.08.2007 - 14:20 Uhr
Soweit hatte ich das ja auch gesehen, aber ich hab wirklich 0 Ahnung ...
Dort heist es ja
<?php
$node = node_load(NID);
print $node->uid;
?>
Wie finde ich jetzt die NID des aktuellen Nodes raus ^^ ?
Wie finde ich jetzt die NID
am 13.08.2007 - 15:00 Uhr
Wie finde ich jetzt die NID des aktuellen Nodes raus ^^ ?
[/quote]
ich bin mir nicht sicher aber kannst du nicht unter ansicht-->quelltext in den quelltext schauen??? hab da sowas stehen wie:
<div class="" id="node-60">
bin mir aber net sicher
lg jessica
Probiers mal mit der
am 13.08.2007 - 15:04 Uhr
Probiers mal mit der Varibalen "$nid" ;)
gruß pebosi
gruß pebosi
--
https://pebosi.net
...
am 13.08.2007 - 15:23 Uhr
Ohjeh, ob ich das noch hinkrig? =)
Also @jessica: Ich will das ja dynamisch für jeden Artikel laden, der bewertet wurde ...
Kann mir jemand konkret sagen, wie der code aussehen muss ?
Weil um $nid zu laden muss ich doch schon das node mit node_load geladen haben ?!
weil
<?php
global $node;
$nid = $node->nid;
$node = node_load(NID);
print $node->uid;
?>
wäre ja irgendwie komisch...
sorry, da bin ich dann auch
am 13.08.2007 - 15:29 Uhr
sorry, da bin ich dann auch überfragt. Möchte Dir ja nicht irgend einen Quatsch erzählen! *g*
Aber pebosi kann Dir da sicher helfen ;)
Gruss Jessica
Wenn du z.B. auf node/123
am 13.08.2007 - 15:35 Uhr
Wenn du z.B. auf node/123 bist kannst du die 123 mit arg(1) kriegen.
gruß pebosi
gruß pebosi
--
https://pebosi.net
ahh ql
am 13.08.2007 - 17:07 Uhr
ahh ql
habs jetzt zumindest mal in nem post mit angeschaltenem php
hinbekommen mit:
<?php
global $node;
$node = node_load( arg(1));
print $node->uid;
$points = 10;
userpoints_userpointsapi('points',$points, $node->uid, $node->type);
?>
ich versuchs mal in den ganzen code drumherum einzubaun ^^
Vielen Dank nochmal für die Hilfe!!!
Lösung
am 15.08.2007 - 09:48 Uhr
Also falls es noch jemanden interessiert, ich habs hinbekommen,
trotz meines miserablen php's ^^.
Meine Artikelverfasser erhalten nun für Gute Bewertungen/Votes
jeweils User Points.
Verwendete Module: User Points, Votingapi, Fivestar, Vote Actions, Actions
Funktion für das Actions Module. (Einfach in die Actions.inc)
function action_node_10_points($op, $edit = array(), &$node) {
switch($op) {
case 'do':
$poster_id = $node->uid;
$points = 10;
userpoints_userpointsapi('points', $points, $poster_id, $event, $description);
watchdog('action', t('Set Points'));
break;
case 'metadata':
return array(
'description' => t('Add 10 Points to Poster'),
'type' => t('Node'),
'batchable' => true,
'configurable' => false,
);
break;
}
}
Anschließend (nach konfigurieren aller Module) ergab sich das Problem, dass
bei jeder Veränderung des eigenen Votes der Verfasser erneut Punkte bekam.
Das Problem hab ich provisorisch gelöst, in dem ich im Modul Fivestar (fivestar.module)
die Funktion
votingapi_change_vote($old_vote, $value);
ausgeklammert hab und die Funktion votingapi_recalculate_results in die
else if Schleife gesetzt habe:
// If the old vote exists, either delete it (if the new one is zero)
// or change it. If it doesn't exist and the vote is non-zero, cast
// it and recalculate.
if ($old_vote = db_fetch_object($result)) {
// votingapi_change_vote($old_vote, $value);
}
elseif ($value != 0) {
votingapi_add_vote($type, $cid, $value, 'percent', 'vote', $uid);
return votingapi_recalculate_results($type, $cid);
}
}
else {
...
Damit ist zwar das Abändern von Votes nichtmehr möglich ... aber naja, wie
gesagt, das ist eher eine provisorische Lösung.
Danke nochmal an alle für die Hilfe.
mfg C-4