web-dev-qa-db-ja.com

最新の投票ユーザーがまだ投票していないことを表示するにはどうすればよいですか?

認証されたユーザーが投票に投票したとき、ユーザーが投票していない次の投票を表示したいと思います。

どのように実装すればよいですか?

1
uwe

私はそれを理解したと思います。 hook_block_infoと_viewをpollモジュールから自分のモジュールにコピーし、クエリを少し変更しました。基本的に、このセッション中にユーザーが投票していない、または投票していない投票が行われます。匿名を有効にするための投票はありません。

function mycustom_block_info() {
  $blocks['recent']['info'] = t('Most recent poll not voted on');
  $blocks['recent']['properties']['administrative'] = TRUE;
  return $blocks;
}


function mycustom_block_view($delta = '') {
  if (user_access('access content')) {
    // Retrieve the latest poll.
    $select = db_select('node', 'n');
    $select->join('poll', 'p', 'p.nid = n.nid');
    $select->leftjoin('poll_vote', 'pv', 'pv.nid = n.nid');
    $select->fields('n', array('nid'))
      ->condition('n.status', 1)
      ->condition('p.active', 1)
      ->condition(db_or()->condition('pv.chid', NULL)->condition('pv.timestamp', REQUEST_TIME - $lifetime, '<'))
      ->orderBy('pv.chid', 'ASC')
      ->orderBy('n.created', 'DESC')
      ->range(0, 1)
      ->addTag('node_access');

    $record = $select->execute()->fetchObject();
    if ($record) {
      $poll = node_load($record->nid);
      if ($poll->nid) {
        $poll = poll_block_latest_poll_view($poll);
        $block['subject'] = t('Poll');
        $block['content'] = $poll->content;
        return $block;
      }
    }
  }
}
0
uwe