Сегодня понадобилось сделать N количество блоков с разными но не уникальными стилями, причем количество блоков может менятся, и постоянно лазить и дописывать CSS не улыбается... не найдя готового решения (ну или поленившись поискать как следует) написал вот это:
// $Id: block.tpl.php,v 1.3 2007/08/07 08:39:36 goba Exp $
// В таблице boxes, в колонке info хранится Описание блока (Block description).
// Это обязательное поле значение которого мы вводим при создании блока
// но видимое только в админке. Берем это значение:
//
$block_info = block_box_get($block->delta);
// Разбираем полученые данные по нужному шаблону:
//
preg_match_all("/{(.*?)}$/",$block_info['info'],$block_class);
// Просто переписываем переменную, избавляясь от масива
//
$block_class = $block_class[1][0];
// Добавляем класс составленный с учетом полученых выше данных
//
?>
<div class="block block-<?php print $block_class; ?>">
<div class="block-title"><?php print $block->subject; ?></div>
<div class="block-content"><?php print $block->content; ?></div>
</div>
теперь создаем блоки с именами типа Новости{red-block} где red-block - имя нужного класса
покаместь работает, но есть ли другие решения? и чем может быть чревато использование моего способа?
Комментарии
http://drupal.org/node/190815
...
block-[region|[module|-delta]].tpl.php
base template: block.tpl.php
Suggestions made based on these factors in this order:
1. block-module-delta.tpl.php
2. block-module.tpl.php
3. block-region.tpl.php
"module" being the name of the module and "delta", the internal id assigned to the block by the module. For example, "block-user-1.tpl.php" would be used for the default user navigation block since it was created by the user module with the id of 1. "region" will take effect for specific regions.
...
это конешно все конечно классно, только если юзеру вдруг нада будет добавить 3 красных и 4 синих блока или перекрасить все синие в красные? это ему лезть смотреть дельты, потом лезть создавать шаблоны, дописывать классы к нужному стилю ? или что другое прикажите?
Я бы предложил написать модуль с двумя (ну, или чуть больше) функциями:
1. hook_form_block_add_block_form_alter(). Это для модификации формы добавления блока, которая выводится на странице admin/build/block/add. Здесь нужно добавить нужное количество радио кнопок для выбора стиля. И ещё добавить свои validate и submit обработчики.
1.1 _validate и _submit функции, чтобы сохранить выбранные стили в базу. Таблицу, кстати, тоже придётся создать.
2. hook_preprocess_block(). Чтобы получить из базы имя нужного для этого блока класса и добавить его куда-нибудь в $vars['class'].
Я думал над созданием отдельного поля формы добавления блоков, и скорее всего так и прийдется делать так как модуль views использует текстовое значение $block->delta и не вносит его в таблицу boxes и соответственно мой код не работает (