3

drupal モジュールに付属するブロックを作成しようとしています。ブロックリストに表示されません。コピーペーストしただけでも、さまざまなチュートリアルをたくさん試しましたが、まだ表示されません。私のモジュールブロックが表示されないようにするのは、私の drupal 設定の何かでしょうか? それとも、コードに何か問題がありますか?

モジュールが表示され、アクティブ化されます。

これは今私のコードです:

Helicopter_contest_form.info drupal モジュールが付属するブロックを作成しようとしています。ブロックリストに表示されません。コピーペーストしただけでも、さまざまなチュートリアルをたくさん試しましたが、まだ表示されません。私のモジュールブロックが表示されないようにするのは、私の drupal 設定の何かでしょうか? それとも、コードに何か問題がありますか?

モジュールが表示され、アクティブ化されます。

これは今私のコードです:

Helicopter_contest_form.info

;$Id$
name = Helicopter contest form
description = Block module with a contest form
core = 7.x
package = My modules
files[] = helicopter_contest_form.module

Helicopter_contest_form.module

 /**
* Implements hook_block_info().
*/
function membercount_block_info() {
 $blocks = array ();

$blocks['count_members'] = array (
'info' => t('Count Members'),
'cache' => DRUPAL_NO_CACHE,
);

return $blocks;
}

/**
* Implements hook_block_view().
*/
function membercount_block_view($name) {

if ($name == 'count_members') {
$count = db_query('SELECT COUNT(uid) - 1 FROM {users}')->fetchField();

$content = format_plural($count, 'This site has 1 user.', 'This site has @count users.');

$block = array (
  'subject' => t('Members'),
  'content' => $content,
);

return $block;
 }
 }

ちなみに、すべてのコード 4 スペースを一度にインデントするにはどうすればよいですか? 各行を手作業で行う必要があり、インデントも台無しになります...

4

2 に答える 2

4

フックを実装するときは、フック名の「hook」をモジュールの短い名前に置き換える必要があるため、関数の名前を から に変更するだけですmembercount_block_info( helicopter_contest_form_block_info「hook_block_view」も同様)。

また、files[] = helicopter_contest_form.moduleとにかく .module が必要なため、実際には .info ファイルで言及する必要はありません。

于 2012-11-27T11:04:11.697 に答える
2

コードを次のように調整してみてください。

/**
 * Implements hook_block_info().
 * This hook declares what blocks are provided by the module.
 */
function helicopter_form_info() {
    $blocks = array(); // the added line.
    $blocks['helicopter_form'] = array(
        'info' => t('Helicopter'),
        'cache' => DRUPAL_CACHE_PER_ROLE,
    );
    return $blocks;
}

奇妙だとは思いますが、同じ問題が一度発生し、その行を追加した後に機能しました。

于 2012-11-27T10:41:02.433 に答える