Пользовательский блок, который всегда первым в регионе?
Вопрос
Я пытаюсь создать регион для моей темы Drupal 7, которая будет нажавшейся в раскрывающемся списке, чтобы позволить пользователю войти в систему/out, получить доступ к странице их профиля и несколько других вещей. Лучшая аналогия, которую я могу придумать, - это то, что я пытаюсь создать что -то похожее на Такое раскрытие, которое вы видите на таких сайтах, как Twitter. Анкет (Это не в яблочко Так же, как и то, что я пытаюсь построить, но достаточно близко, чтобы продемонстрировать мою точку зрения.)
Теперь ни стилизация региона, ни внедрения шоу/скрытия в jQuery сложно. Ключ здесь состоит в том, чтобы добавить немного пользовательского HTML в область, которая будет завершена вне блоки, но внутри сама регион.
Вывод должен выглядеть примерно так:
<div class="region region-name"> <!-- region -->
<!-- custom HTML "wrapper" -->
<p><a href="link-to-activate-dropdown">Click here</a></p>
<div id="wrapper">
< blocks go here >
</div> <!-- /custom HTML "wrapper" -->
</div> <!-- /region -->
Также важно убедиться, что пользователи не могут перемещать или удалять эти особенные вещи, поэтому я считать Это, вероятно, должно быть в шаблоне.
У кого -нибудь есть идея, как это сделать?
Решение 3
После небольшого копания я обнаружил, что Drupal 7 включает в себя поддержку нового шаблона под названием region.tpl.php
. Анкет Я создал один, и вот как это выглядит:
<?php if ($content): ?>
<?php if ($region == 'popdown'): ?>
<div class="<?php print $classes; ?>">
<a href="link-to-activate" id="popdown-link">Click</a>
<div id="popdown-wrapper">
<?php print $content; ?>
</div>
<script type="text/javascript">
jQuery('#popdown-link').click(function(e) {
e.preventDefault();
jQuery('#popdown-wrapper').toggle();
});
</script>
</div>
<?php else: ?>
<div class="<?php print $classes; ?>">
<?php print $content; ?>
</div>
<?php endif; ?>
<?php endif; ?>
Это не очень элегантно, но, похоже, работает без ошибок. Теперь я могу сосредоточиться на его очистке и выталении логики region.tpl.php
(т.е. перемещение внутреннего, если/еще в template.php
и jquery в script.js
.)
Другие советы
Ваша «пользовательская HTML -обертка» полезна только для JavaScript, поэтому вы смотрите на это неправильно: HTML, сгенерированный Drupal соответствует его использованию.
Вы, наверное, хотите что -то подобное:
$('<your selector>').each(function() {
// Wrap all the content of the region inside a wrapper.
$(this).wrapInner('<div class="my-custom-wrapper" />');
// Create a link and insert it into the region.
var link = $('<p><a href="link-to-activate-dropdown">' + Drupal.t('Click here') + '</a></p>');
link.prependTo($(this)).click(function() {
// Your custom logic.
});
}
Я полагаю, что вы должны отредактировать свой block.tpl.php, как в Drupal 6? Добавьте класс по ссылке и вставьте JavaScript в вашу тему с функцией jQuery, которая переключает контент. Кроме того, не используйте #ID «Обертка», вы не можете иметь более одного идентификатора одинакового в HTML, вы должны использовать классы.