изменить содержимое блока - PullRequest
5 голосов
/ 10 ноября 2009

Я хочу изменить содержимое внутри $block->content, какую ловушку Drupal мне следует реализовать?

Ответы [ 2 ]

9 голосов
/ 11 ноября 2009

В зависимости от ваших потребностей, я могу придумать несколько возможных путей:

  1. Использование template_preproces_block () : этот хук по существу "перехватывает" переменные на пути к блоку и дает вам возможность вмешаться в них. Это довольно эффективный способ сделать это.
  2. Создание собственного файла шаблона для блока : это позволяет использовать еще несколько трюков, но с точки зрения скорости это не лучший вариант (их использование в файлах .tpl.php примерно в 5 раз медленнее, чем при использовании). функции я читаю)
  3. Создание собственного совершенно нового и блестящего блока с помощью hook_block () . Как подсказал Хенрик, вы можете легко скопировать код из исходного модуля в качестве начального. Это хороший способ сделать это, если ваше изменение должно повлиять на все возможные темы, используемые на сайте, не так сильно, если это повлияет только на одну тему (хотя вы можете реализовать некоторую логику в зависимости от того, используется ли данная тема или нет, но это мне кажется крайне неэлегантным).
  4. Если в блоке отображаются формы или другой контент, имеющий собственный набор хуков, вы также можете изменить контент таким образом. Например: если вы пытаетесь изменить блок входа в систему (который показывает форму для аутентификации), вы можете реализовать либо hook_form_FORM_ID_alter () или hook_form_alter () .
  5. Использование jQuery : это хорошее решение, если содержимое блока должно изменяться асинхронно (или зависимо) от остального содержимого страницы. Имейте в виду, что устаревшие браузеры (или поисковые системы) не будут запускать код jQuery.

С другой стороны, вы можете полностью изменить подход к проблеме, изменив саму природу "блока" на нечто более гибкое. Я склонен препятствовать этому подходу, если вы действительно не обнаружите, что простой блок не будет делать то, что вам нужно ... но это возможность, о которой вы должны знать. Вы можете изменить природу блока, среди прочего:

  • Использование модуля nodeasblock , который позволяет вам поместить узел в блок (что позволяет использовать в шаблоне намного больше переменных, чем простые $title и $content.
  • Использование модуля views . Это необходимо знать любому серьезному пользователю / администратору drupal ... но применимость представлений к этому конкретному случаю сильно варьируется в зависимости от содержимого блока, который вы пытаетесь создать.
  • Использование модуля панелей , который позволяет создавать блочно-подобный контент и играть с ним через графический интерфейс (не говоря уже о том, что это огромный модуль с точки зрения издержек и крутой кривой обучения) ).
4 голосов
/ 11 ноября 2009

AFAIK, нет «настоящих» хуков для изменения содержимого блоков. Вы можете реализовать функцию yourModule_preprocess_block(), проверяющую / манипулирующую переданным массивом $ variable. В качестве альтернативы, поскольку реализации блоков, как правило, довольно короткие, вы можете скопировать исходную логику генерации блоков в свою собственную реализацию hook_block(), предоставив тем самым собственную версию с желаемыми настройками.

...