Ну собственно сабж...
Есть самописный модуль, хотелось бы, чтобы он добавлял кое-какую информацию в стандартные блоки, формируемые модулями ядра.
Возможно ли это в принципе и если да то как?
1. Ищем в коде ядра функцию, выводящую контент нужного вам блока.
2. Копипастим код функции в код вывода контента своего блока.
3. Делаем нужные вам изменения.
4. Заменяем системный блок вашим на странице управления блоками.
5. Профит...
По-моему, блоки задаваемые модулями ядра ничем не отличаются от блоков созданных при помощи кастомного модуля. Если можно к одним зацепиться, то можно и к другим.
На вскидку, я бы попробовал через preprocess_ функцию.
если просто добавить к содержанию блока что-то (в начало, в конец) то способов море..
А если немного подправить содержание, то проще как посоветовали в первом посте..
Другие варианты "костыльнее"-))
если просто добавить к содержанию блока что-то (в начало, в конец) то способов море..
А если немного подправить содержание, то проще как посоветовали в первом посте..
тогда..как писали выше... в template.php функцию ИМЯ_ТЕМЫ_preprocess_block(&$vars) в $vars должен быть элемент, содержащий тело блока и идентификаторы блока.
На вскидку, я бы попробовал через preprocess_ функцию.
"orion76" wrote:
тогда..как писали выше... в template.php функцию ИМЯ_ТЕМЫ_preprocess_block(&$vars) в $vars должен быть элемент, содержащий тело блока и идентификаторы блока.
Господа, вы хоть API-то читаете? Блок слишком общее понятие. Для всех остальных в общем случае вы увидете только переменную $content. И что в шаблоне, что в preprocess-функции вы сможете только добавить что-то в начало или в конец. Правда, бывают варианты - модуль может отправлять в блок куда больше переменных, чем по дефолту. Модуль также может объявлять хуки, которыми можно изменить контент блока. Но это уже надо смотреть конкретный модуль.
А изменить вывод блока внутри $content в общем случае, можно только так, как я написал выше.
В препроцесс-функцию содержимое блока УЖЕ поступает в одной переменной и его можно только не ИЗМЕНИТь, а полностью ЗАМЕНИТЬ.
Т.е. ядро находит в регионе блок, вызывает хук, формирующий его, отправляет переменные в препроцесс-функцию и тут, надо же практически тот же код с вашими добавлениями вызывается снова. Не экономнее ли оформить свой блок сразу?
Ваш метод, с поиском какого то кода странный вообщем то.
В пять сек находится. И чего в этом странного? Люди писали вывод блока, оттестили код на баги, документировали... По-моему проще его скопипастить и использоватьсо своими фичами, чем изобретать свои велосипеды.
тогда..как писали выше... в template.php функцию ИМЯ_ТЕМЫ_preprocess_block(&$vars) в $vars должен быть элемент, содержащий тело блока и идентификаторы блока.
Э, нет, хотелось бы это сделать в модуле, а не в теме...
Это вообще возможно?
Я понимаю, что в общем случае порядок вызова модулей непредсказуем, и в момент вызова хука из одного модуля переменные, которые создаёт другой модуль, могут ещё вообще не существовать... но относится ли это к ситуации модуль ядра / доп.модуль?
Я понимаю, что в общем случае порядок вызова модулей непредсказуем, и в момент вызова хука из одного модуля переменные, которые создаёт другой модуль, могут ещё вообще не существовать...
Порядок вызова хуков модулей полностью предсказуем. Drupal - это программа, а не какая-то там Госдума РФ. Просто надо поинтересоваться в API, как это происходит. В случае же отрисовки конкретного блока всегда вызывается конкретный hook_block с вполне определенными параметрами.
Комментарии
1. Ищем в коде ядра функцию, выводящую контент нужного вам блока.
2. Копипастим код функции в код вывода контента своего блока.
3. Делаем нужные вам изменения.
4. Заменяем системный блок вашим на странице управления блоками.
5. Профит...
Тоже вариант конечно...
Для сферического блока в вакууме - единственный верный.
По-моему, блоки задаваемые модулями ядра ничем не отличаются от блоков созданных при помощи кастомного модуля. Если можно к одним зацепиться, то можно и к другим.
На вскидку, я бы попробовал через preprocess_ функцию.
если просто добавить к содержанию блока что-то (в начало, в конец) то способов море..
А если немного подправить содержание, то проще как посоветовали в первом посте..
Другие варианты "костыльнее"-))
Да, надо "просто добавить". Подправлять не надо.
тогда..как писали выше... в template.php функцию ИМЯ_ТЕМЫ_preprocess_block(&$vars) в $vars должен быть элемент, содержащий тело блока и идентификаторы блока.
Господа, вы хоть API-то читаете? Блок слишком общее понятие. Для всех остальных в общем случае вы увидете только переменную $content. И что в шаблоне, что в preprocess-функции вы сможете только добавить что-то в начало или в конец. Правда, бывают варианты - модуль может отправлять в блок куда больше переменных, чем по дефолту. Модуль также может объявлять хуки, которыми можно изменить контент блока. Но это уже надо смотреть конкретный модуль.
А изменить вывод блока внутри $content в общем случае, можно только так, как я написал выше.
ТС достаточно добавлять в конец-начало
Если так, то ему хватит перекрытия шаблона нужного ему блока.
Через препроцесс можно полностью заменить вывод контента блока. Ваш метод, с поиском какого то кода странный вообщем то.
В препроцесс-функцию содержимое блока УЖЕ поступает в одной переменной и его можно только не ИЗМЕНИТь, а полностью ЗАМЕНИТЬ.
Т.е. ядро находит в регионе блок, вызывает хук, формирующий его, отправляет переменные в препроцесс-функцию и тут, надо же практически тот же код с вашими добавлениями вызывается снова. Не экономнее ли оформить свой блок сразу?
Э, нет, хотелось бы это сделать в модуле, а не в теме...
Это вообще возможно?
Я понимаю, что в общем случае порядок вызова модулей непредсказуем, и в момент вызова хука из одного модуля переменные, которые создаёт другой модуль, могут ещё вообще не существовать... но относится ли это к ситуации модуль ядра / доп.модуль?
Да, это видимо единственный вариант, надо смотреть хуки конкретных модулей...
в шапке этой страницы ссылка API
забиваете в поиск "preprocess" (верхний-правый угол)...
там все написано..
блин... умеют же на друпал.ру из сниппета модуль раздуть-)))
проблемка то ... фигня-)))
Так и модуль написать - фигня.
кому как... в подобных топиках я вообще боюсь употреблять выражение "написать модуль"...-)))