it-swarm-eu.dev

Jak identifikujete prvek formuláře?

Stále se učím Drupalu a pokoušel jsem se použít hook_form_alter() k změně velikosti textového pole přidaného z modulu. Mým problémem je, že si nemyslím, že prvek správně odsazuji.

Zde je kód prvku:

<input type="text" class="form-text form-autocomplete" value="" size="60" id="edit-2" name="2" maxlength="128" autocomplete="OFF">

Zde je můj kód modulu:

/**
 * Implements hook_form_alter().
 */
if ($form_id == 'edit-2') {
  $form['text'] = array(
    '#type' => 'text',             
    '#size' => 25,
  );
}

Nejsem si jistý, co mám dělat; jakékoli návrhy by byly užitečné.

Dík!

5
Lostsoul

HTML id nemá nic společného s $form_id.

$form_id Je název celého formuláře. Ve většině případů je to název funkce, která generuje formulář, pokud není použit hook_forms ().

Namísto kontroly $ form_id s podmínkou if je často snazší implementovat konkrétnější hook_form_FORM_ID_alter () hook. Takže pokud je form_id BLA, můžete přímo vytvořit function yourmodule_form_BLA_alter(&$form, &$form_state) a nemusíte se vůbec bavit s $ form_id.

Existují výjimky, když to nefunguje nebo není to prakticky, ale ve většině případů se doporučuje použít tento háček (je to také zlepšení výkonu, protože vaše funkce bude vyvolána pouze pro tento konkrétní formulář a ne pro každý jednotlivý formulář) v Drupalu).

Pokud si nejste jisti, co je $ form_id, implementujte hook_form_alter() a vložte tam drupal_set_message($form_id). To by pak mělo vytisknout všechny ID formulářů na stránce, na které se právě nacházíte, což vám umožní snadno vybrat tu, kterou chcete změnit.

Pokud jde o název elementu formuláře, nemůžete uhodnout, že ve většině případů z HTML, protože pokud není #tree Nastaveno na PRAVDA, jsou jména sloučena, takže by to mohlo být $form['some_fieldset']['example'] V struktura formuláře $ a pouze name="example" v HTML.

Chcete-li najít prvek, který chcete změnit, existují dva způsoby.

a) Podívejte se na zdrojový kód funkce, která definuje strukturu formuláře.

b) Použijte dpm($form) (vyžaduje devel.module).

Dávám přednost druhé metodě a toto je obvykle druhý krok po vymýšlení $ form_id, pokud přesně nevím, co chci dělat. dpm () tiskne složité struktury polí/objektů velmi pěkným a přehledným způsobem. To je vlastně něco, na co byste si měli zvyknout po celou dobu, kdy pracujete s Drupalem. Nehádejte jen věci. Budete se často mýlit. Místo toho, pokud existují nějaké proměnné, které chcete použít, ale neznáte jejich přesnou strukturu, přidejte dpm ($ var), načtěte stránku/spusťte akci a pak můžete přesně vidět, s čím pracujete.

Upravit:

Posledním problémem je, že právě tento kód tento prvek formuláře zcela nahrazuje. Místo toho chcete pouze přepsat vlastnost #size, jako je tato:

$form['Finder_form'][2]['#size'] = 25;
9
Berdir

Problém je v tom, že se díváte na HTML vytvořené společností Drupal, abyste se rozhodli, který identifikátor pole formuláře chcete upravit.

  • hook_form_alter(), hook_form_FORM_ID_alter() a hook_form_BASE_FORM_ID_alter () (představeno v Drupal 7) přímo nemění výstup HTML vyrobené z Drupalu, mění pole obsahující hodnoty popsané v Form API Quickstart Guide , Form API Reference (pro Drupal 7, tam jsou Generování formuláře a Form API Reference ).
  • Formulář, který se pokoušíte změnit, může obsahovat pole formuláře, které je obsaženo v jiném poli formuláře; k tomu obvykle dochází u polí formuláře, která jsou součástí sady polí. Struktura pole formuláře používaného formulářovým API je obtížné interpretovat na základě výstupu HTML.

To, co byste museli udělat, je

  • najděte modul, který vytvoří pole formuláře, které se pokoušíte změnit
  • zjistěte funkci vytváření formulářů, která generuje formulář obsahující toto pole formuláře
  • přečtěte si pole obsahující popis pole formuláře, které potřebujete změnit

Jakmile to uděláte, můžete vytvořit implementaci háčku, který vám umožní změnit toto pole formuláře.

Pokud je funkce tvůrce formulářů například path_admin_form() a váš modul je mymodule.module, můžete implementovat mymodule_form_path_admin_form(&$form, &$form_state).

3
kiamlaluno

Nejprve chcete vyhledat formulář v HTML načtené stránky.

<form class="node-form node-article-form" enctype="multipart/form-data" action="/cruzr/node/226/edit?destination=admin/workbench" method="post" id="article-node-form" accept-charset="UTF-8"><div><div class="form-item form-type-textfield form-item-title">

</form>

ID je zde 'tvar článku-uzel'.

Pak chcete použít funkci zpětného volání HOOK_form_FORM_ID_alter () .

1
Adam S

1 Pro rychlou odpověď bych použil html. Značka formuláře vám to řekne

<form action="/yhivebook/class/917/1503856800?XDEBUG_SESSION_START=10676" method="post" id="yhivebook-booking-form"

2 V parametru hook_form_alter je třetím parametrem form_id

function views_megarow_form_alter(&$form, &$form_state, $form_id) {

3 Každá funkce s $ form_state ji má

$form_state['build_info']['form_id']

Nasměrujte tam svůj debugger.

Například odeslání formuláře s ID formuláře bude fungovat.

drupal_form_submit($form_state['build_info']['form_id'], $form_state);
0
Interlated