Блок меняет свой ID при перемещении между регионами?

В Drupal 6 у меня есть настраиваемый блок, который я назвал и поместил в пользовательскую правую область боковой панели. Идентификатор этого блока (который я узнал из block.tpl.php из вспомогательной переменной $block_id) равен 7.

Я переопределяю вывод этого блока, поскольку он отображает представление, и мне нужно изменить разметку; У меня есть функция предварительной обработки в template.php под названием myTheme_preprocess_block(), которая ищет уникальный идентификатор блока таким образом:

myTheme_preprocess_block(&$vars) {

    $this_block_id = $vars['id']; /* region-independent ID (for reliability) */
    $vars['template_files'] = array();

    switch ($this_block_id) {

        case 7:
            $vars['template_files'][] = 'block-my-override-template';
            break;
        default:
            /* take no action */
    }
}

Теперь я переместил этот блок из области правой боковой панели (которая является пользовательской областью, а не областью по умолчанию, которая поставляется с Garland) в область нижнего колонтитула, которая также имеет произвольное имя. И вдруг мой основной файл шаблона, block-my-override-template.tpl.php, больше не упоминается.

Я немного покопался и вывел уникальный идентификатор блока из block.tpl.php, и волшебным образом этот блок изменил свой идентификатор с 7 на 13! С каменным лицом, не иначе! Возврат этого блока в правую область боковой панели также возвращает блоку ID 7 (и весь мой код снова начинает работать).

Мой вопрос таков: как мы можем однозначно идентифицировать блок, если его «уникальный» идентификатор меняется при перемещении из одного региона в другой?


person Jamie Dexter    schedule 30.09.2011    source источник
comment
В настоящее время я создаю уникальный текстовый тег внутри блока в Drupal, например. {JD_MY_BLOCKNAME}, а затем, используя функцию, аналогичную приведенной выше, обнаруживая это, а не идентификатор блока. Но это кажется таким громоздким.   -  person Jamie Dexter    schedule 03.10.2011


Ответы (1)


Если вы используете представление, почему бы вам вместо этого не переопределить отображение блока представления вместо того, чтобы возиться с фактическим блоком?

В качестве альтернативы вы могли бы просто объявить свой пользовательский блок в модуле? Это должно облегчить вам управление тематическими аспектами блока.

person Community    schedule 11.10.2011
comment
Спасибо за ваши предложения - я попробую эти альтернативные методы в следующий раз. Я пытался поступить правильно, переопределив в template.php - общая документация Drupal настолько ужасна, что я, так сказать, фактически в глубоком конце без поплавка. ;) - person Jamie Dexter; 01.11.2011