Drupal:自定义块不出现

Drupal: custom block doesn't appear

我是 Drupal 7 的新手,我正在按照此 tutorial.

通过代码创建块

所以我在 drupal/sites/all/modules 创建了一个新的模块文件夹并创建了两个文件:

block_square_menu.info: 它有模块的信息:

name = Block Square Menu
description = Module that create a Block for Square menu, menu shown only in home page
core = 7.x
package = custom

block_square_menu.module: 它包含 PHP 代码:

<?php

/**
 * Implements hook_block_info().
 */
function block_square_block_info() {
    $blocks = array();
    $blocks['block_square'] = array(
        'info' => t('Block Square'),
        'cache' => DRUPAL_CACHE_PER_ROLE,
    );

    return $blocks;
}

/**
 * Implements hook_block_view().
 */
function block_square_block_view($delta = '') {
    $block = array();
    switch ($delta) {
        case 'block_square':
            $block['subject'] = t('block Title');
            $block['content'] = t('Hello World!');
            break;
    }
    return $block;
}

保存文件后,我转到Admin/Modules,激活新模块并保存配置。现在我去 Structure/Blocks 它应该列出我的新块,但它没有。

我已按照所有教程步骤进行操作并清理了 Drupal 缓存,但问题仍然存在。

首先解决你的错误:把你实现hook_block_view()的函数名改成函数blocks_square_block_view()

/** * 实现 hook_block_view()。 */

function blocks_square_block_view($delta = '') {
    $block = array();
     ...... 

如果还没有解决,则从 hook_block_info() 中删除 'cache' 属性,它是可选的。

如果您错过了,请执行 2 个步骤。

1) 清除所有缓存 (/admin/config/development/performance).

2) 启用自定义模块 (/admin/modules).

重试后,您的区块应该出现在 (/admin/structure/block).

已解决,问题是函数的名称。所以名称以 "block_square" 开头,它有 "block" 这个词,这会造成一些麻烦,所以我用 menu_square.

更改了所有名称

所以现在的功能是:

  • menu_square_block_info()
  • menu_square_block_view($delta = '')

文件是:

  • menu_square.info
  • menu_square.module

文件的代码是:

信息:

name = Menu Square
description = Module that create a Block for Square menu, menu shown only in home page
core = 7.x
package = custom

模块:

<?php

/**
 * Implements hook_block_info().
 */
function menu_square_block_info() {
    $blocks['menu_square'] = array(
        'info' => t('Block Square'),
        //'cache' => DRUPAL_CACHE_PER_ROLE,
    );

    return $blocks;
}

/**
 * Implements hook_block_view().
 */
function menu_square_block_view($delta = '') {
    $block = array();
    switch ($delta) {
        case 'menu_square':
            $block['subject'] = t('block Title');
            $block['content'] = t('Hello World!');
            break;
    }
    return $block;
}