Drupal: пользовательский блок не отображается

Я новичок в Drupal 7 и создаю блок по коду, следуя этому учебник.

Поэтому я создаю новую папку модуля в 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;
}

После сохранения файлов я захожу в Администратор/Модули, активирую новый модуль и сохраняю конфигурацию. Теперь я иду в Структура/Блоки, и там должен быть список моего нового Блока, но этого не происходит.

Я выполнил все шаги руководства и почистил кеш Drupal, но проблема не устранена.


person albert    schedule 14.03.2018    source источник


Ответы (2)


Сначала устраните свою ошибку: измените имя функции, в которой вы реализовали hook_block_view(), вам нужно изменить его на function blocks_square_block_view()

/** * Реализует hook_block_view(). */

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

После этого также, если не решить, удалите атрибут 'cache' из hook_block_info(), это необязательно.

Затем выполните 2 шага, если вы пропустили.

1) Очистите весь кеш (/admin/config/development/performance).

2) Включите свой пользовательский модуль (/admin/modules).

После повторной попытки ваш блок должен появиться в (/admin/structure/block).

person AddWeb Solution Pvt Ltd    schedule 14.03.2018
comment
Я изменил функцию имени, как вы говорите, и удалил атрибут кеша, но это не работает. - person albert; 14.03.2018

Решено, проблема была в названии функций. Итак, имена начинаются с «block_square», в котором есть слово «блок», и это вызывает некоторые проблемы, поэтому я изменил все имена на 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;
}
person albert    schedule 14.03.2018
comment
Хорошо, тогда я обновил свой ответ, надеюсь, он будет вам полезен. - person AddWeb Solution Pvt Ltd; 15.03.2018