Id autori dei commenti

6 contenuti / 0 new
Ultimo contenuto
Id autori dei commenti

Ciao a tutti, vorrei sapere se è possibile mettere in un array tutti gli id (uid) degli autori dei commenti di un determinato nodo. Mi basterebbe anche sapere se esiste qualche funzione che restituisce l'autore di un determinato commento (cid).
Grazie

ho provato a fare questa query ma non mi da nessun risutato Dove sbaglio?

function prova1() {
$risultato = db_query_range(db_rewrite_sql("SELECT nc.nid FROM {node_comment_statistics} nc WHERE nc.comment_count > 0 ORDER BY nc.last_comment_timestamp DESC", 'nc'), 0, $number);
$number='';
  $nids = array();
  while ($row = db_fetch_object($risultato)) {
    $nids[] = $row->nid;
  }
  $comments = array();
  if (!empty($nids)) {
    $risultato = db_query_range('SELECT c.subject FROM {comments} c INNER JOIN {node} n ON n.nid = c.nid WHERE c.nid IN ('. implode(',', $nids) .') AND n.status = 1 AND c.status = %d ORDER BY c.cid DESC', COMMENT_PUBLISHED, 0, $number);
    echo db_fetch_object($risultato);
while ($autore = db_fetch_object($risultato)) {
      print $autore;
    }
  }
}

Scusa.... La tua funzione è errata in quanto non ritorna nulla. Inoltre non si usa echo nelle funzioni di Drupal.
Ho preso in considerazione la tua necessità: al riguardo puoi guardare questo video:

http://www.youtube.com/watch?v=ppROtOTHe5Q

perchè puoi utilizzare view per creare la tua vista. Oppure utilizza questa funzione mettendo i campi come vuoi tu:

<?php
 
function prova1() {
    
$header = array(
      array(
'data' => t('Uid'), 'field' => 'c.uid', 'sort' => 'desc'),
      array(
'data' => t('Nid'), 'field' => 'c.nid', 'sort' => 'desc'),
      array(
'data' => t('Subject'), 'field' => 'c.subject', 'sort' => 'desc'),
      array(
'data' => t('Name'), 'field' => 'c.name', 'sort' => 'desc'),
     );
    
$query = "SELECT c.uid, c.nid, c.subject, c.name FROM {node} AS n LEFT JOIN {comments} AS c ON n.nid = c.nid INNER JOIN {users} AS u ON c.uid = u.uid WHERE n.status =1 AND c.status =1";
    
$query .= tablesort_sql($header);
    
$result = pager_query($query, 25);
     while (
$row = db_fetch_array($result)) {
      
$rows[] = array($row['c.uid'], $row['c.nid'], $row['c.subject'], $row['c.name']);
      
//$rows[] = array($row['pid'], $row['nid'], $row['uid'], $row['subject'], $row['comment'], $row['hostname'], $row['timestamp'], $row['status'], $row['format'], $row['thread'], $row['name'], $row['mail'], $row['homepage'], $row['cid']);
    
}
     if (!
$rows) {
      
$rows[] = array(array('data' => t('Non ci sono record in questa tabella'), 'colspan' => 4));
     }
    
$output = theme('table', $header, $rows);
    
$output .= theme('pager', NULL, 25, 0);
     print
theme('page', $output);
}
?>

Si tratta di una tabella paginata per 25, ordinabile con una select tra node, comment e user. Non so una piccola cosa: come funziona il tablesort_sql per l'ordinamento iniziale...

Ciao ciao

ma se voglio fare dei confronti per vedere se il visitatore della pagina ha già lasciato un commento non posso farlo utilizzando questa funzione perchè non mi restituisce un array con il quale posso fare dei confronti, ma stampa solo risultati themed. mi spiego meglio io vorrei arrivare a questa soluzione (espongo in pseudo-codice):

while(cont<numero_commenti){
if(visitatore_pagine==autori[cont])
print "qualcosa a";
else
print "qualcosa b";
cont++}

Ecco:

<?php
 
//query sulla tabella utenti
$sql = db_query("SELECT uid FROM {users}");
$output = "<ul>";
while (
$row = db_fetch_array($sql)) {
  
$checkuid = $row['uid'];
   if (
db_result(db_query("SELECT COUNT(*) FROM {comments} WHERE uid =%d", $checkuid)) > 0) {
    
$output .= "<li>se un utente con id $checkuid ha scritto commenti fai qualcosa qui <li>" .$checkuid;
   } else {
    
$output .= "<li>altrimenti fai qualcosa qui<li>";
   }
}
$output .= "</ul>";
return
$output;
?>

...e grazie 1000

ho arrangiato il tutto per la mia esigenza, comunque ha funzionato. Grazie