Puncte:0

Există o modalitate de a transmite o valoare unui câmp ascuns către mai multe blocuri tipărite dintr-un fișier șablon?

drapel ng

Scenariul este un fișier șablon (tpl) care scoate o listă de formulare de contact în care fiecare este unic pentru un ID de termen din secțiunea sa de pe pagină. Trebuie să generez o listă de opțiuni personalizată pentru fiecare bloc de formular web tipărit folosind un tid transmis din secțiunea în care se află în șablon. Până acum nu văd vreo modalitate de a face asta.

sample.tpl.php

<?php
   $block = module_invoke('webform', 'block_view', 'my-block-3581');
   print render($block['content']);
?>

Cele de mai sus sunt tipărite pentru fiecare secțiune (nod) de pe pagină și am acces la tid-ul în care este tipărit blocul Webform, dar nu pot găsi vreo modalitate de a-l transmite în formular.

Puncte:1
drapel cn

poți folosi întotdeauna drupal_get_form funcția de a prelua o formă în drupal. această funcție vă permite să trimiteți orice argumente necesare, de exemplu, o puteți numi astfel:

$form = drupal_get_form('SOME_FORM_ID', $argument1);

în acest caz, $argument1 valoarea este transmisă și poate fi accesată în hook_form_SOME_FORM_ID_alter după cum urmează:

if(isset($form_state['build_info']['args'][0]) {
  $form['SOME_ELEMENT']['#default_value'] = $form_state['build_info']['args'][0]; //ca $arguments1 este trecut ca prim parametru
}

acum având în vedere acest lucru, pentru a obține un formular web folosind drupal_get_form aveți nevoie de acest fragment de cod (mai bine folosiți hook_preprocess_HOOK pentru a adăuga formular web la matricea dvs. de randare):

$nid = ; //ID-UL NODULUI WEBFORM
$nod = node_load($nid);
$submission = (obiect) array();
$enabled = TRUE;
$previzualizare = FALSE;
$webform = drupal_get_form('webform_client_form_' . $nid, $node, $submission, $enabled, $preview, $YOUR_ADDITIONAL_ARGUMENT);

și apoi, în fișierul șablon, puteți pur și simplu să tipăriți formularul $web:

print drupal_render($webform);

după cum am spus, puteți folosi hook_form_alter pentru a seta valoarea implicită a elementului ascuns folosind parametrul trimis.

Juraj Nemec avatar
drapel in
Cred că este util să spunem că nu este o idee bună să apelați `drupal_get_form` în fișierele șablon. În mod ideal, OP va trebui să folosească una dintre funcțiile de preprocesare din template.php sau să treacă $webform ca parametru în acel fișier șablon (dacă funcția `theme()` este apelată direct, de exemplu dintr-un modul personalizat).
Alireza Tabatabaeian avatar
drapel cn
@JurajNemec și cred că este o idee bună să spun că a fost deja menționat în răspuns
quantumized avatar
drapel ng
Mulțumesc! Inca o intrebare.Cum pot accesa argumentul din formularul web odată ce este trimis prin drupal_get_form()? Aș dori să populez un câmp ascuns, dacă este posibil.
Alireza Tabatabaeian avatar
drapel cn
Puteți folosi hook_form_alter și apoi puteți accesa argumentul dvs. $form_state['build_info']['args'][4]
Juraj Nemec avatar
drapel in
@AlirezaTabatabaeian Ei bine, mi-am scris comentariul pentru ca pentru mine nu este clar precizat in raspunsul tau. Ai scris-o ca o notă secundară doar între paranteze, așa că se pare că există doar o mică pondere pe acea expresie. Dar nu contează, am vrut doar să ajut OP cu cele mai bune practici...

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.