Сниппет "Рейтинг тэгов"

Главные вкладки

Аватар пользователя Stalker-g2 Stalker-g2 2 апреля 2008 в 17:11

Данный сниппет складывает в отдельную табличку очки, отданные через VotingAPI за статьи, к которым относится данный тэг таксономии
Табличка
Тэг - VotingAPI points sum result

Результат потом используется в выводе тэгов:
вот тут
и вот тут
зелёненькие и красные цифры.

Может, сгодится кому.

function form_tuning_cron() {
    db_query('DELETE FROM av_term_vote');

    $result = db_query('SELECT tid FROM av_term_data WHERE vid = 2 OR vid = 3 OR vid = 4 OR vid = 5');

    $terms = array();
    $nodes = array();
    $i = 0;
    $max = 0;

    while($term = db_fetch_array($result)) {
        $terms[] = $term['tid'];
//      print $term['tid'] . ' ';
    }

    $max = count($terms);
    for($i = 0; $i < $max; $i++) {
//      print '<br />tid ' . $terms[$i] . ':<br />';
        $result = db_query('SELECT nid FROM av_term_node WHERE tid = %d', $terms[$i]);

        $votes = 0;
        while($node = db_fetch_array($result)) {
            $vote_result = votingapi_get_voting_result('node', $node['nid'], 'points', 'vote', 'sum');
//          print $node['nid'] . ' ' . $vote_result->value . ' | ';
            $votes += $vote_result->value;
        }
        $result = db_query('INSERT INTO av_term_vote VALUES (%d, %d)', $terms[$i], $votes);
    }
}

А вот способ, применённый мной для отображения результатов, рекомендовать всем не могу - надо пачтить файлик includes/common.inc.
Нужно найти функцию l() и вставить следующий кусок перед return:

  if(preg_match('/taxonomy\/term\/(\d*)/', $path, $matches)) {
    $term = taxonomy_get_term($matches[1]);

    if($term->vid == 2 OR $term->vid == 3 OR $term->vid == 4 OR $term->vid == 5) {
        $score = db_fetch_object(db_query('SELECT vote FROM av_term_vote WHERE tid=%d', $term->tid));
        if($score->vote) {
            if($score->vote > 0) {
                $votetext = '<a href="/ru/about/rating"><span style="color:#88d493"><sup>+' . $score->vote . '</a></sup></span></a>';
            }
            else if($score->vote < 0) {
                $votetext = '<a href="/ru/about/rating"><span style="color:#de7378"><sub>' . $score->vote . '</sub></span></a>';
            }
            return '<a href="'. check_url(url($path, $query, $fragment, $absolute)) .'"'. drupal_attributes($attributes) .'>'.
($html ? $text : check_plain($text)) . '</a>' . $votetext;
        }
    }

  }

таблица
CREATE TABLE `av_term_vote` (
`tid` int(10) unsigned NOT NULL default '0',
`vote` bigint(20) NOT NULL default '0',
PRIMARY KEY (`tid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Комментарии