Phần tử hình thức #markup không thể có con


7

Tôi có biểu mẫu của mình, nhưng bất kỳ phần tử con nào của phần tử "#markup" sẽ không xuất hiện khi biểu mẫu được hiển thị.

$form['html'] = array(
  '#type' => 'markup',
  '#markup' => '<h2>My Heading</h2>',
  '#tree' => true,
);

$form['html']['element'] = array(
  '#type' => 'textfield',
  '#title' => 'Foo',
);

Trong ví dụ này, trường mẫu "phần tử" sẽ không được hiển thị.

Đây có phải là lỗi của Drupal không, hay tôi cần phải làm gì đó cụ thể?


Nó không phải là một lỗi, nó là một quan niệm sai lầm. Người ta không thể tiêm các yếu tố khác trong một văn bản đánh dấu. Thay vào đó, tạo một thùng chứa và thêm đánh dấu và trường văn bản ở đó.
Neograph734

Câu trả lời:


8

Không thể sử dụng "#tree" với phần tử "#markup" có vẻ là một lỗi của Drupal, vì trang tham chiếu cho báo cáo API biểu mẫu rằng "#tree" được hỗ trợ bởi phần tử "#markup" .

Như cách giải quyết, bạn cũng có thể sử dụng thuộc tính "#prefix", như trong đoạn mã sau:

$form['html']['element'] = array(
  '#type' => 'textfield',
  '#title' => 'Foo',
  '#prefix' => '<h2>My Heading</h2>',
);

Nếu nó không được hiển thị như bạn mong đợi, thì bạn chỉ cần xóa "#tree" khỏi mã của mình, điều này dường như không cần thiết, nếu tất cả những gì bạn muốn là hiển thị <h2>My Heading</h2>thẻ trước các trường mẫu. API biểu mẫu biểu hiện các phần tử theo thứ tự chúng xuất hiện trong mảng; nếu bạn muốn thay đổi thứ tự, bạn có thể sử dụng thuộc tính " # weight ".

$form['html'] = array(
 '#type' => 'markup',
 '#markup' => '<h2>My Heading</h2>',
);

$form['html']['element'] = array(
  '#type' => 'textfield',
  '#title' => 'Foo',
);

Cảm ơn, nhưng tôi cần yếu tố cây vì hình thức thực tế của tôi phức tạp hơn một chút so với ví dụ trên. Tôi cũng đang cố gắng tránh sử dụng các giá trị đánh dấu tiền tố / hậu tố để giữ cho mã sạch hơn và như vậy. Biểu mẫu của tôi bao gồm một vài vòng lặp tạo ra cấu trúc cây của các phần tử có độ sâu khoảng 4. Nếu loại phần tử 'đánh dấu' không thể có con hơn tôi sẽ phải cấu trúc lại một số biểu mẫu của mình.
dùng1589

Có vẻ như một lỗi của Drupal, vì yếu tố "đánh dấu" được cho là có thể sử dụng "#tree"; những gì tôi báo cáo là cách giải quyết duy nhất / giải pháp thay thế mà tôi biết.
kiamlaluno

1
Tôi đã mở một báo cáo vấn đề: drupal.org/node/1261040 . Phiên bản giới thiệu là 8.x vì các lỗi đầu tiên được sửa trong Drupal 8, sau đó được chuyển trở lại các phiên bản trước.
kiamlaluno

1

Nói chính xác hơn một chút, các #markupphần tử con không được hiển thị. Chúng được xử lý cho mục đích hình thức, mặc dù.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.