not president's blog

脳直で書きます。自分が覚えたい事を書いているだけです。

ブロックの構築①

1)hook_block_XXXによるコメント承認の実装

 ①hook_block_infoにて追加ブロックを実装

function approval_block_info()
{
$blocks[0]['info'] = t('承認待ちのコメント');
$blocks[0]['cache'] = DRUPAL_NO_CACHE;
return $blocks;
}

 

 ②hook_block_configureにより、ブロックの設定を実装

function approval_block_configure($delta = '')
{
$form['approval_block_num_posts'] = array(
'#type' => 'textfield',
'#title' => t('承認待ちコメントを表示する数'),
'#default_value' => variable_get('approval_block_num_posts',5),
);
return $form;
}

 

 ③hook_block_saveによるブロック設定の保存を実装

function approval_block_save($delta = '',$edit = array())
{
variable_set('approval_block_num_posts',
(int)$edit['approval_block_num_posts']);
}

 

 ④hook_block_viewによりView表示の実装

function approval_block_view($delta = '')
{
if(user_access('administer comments')){
// saveで保存した表示する承認待ちコメント数を取得する
$num_posts = variable_get('approval_block_num_posts',5);

//$tary = array($num_posts);

// 非掲載コメントを取得するためのクエリ
$result = db_query_range('SELECT c.* FROM {comment} c WHERE
c.status = :status ORDER BY c.created',
0,
//$form,
$num_posts,
array(':status' => COMMENT_NOT_PUBLISHED));

// ユーザが編集後に戻れるように現在の場所を保存する
$destination = drupal_get_destination();

$items = array();
/*
while ($comment = db_fetch_object($result)) {
$items = l($comment->subject,'node/'.$comment->nid,
array('fragment' => 'comment-'.$comment->cid)). ' '.
l(t('[edit]'),'comment/edit/'.$comment->cid,
array('query'=>$destination));
}
*
*/
while ($comment = db_query($result)->fetch()) {
$items
= l($comment->subject,'node/'.$comment->nid,
array('fragment' => 'comment-'.$comment->cid)). ' '.
l(t('[edit]'),'comment/edit/'.$comment->cid,
array('query'=>$destination));
}

$block['subject'] = t('承認待ちコメント');
// リンクの配列を順序なしリストとテーマ化する
$block['content'] = theme('item_list',$items);
}
return $block;
}

 

※おまけ

・匿名ユーザにコメントを追加させる方法

 ユーザ→権限→Post commentの匿名ユーザにチェックを入れる。