Tartalom szerzők teljesítményének mérése

brtamas képe

Sziasztok!

Tudtok esetleg olyan modult vagy más megoldást (mondjuk views-al), hogy pl. havonként ki legyen listázva, hogy az egyes szerzők (cikk írók, bloggerek) hány tartalmat hoztak létre, illetve összesen hány betűből állnak a havi tartalmaik?

Előre is köszi a tippeket!

Drupal verzió: 
brtamas képe

Sziasztok!

Végül egy ilyen modult írtam a probléma megoldására:

/**
 * Implements hook_menu().
 */
function authors_efficiency_menu() {
  $items = array();
  $items['admin/config/authors_efficiency'] = array(
    'title' => 'Saját beállítások',
    'description' => 'Szülő elem',
    'position' => 'left',
    'weight' => -100,
    'page callback' => 'system_admin_menu_block_page',
    'page arguments' => array(),
    'access arguments' => array('access administration pages'),
    'file' => 'system.admin.inc',
    'file path' => drupal_get_path('module', 'system'),
  );
  // Need at least one child item before your section will appear.
  $items['admin/config/authors_efficiency/efficiency'] = array(
    'title' => 'Szerzők teljesítményének listázása',
    'description' => 'Szerzők teljesítményének kilistázása',
    'page callback' => 'authors_efficiency_page_callback',
    'page arguments' => array(),
    'access arguments' => array('access administration pages'),
    'type' => MENU_NORMAL_ITEM,
  );
 
  return $items;
}
 
function authors_efficiency_page_callback($para=array()){
    $output= '';
 
 
    // define number of results per page
    $num_per_page = 50;
 
    $header = array('Felhasználó','Hónap','Tartalmak száma','Tartalmak hossza összesn','Átlagos hosszúság');
 
    // define sql to fetch results
    $query= db_select('node','n');
    $query->condition('n.status', '1');
    $query->condition('n.created', (time()-(120*24*60*60)), '>');
    $query->join('field_data_body', 'b', 'n.nid = b.entity_id');
    $query->join('users', 'u', 'n.uid = u.uid');
    $query->condition('b.entity_type', 'node');
    $query->addExpression('CONCAT(YEAR(FROM_UNIXTIME(n.created)),\'-\',LPAD(MONTH(FROM_UNIXTIME(n.created)), 2, \'0\'))', 'node_month');
    $query->addExpression('SUM(CHAR_LENGTH(b.body_value))', 'node_char_length');
    $query->addExpression('COUNT(*)', 'node_count');
    $query->fields('n', array('uid'));
    $query->fields('u', array('name'));
    $query->groupBy('CONCAT(n.uid, \'@\', node_month)');
    $query->orderBy('node_month', 'DESC');
    $query->orderBy('u.name', 'ASC');
 
 
    $count_query= db_select('node','n');
    $count_query->condition('n.status', '1');
    $count_query->condition('n.created', (time()-(120*24*60*60)), '>');
    $count_query->addExpression('COUNT(*)', 'node_count');
    $count_query->fields('n', array('uid'));
    $count_query->groupBy('CONCAT(n.uid, \'@\', CONCAT(YEAR(FROM_UNIXTIME(n.created)),\'-\',LPAD(MONTH(FROM_UNIXTIME(n.created)), 2, \'0\')))');
 
 
    $count_query = $count_query->countQuery();
    $maxCount = $count_query->execute()->fetchField();;  
 
    $page = pager_default_initialize($maxCount, $num_per_page);
    $offset = $num_per_page * $page;
 
    $query->range($offset, $num_per_page);
    $result= $query->execute()->fetchAll();
 
    $rows = array();
    foreach($result as $record){
        $row = array(
                    $record->name,
                    $record->node_month,
                    $record->node_count,
                    $record->node_char_length,
                    round($record->node_char_length/$record->node_count),
               );
        $rows[] = $row;
    }
 
    // Depending on the context there may be a better choice than this
    $output.=  theme('table', array('header' => $header, 'rows' => $rows));
    $output.=  theme('pager');
 
 
    return($output);
}
4
0