Пользовательский блок, который всегда первым в регионе?

drupal.stackexchange https://drupal.stackexchange.com/questions/3031

  •  16-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать регион для моей темы 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, вы должны использовать классы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top