Проблема с тематическим блоком опроса в Drupal 6
Я хотел иметь возможность контролировать макет и контейнеры для всех элементов (выбор, название, голосование и т.д.) Внутри моего блока опроса и решил добавить свой собственный шаблон для того же самого.
Как и любой нуб, я проверил блок с помощью devel и получил файл шаблона блока, используемые методы предварительной обработки (в моем случае poll-vote.tpl внутри модуля опроса ядра drupal и template_preprocess_poll_vote внутри poll.module) и имя файла-кандидата для шаблона как poll-vote-block.tpl.php внутри каталога моих тем (сайты/все/темы/my_theme) и в соответствующей теме template.php использовал функцию предварительной обработки следующим образом:
function my_theme_preprocess_poll_vote(&$variables) {
echo 'Im in';
$form = $variables['form'];
$variables['choice'] = drupal_render($form['choice']);
$variables['title'] = check_plain($form['#node']->title);
$variables['vote'] = drupal_render($form['vote']);
$variables['rest'] = drupal_render($form);
$variables['block'] = $form['#block'];
// If this is a block, allow a different tpl.php to be used.
if ($variables['block']) {
$variables['template_files'][] = 'poll-vote-block-custom';
}
print_r($variables['template_files']);
}
Первоначально я установил значение template_files как "опрос-голосование-блок", и это, похоже, не повлияло на блок, что я снова подтвердил с помощью devel.
Я распечатал эхо-сообщение, чтобы убедиться, что предварительный процесс был вызван, и он его распечатал. Я переименовал template_files (и файл шаблона) и распечатал его, чтобы получить следующее:
Массив ([0] => опрос-голосование-блок [1] => опрос-голосование-блок-пользовательский )
Однажды я наткнулся на шаблоны тем в документах drupal, в которых методы предварительной обработки не обязательно переопределяются, но помещаются в очередь... мне кажется, что файл tpl моего метода предварительной обработки имеет более низкий приоритет и, следовательно, не может быть переопределен. Следовательно, я не могу выполнить свое требование по тематизации блока опроса
Было бы неплохо узнать, не ошибаюсь ли я в этой концепции, и надеяться кто-нибудь мог бы дать мне некоторое представление об этом, чтобы решить мою проблему.
Заранее спасибо!!
Редактировать
Проблема была окончательно решена. Я создал block-poll.tpl.php файл и затем смог переопределить значение по умолчанию poll-vote.tpl.php с помощью моего метода предварительной обработки и poll-vote-block-custom.tpl.php .
По-видимому, точно так же, как в случае, когда нужно block.tpl.php для его block-module-delta.tpl.php чтобы переопределить функциональность по умолчанию, это возможно, это было мое дело.
Помечая ответ джимаджаммы как решение, поскольку он оказывается хорошей документацией и справочным материалом, достойным того, чтобы быть вики-страницей для тематизации Drupal для начинающих разработчиков.
Ура!!
1 answers
Если все, что вы просто пытаетесь изменить, - это макет формы, а не содержащиеся в ней данные, все, что вам нужно сделать, это изменить CSS для различных оболочек.
В этом примере это будет выглядеть как
<div class="poll">
<div class="vote-form">
<div class="choices">
<?php if ($block): ?>
<div class="title"><?php print $title; ?>:</div>
<?php endif; ?>
<?php print $choice; ?>
</div>
<?php print $vote; ?>
</div>
<?php // This is the 'rest' of the form, in case items have been added. ?>
<?php print $rest ?>
</div>
Итак, если в CSS вашей темы вы добавили
.poll {
color: red;
background-color: blue;
}
Теперь этот блок будет окрашен в красный и синий цвета.
И если вы добавили
.vote-form {
border: 2px solid green;
}
Тогда форма будет иметь зеленую рамку. и т. д. и т. д.
Теперь, если вам нужно что-то изменить больше, добавьте еще несколько дивов или измените их порядок и т. Д. Вы можете просто скопировать стандартный шаблон опроса в каталог тем, обновить свои кэши, и drupal подберет его и переопределит шаблон из самого опроса, не нужно называть его по-другому.