Daten des Autors eines Nodes innerhalb des Nodes anzeigen lassen
am 02.08.2008 - 10:21 Uhr in
Ich möchte verschiedene Daten eines Benutzers innerhalb eines Nodes, also in node.tpl.php anzeigen lassen:
1. Name des Autors -> ist geklärt:
<?php
print $name
?>
2. Anzahl der Userpoints:
Ich habe eine Funktion im Modul gefunden, die die Userpoints des Benutzers wiedergibt, der den Node gerade betrachtet. Natürlich soll hier aber die Zahl des Autors stehen, also node->uid:
/**
* @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));
}
Ich habe bereits versucht den Code entsprechend zu ändern, aber es hat nicht funktioniert.
3. Anzahl der Beiträge:
Wenn jemand weiß wie man die Anzahl der Beiträge anzeigen lassen kann, wie kann man dann speziell die Beiträge eines Inhaltstyps, oder die Anzahl der Kommentare anzeigen lassen?
Das war es auch schon. Es wäre hilfreich wenn mir jemand helfen könnte.
P.S.: Vielleicht hilft das weiter: http://drupal.org/node/166238
- Anmelden oder Registrieren um Kommentare zu schreiben
Zu 2. Zitat: Ich habe
am 02.08.2008 - 10:59 Uhr
Zu 2.
Ich habe bereits versucht den Code entsprechend zu ändern, aber es hat nicht funktioniert
Du sollst ja auch nicht den Code des Modules aendern SONDERN bestenfalls diese Funktion dort aufrufen wo Du sie (seine Ausgabe) benoetigst - also in der Templatedatei.
<?php
print 'Blabla Punkte: ' . userpoints_get_current_points($node->uid);
?>
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
DA hätte ich wohl gleich
am 02.08.2008 - 11:29 Uhr
DA hätte ich wohl gleich drauf kommen müssen! Danke, so funktioniert es natürlich. Ich Laie bin nicht drauf gekommen...
Jetzt muss ich nur noch das mit den Anzahl der Beiträgen wissen...
Das sind eigentlich 2 Fragen.
am 02.08.2008 - 11:35 Uhr
Wenn jemand weiß wie man die Anzahl der Beiträge anzeigen lassen kann, wie kann man dann speziell die Beiträge eines Inhaltstyps, oder die Anzahl der Kommentare anzeigen lassen?
Das sind eigentlich 2 Fragen.
Wobei die "2. Frage" unklar formuliert ist.
Welche Kommentare sind gemeint?
Die eines Node oder die eines User?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
das irritiert bestenfalls
am 02.08.2008 - 11:37 Uhr
P.S.: Vielleicht hilft das weiter: http://drupal.org/node/166238
Das hilft nicht weiter sondern irritiert bestenfalls.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Okay, dann irritierts
am 02.08.2008 - 12:36 Uhr
Okay, dann irritierts halt.
Aber ich habe es so gemeint:
1. Anzahl der Kommentare des Autors
2. Anzahl der Beiträge des Autors, eines bestimmten Inhaltstyps
Es tut mir leid wenn der gut gemeinte Link irritiert, ich habe gedacht er wäre für Experten ein Anhaltspunkt.
Hier aber noch was interessantes:
http://drupal.org/node/262577
<?php
$users = db_query("SELECT COUNT(nid) AS count, {users}.uid, {users}.name FROM {node} LEFT JOIN {users} ON {node}.uid = {users}.uid WHERE {node}.uid != 0 GROUP BY uid ORDER BY count DESC LIMIT 10");
while ($user = db_fetch_object($users)) {
print "<a href=\"blog/".$user->uid."\">".$user->name."</a>: ".$user->count." posts<br>";
}
?>
Was genau meinst Du?
am 02.08.2008 - 12:43 Uhr
2. Anzahl der Beiträge des Autors, eines bestimmten Inhaltstyps
Was genau meinst Du?
- Anz. der Beitraege des Authors insgesamt UND Anz. der Beitraege des Authors von einem bestimmten Nodetype?
oder
- Anz. der Beitraege des Authors von einem bestimmten Nodetype?
PS
Das Komma irritiert.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Ich meine die Anzahl der
am 02.08.2008 - 13:00 Uhr
Ich meine die Anzahl der Beiträge eines bestimmten Nodetypes.
Also:
Nodetype A: 45 Beiträge
Notetype B: 84 Beiträge
usw.
Ich hoffe das kleine Beispiel erläutert das besser, als meine schlechte Schreibweise... :]
Aber natürlich nur in Bezug auf den Autor, nicht die gesamte Anzahl aller Beiträge eines Nodetypes.
P.S.: Der obige Code gilt so verändert zu werden, dass nicht eine Liste mit Benutzern angezeigt wird, sondern nur der Autor. Ich kenne mich aber leider mit SQL Datenbankabfragen noch nicht aus.
Ich habe hier noch 2
am 02.08.2008 - 13:41 Uhr
Ich habe hier noch 2 hilfreiche Funktionen gefunden:
Mit dieser Funktion wird die Anzahl der Beiträge pro Typ und pro Jahr aller Benutzer angezeigt:
function custom_count_pull(){
$sql = "SELECT type, COUNT(nid) AS number, FROM_UNIXTIME(created, '%Y') AS createdate FROM {node} GROUP BY type, createdate ORDER BY createdate DESC";
$result = db_query($sql);
$article_count = array();
while ($data = db_fetch_object($result)){
if (isset($article_count[$data->type])) {
$article_count[$data->type][$data->createdate] = $data->number;
} else {
$article_count[$data->type] = array($data->createdate => $data->number);
}
}
$today = date("Y");
$years = array($today,$today+1,$today+2);
$output .= "<table><tr><th>Type</th><th>{$years[0]}</th><th>{$years[1]}</th><th>{$years[2]}</th></tr>";
foreach ($article_count as $type => $value) {
$real_type_name = node_get_types('name', $type);
$output .= "<tr> <td>$real_type_name</td>";
foreach ($years as $year) {
if ($value[$year]):
$output .= "<td>{$value[$year]}</td>";
else:
$output .= "<td>0</td>";
endif;
}
$output .= "</tr>";
}
$output .= "</table>";
return $output;
}
Aber mit der folgenden, ist man schon näher an meinem Ziel. Es wird eine Tabelle angezeigt, wieviel Beiträge pro Typ und pro Benutzer an welchem Datum geschrieben wurden. Wenn man das Argument des Datums streicht, und die funktion so umschreibt, dass nur der Autor relevant ist und nicht alle Benutzer wären wir am Ziel:
<?php
$how_many_per_page = 100;
$query = "SELECT {node}.created AS Date, name, type, COUNT(*) AS Total
FROM {node} JOIN {users}
ON {node}.uid = {users}.uid
GROUP BY FROM_DAYS(TO_DAYS(FROM_UNIXTIME({node}.created))), name, type";
$count = "SELECT COUNT(*) FROM (SELECT DISTINCT FROM_DAYS(TO_DAYS(FROM_UNIXTIME({node}.created))) AS DATE, uid, type FROM {node}) AS Data_row";
$results = pager_query($query, $how_many_per_page, 0, $count);
$header = array(t('Date'), t('Name'), t('Type'), t('Total'));
$attributes = array('width' => '75%',
'align' => 'center',
'border' => '2',
);
$rows = array();
while ($quote = db_fetch_array($results)) {
$rows[] = array(date('Y/m/d',$quote['Date']), $quote['name'], $quote['type'], $quote['Total']);
}
if (count($rows)) {
echo theme('table', $header, $rows, $attributes);
echo theme('pager', NULL, $how_many_per_page);
}
else { echo 'No results found'; }
?>
Anz. Nodes eines Typ von best. User - mit einem View ermitteln
am 02.08.2008 - 18:10 Uhr
Unter Drupal 6 kann man die Info "Anzahl der Nodes eines Typ von einem bestimmten User" bequem und einfach mit einem View ermitteln.
Habe das eben getestet.
Das sollte unter Drupal 5 auch gehen.
PS
Der View wird zur Anzeige der Zahl eingebettet.
D5, bei mehreren Nodetypes sind mehrere Views notwendig.
D6, bei mehreren Nodetypes ein View mit mehreren Anzeigen.
2. PS
Mit 'nem View ersparst Du Dir die "Code-Orgie".
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Ich teste es mal mit dem
am 02.08.2008 - 18:29 Uhr
Ich teste es mal mit dem View-Modul, und erläutere die Vorgehensweise genauer, falls es funktionieren sollte.
Danke für deinen Tipp.
Also bei mir geht das nicht.
am 02.08.2008 - 18:50 Uhr
Also bei mir geht das nicht. Ich finde zumindest kein passendes Feld.
Bei mir funktioniert es.
am 02.08.2008 - 20:40 Uhr
Bei mir funktioniert es. Unter d6 sogar extrem komfortabel.
Wenn Du magst kann ich Dir meinen View mit VNC zeigen.
Wie gesagt, ich denke mit D5 sollte es auch funktionieren. Halt nur nicht in einem View sondern in mehreren - je nach dem wieviel Nodetypes man je User zaehlen will.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Es wäre nett, wenn du das
am 02.08.2008 - 20:46 Uhr
Es wäre nett, wenn du das machen würdest, und mir erläutern würdest wie man es machen könnte, weil es extrem wichtig für mich ist.
Danke schon mal im Voraus!
@drupaler3000, komme doch
am 02.08.2008 - 21:00 Uhr
@drupaler3000, komme doch einfach mal in den DVC.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Ich habe das aber noch gar
am 02.08.2008 - 21:10 Uhr
Ich habe das aber noch gar nicht konfiguriert.
Wer oder was hindert Dich
am 02.08.2008 - 21:27 Uhr
Wer oder was hindert Dich daran es Jetzt zu tun?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Loesung gefunden - Views mit Template
am 03.08.2008 - 13:30 Uhr
Der View so wie Gestern im VNC. Zur Anzeige noch ein Template, welches nur die Anzahl als Ziffer realisiert.
Der View zum Importieren:
$view = new stdClass();
$view->name = 'NodesCount';
$view->description = 'Anz. der Nodes eines Typ der User.';
$view->access = array (
);
$view->view_args_php = '';
$view->page = TRUE;
$view->page_title = '';
$view->page_header = '';
$view->page_header_format = '1';
$view->page_footer = '';
$view->page_footer_format = '1';
$view->page_empty = '';
$view->page_empty_format = '1';
$view->page_type = 'list';
$view->url = 'nodescount/$arg';
$view->use_pager = TRUE;
$view->nodes_per_page = '10';
$view->sort = array (
);
$view->argument = array (
array (
'type' => 'uid',
'argdefault' => '6',
'title' => '',
'options' => '',
'wildcard' => '',
'wildcard_substitution' => '',
),
);
$view->field = array (
array (
'tablename' => 'node',
'field' => 'title',
'label' => '',
'handler' => 'views_handler_field_nodelink',
'options' => 'link',
),
);
$view->filter = array (
array (
'tablename' => 'node',
'field' => 'status',
'operator' => '=',
'options' => '',
'value' => '1',
),
array (
'tablename' => 'node',
'field' => 'type',
'operator' => 'OR',
'options' => '',
'value' => array (
0 => 'story',
),
),
);
$view->exposed_filter = array (
);
$view->requires = array(node);
$views[$view->name] = $view;
Fuer das Views-Template - in der "template.php" eintragen:
/**
* views template to output a view.
* This code was generated by the views theming wizard
* Date: So, 08/03/2008 - 13:37
* View: NodesCount
*
* This function goes in your template.php file
*/
function phptemplate_views_view_list_NodesCount($view, $nodes, $type) {
$fields = _views_get_fields();
$taken = array();
// Set up the fields in nicely named chunks.
foreach ($view->field as $id => $field) {
$field_name = $field['field'];
if (isset($taken[$field_name])) {
$field_name = $field['queryname'];
}
$taken[$field_name] = true;
$field_names[$id] = $field_name;
}
// Set up some variables that won't change.
$base_vars = array(
'view' => $view,
'view_type' => $type,
);
foreach ($nodes as $i => $node) {
$vars = $base_vars;
$vars['node'] = $node;
$vars['count'] = $i;
$vars['stripe'] = $i % 2 ? 'even' : 'odd';
foreach ($view->field as $id => $field) {
$name = $field_names[$id];
$vars[$name] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
if (isset($field['label'])) {
$vars[$name . '_label'] = $field['label'];
}
}
$items[] = _phptemplate_callback('views-list-NodesCount', $vars);
}
//if ($items) {
//return theme('item_list', $items);
//}
return $vars['count'] + 1;
}
Die Variable $count muss um 1 hochgezaehlt werden weil in der Schleife der Zaehlvorgang mit 0 beginnt.
Die Template-Datei "views-list-NodesCount.tpl.php":
<?php // $Id: views-list-NodesCount.tpl.php, v 1.0 2008/08/03 10:36:36 quiptime Exp $
/**
* View: NodesCount
*/
print $nodes['count'];
?>
Und wie schon gesagt. Wenn die Anzahl der Nodes mehrerer Nodetypes benoetigt wird entsprechende Views erstellen.
Den View in Node/Nodetype-Template einfuegen:
<?php
$view_args = array($node->uid); // User ID
$view = views_get_view('NodesCount');
print views_build_view('embed', $view, $view_args, FALSE, '1');
?>
Embed View without insert_view module
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Ich habe den View
am 03.08.2008 - 15:22 Uhr
Ich habe den View importiert, den Code in die template.php datei eingetragen, und den letzten code in die node.tpl.php datei eingetragen. Aber bei mir zeigt der View nichts an, auch wenn ich auf nodescount/$arg gehe.
Wurde der Code bereits getestet, oder ist noch ein Modul oder ein anderer Schritt nötig, damit dieser View funktioniert? Ich bin etwas ratlos. Es scheint mir dass ich alles richtig gemacht habe..
Das muss einfach mit einer
am 06.08.2008 - 21:23 Uhr
Das muss einfach mit einer SQl Abfrage möglich sein, und das ist es auch.
ich weiß nur nicht wie, wenn jemand weiß wie man mit SQL eine Datenbankabfrage macht, wäre es nett wenn er mir weiterhelfen könnte.
Diese Funktion trägt bereits alles in sich:
function count_nodes_of_author($node) {
$how_many_per_page = 100;
$query = "SELECT {node}.created AS uid, name, type, COUNT(*) AS Total
FROM {node} JOIN {users}
ON {node}.uid = {users}.uid
GROUP BY FROM_DAYS(TO_DAYS(FROM_UNIXTIME({node}.created))), name, type";
$count = "SELECT COUNT(*) FROM (SELECT DISTINCT FROM_DAYS(TO_DAYS(FROM_UNIXTIME({node}.created))) AS DATE, uid, type FROM {node}) AS Data_row";
$results = pager_query($query, $how_many_per_page, 0, $count);
$rows = array();
while (
$quote = db_fetch_array($results)) {
$rows[] = array($quote['name'], $quote['type'], $quote['Total']);
}
if (
count($rows)) {
echo theme('table', $header, $rows, $attributes);
echo theme('pager', NULL, $how_many_per_page);
}
else { echo 'No results found'; }
}
Das Einzige was geändert werden muss, ist dass der Name der Username nicht einfach nur ausgegeben wird, sondern nur das von $node->uid alias Autor angezeigt wird:
Das wird jetzt ausgegeben:
admin nodetypeA 1
admin nodetypeB 1
userb nodetypeC 1
Der Name "admin" wird nicht ausgegeben, sondern mit dem Autor "überprüft". Sodass nur die Zeilen des Autors ausgegeben werden.
Dürfte doch nicht so schwer sein, oder??
Ich habe eine einfache
am 10.08.2008 - 14:34 Uhr
Ich habe eine einfache Methode gefunden: Man muss das Modul Userstats installieren und der dokumentation unter read documentation folgen. Damit kann man relativ leicht die Anzahl der Beiträge innerhalb des Nodes, und auch im Profil anzeigen lassen. Leider habe ich es nicht geschafft, die Posts je nach Nodetype zu trennen. Aber besser als nichts ist es allemal.
Hier der Code:
<?php
print user_stats_get_stats('post_count', $node->uid);
?>
Hat jemand vielleicht Tipps, wie man den Code noch etwas modifizieren kann?