2009-11-09 11 views
5

Chcę zmienić zawartość wewnątrz $block->content, którą haczyk Drupal powinienem wprowadzić?zmiana zawartości bloku

+1

W przypadku Drupala 7 (wiem, że twoje pytanie dotyczy 6, ale może to i tak pomóc) istnieje _i_ [hook_block_alter] (http://api.drupal.org/api/drupal/modules!block! block.api.php/function/hook_block_view_alter/7), który pozwoli ci zrobić dokładnie to, czego potrzebujesz. Więc jedną z opcji jest aktualizacja do wersji D7 :) –

Odpowiedz

9

zależności jakie są Twoje potrzeby, mogę myśleć o różnych możliwych sposobów:

  1. Korzystanie template_preproces_block(): Hak ten uznaje się za „przechwytuje” zmienne w drodze do bloku i daje szansę do interweniowania na te. Jest to dość skuteczny sposób robienia tego.
  2. Creating your own template file for the block: pozwala jeszcze kilka sztuczek, ale pod względem szybkości nie jest najlepszy (theming poprzez pliki .tpl.php jest około 5x wolniej niż przy użyciu funkcji, czytałem)
  3. Tworzenie własnego nowy i błyszczący blok przez implementację hook_block(). Jak zasugerował Henrik, można łatwo przejść przez kopiowanie kodu z oryginalnego modułu jako startera. Jest to dobry sposób na zrobienie tego, jeśli twoja zmiana musi wpłynąć na wszystkie możliwe motywy w użyciu na stronie, a nie na tyle, jeśli ma to wpływ tylko na jeden temat (chociaż możesz wdrożyć pewną logikę na podstawie pogody, której dany motyw jest używany lub nie, ale wydaje mi się to bardzo nieeleganckie).
  4. Jeśli wyświetla się blok lub inna zawartość, która ma własny zestaw haczyków, można również zmienić zawartość w ten sposób. Na przykład: jeśli próbujesz zmodyfikować blok logowania (który pokazuje formularz do uwierzytelnienia), możesz wdrożyć hook_form_FORM_ID_alter() lub hook_form_alter().
  5. Using jQuery: To dobre rozwiązanie, jeśli zawartość bloku musi się zmienić asynchronicznie (lub w zależności) od pozostałej części zawartości strony. Należy pamiętać, że starsze przeglądarki (lub wyszukiwarki) nie uruchamiają jednak kodu jQuery.

W innej notatce można całkowicie zmienić podejście do problemu, zmieniając samą naturę "bloku" w coś, co jest bardziej elastyczne. Zniechęciłbym to podejście, chyba że naprawdę odkryjesz, że prosty blok nie zrobi tego, czego potrzebujesz ... jednak jest to możliwość, o której powinieneś wiedzieć. Można zmienić charakter bloku, między innymi przez:

  • Używanie nodeasblock module, który pozwala uzyskać węzła w bloku (w ten sposób jest w stanie wykorzystać w szablonie wiele więcej zmiennych niż proste $title i
  • Korzystanie z views module. Jest to konieczne dla każdego poważnego użytkownika/administratora dumpa ... ale możliwość zastosowania widoków w tym konkretnym przypadku jest bardzo różna w zależności od zawartości bloku, który próbujesz wyprodukować:
  • Korzystanie z panels module, która pozwala tworzyć treści podobne do bloków i odtwarzać je za pomocą grapu Interfejs graficzny (nie ma go w pamięci, jest to ogromny moduł pod względem kosztów ogólnych i ma stromą krzywą uczenia się).
4

AFAIK, nie ma "prawdziwego" haka do zmiany zawartości bloków. Można zaimplementować funkcję yourModule_preprocess_block(), sprawdzając/manipulując przekazaną w tablicy $ variables. Alternatywnie, ponieważ implementacje bloków są zwykle dość krótkie, można skopiować oryginalną logikę generowania bloków do własnej implementacji hook_block(), zapewniając w ten sposób własną wersję z wybranymi dostosowaniami.

Powiązane problemy