Điểm:0

Có cách nào để chuyển một giá trị cho trường ẩn tới nhiều khối được in từ tệp mẫu không?

lá cờ ng

Tình huống là một tệp mẫu (tpl) xuất ra danh sách các biểu mẫu liên hệ trong đó mỗi biểu mẫu là duy nhất cho một ID thuật ngữ trong phần đó trên trang. Tôi cần tạo danh sách tùy chọn tùy chỉnh cho mỗi khối Biểu mẫu web được in bằng cách sử dụng tid được chuyển từ phần có trong mẫu. Cho đến nay tôi không thấy bất kỳ cách nào để làm điều này.

mẫu.tpl.php

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

Phần trên được in cho từng phần (nút) trên trang và tôi có quyền truy cập vào tid nơi khối Webform được in nhưng tôi không thể tìm ra cách nào để chuyển nó vào biểu mẫu.

Điểm:1
lá cờ cn

bạn luôn có thể sử dụng drupal_get_form chức năng truy xuất biểu mẫu trong drupal. chức năng này cho phép bạn gửi bất kỳ đối số cần thiết nào, chẳng hạn như bạn có thể gọi nó như sau:

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

trong trường hợp này $argument1 giá trị được thông qua và có thể được truy cập trong hook_form_SOME_FORM_ID_alter như sau:

if(isset($form_state['build_info']['args'][0]) {
  $form['SOME_ELEMENT']['#default_value'] = $form_state['build_info']['args'][0]; // as $arguments1 được truyền làm tham số đầu tiên
}

hiện đang ghi nhớ điều này, để có được một biểu mẫu web bằng cách sử dụng drupal_get_form bạn cần đoạn mã này (tốt hơn nên sử dụng hook_pre process_HOOK để thêm biểu mẫu web vào mảng kết xuất của bạn):

$nid = ; // ID NODE WEBFORM CỦA BẠN
$node = node_load($nid);
$submission = (đối tượng) mảng();
$enabled = TRUE;
$preview = FALSE;
$webform = drupal_get_form('webform_client_form_' . $nid, $node, $submission, $enabled, $preview, $YOUR_ADDITIONAL_ARGUMENT);

và sau đó trong tệp mẫu của bạn, bạn chỉ cần in $webform của mình:

in drupal_render($webform);

như tôi đã nói, bạn có thể sử dụng hook_form_alter để đặt giá trị mặc định cho phần tử ẩn của mình bằng tham số đã gửi.

Juraj Nemec avatar
lá cờ in
Tôi nghĩ rằng sẽ hữu ích khi nói rằng không nên gọi `drupal_get_form` trong các tệp mẫu. Tốt nhất, OP sẽ cần sử dụng một trong các hàm tiền xử lý trong template.php hoặc chuyển $webform làm tham số cho tệp mẫu đó (ví dụ: nếu hàm `theme()` được gọi trực tiếp từ mô-đun tùy chỉnh).
Alireza Tabatabaeian avatar
lá cờ cn
@JurajNemec và tôi nghĩ rằng đó là một ý tưởng hay khi nói rằng nó đã được đề cập trong câu trả lời
quantumized avatar
lá cờ ng
Cảm ơn bạn! Một câu hỏi nữa.Làm cách nào tôi có thể truy cập đối số trong Biểu mẫu web sau khi đối số được gửi qua drupal_get_form()? Tôi muốn điền vào một trường ẩn, nếu có thể.
Alireza Tabatabaeian avatar
lá cờ cn
Bạn có thể sử dụng hook_form_alter và sau đó bạn có thể truy cập đối số của mình $form_state['build_info']['args'][4]
Juraj Nemec avatar
lá cờ in
@AlirezaTabatabaeian Chà, tôi đã viết nhận xét của mình vì đối với tôi, câu trả lời của bạn không được nêu rõ ràng. Bạn đã viết nó như một ghi chú phụ chỉ trong ngoặc đơn, vì vậy có vẻ như biểu thức đó chỉ có một trọng lượng nhỏ. Nhưng đừng bận tâm, tôi chỉ muốn giúp OP thực hiện tốt nhất ...

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.