2009-09-20 9 views

Odpowiedz

15

drupal_get_form($form_id) - umieścić go w module za hook_block ($ op == 'view') lub nawet ... dreszcz ... wewnątrz bloku z filtrem na PHP.

Najpierw znajdź identyfikator formularza - poszukaj ukrytego input w formularzu o nazwie form_id. Jego wartość powinna być identyfikatorem formularza.

Można również po prostu użyć modułu Form Block.

+1

Dzięki. To wystarczyło. Ale dlaczego dreszcz? – coderama

+3

Zasadniczo filtr PHP jest złym pomysłem. Ze strony podręcznika Drupala na ten temat: "... jest to znaczące i niebezpieczne zagrożenie dla bezpieczeństwa w rękach złośliwego użytkownika, nawet zaufany użytkownik może przypadkowo włamać się na stronę, wprowadzając zniekształcony lub niepoprawny kod PHP". Niemal zawsze lepiej jest napisać moduł (naprawdę kilka linii nad głową). –

+3

Jedna anegdota, miałem niewielki błąd składniowy w węźle z filtrem PHP. Zepsuł indeksowanie wyszukiwania, które złamało crona. Nie jest warta złożoności debugowania. – Grayside

0

Jeszcze jedno polega na umieszczeniu kodu PHP w bazie danych zamiast w systemie plików, gdzie reszta jest. Łatwo jest zapomnieć i marnować mnóstwo czasu na wyszukiwanie kodu, a więc grep jest o wiele wygodniejszym sposobem przechodzenia przez każdy blok i sprawdzania, czy jest tam PHP.

26

w Drupal 7, wygląda następująco:

function yourmodule_block_view($delta='') 
{ 
    switch($delta) { 
    case 'your_block_name': 
     $block['subject'] = null; // Most forms don't have a subject 
     $block['content'] = drupal_get_form('yourmodule_form_function'); 
     break; 
    } 
    return $block; 
} 

Tablica formy zwrócone przez drupal_get_form zostanie automatycznie renderowane.

yourmodule_form_function jest funkcją (w module lub istniejącym module Drupala), która zwraca tablicę formularzy;

+1

pamiętaj, że musisz zaimplementować hook_block_info() –