Làm cách nào để thay đổi / ẩn nhãn của phần tử đầu vào ở dạng (tạo / chỉnh sửa)?


7

Chúng ta có thể chủ đề nhãn của bất kỳ trường nào trong tpl hoặc thậm chí đơn giản bằng cách thay đổi tùy chọn quản lý hiển thị nhưng tự hỏi làm thế nào để làm điều tương tự trong biểu mẫu (trong khi tạo hoặc chỉnh sửa nội dung)?

Tôi đang tìm cách thích hợp để thay đổi / ẩn nhãn đặc biệt là với các trường bộ sưu tập trường khi nội dung được tạo hoặc chỉnh sửa.

Câu trả lời:


20

Bạn có thể làm điều này với hook_form_alter()hoặc hook_form_FORM_ID_alter()trong mô-đun tùy chỉnh hoặc trong tệp template.php của chủ đề.

function YOURMODULE_form_alter(&$form, &$form_state, $form_id) {
  // Check the form_id
  if ($form_id == 'YOUR_FORM_ID') {
    // To hide the label
    $form['your_form_element']['#title_display'] = 'invisible';
    // To alter the label
    $form['your_form_element']['#title'] = t('Your new title');
  }
}

Nếu bạn sử dụng hook_form_FORM_ID_alter()thay thế, bạn không cần kiểm tra form_id.

Bạn có thể tìm thêm thông tin trên Form API Reference cho #title#title_displaythuộc tính, và cũng có tất cả các yếu tố hình thức khác và các thuộc tính của họ.

Trong trường hợp Bộ sưu tập trường , nó có thể hơi phức tạp. Dưới đây là một mã ví dụ:

function YOURMODULE_form_YOUR_FORM_ID_alter(&$form, &$form_state, $form_id) {
  $your_field_collection = element_children($form['your_field_collection'][LANGUAGE_NONE];
  foreach ($your_field_collection as $key => $value) {
    if (is_numeric($value)) {
      $form['your_field_collection'][LANGUAGE_NONE][$val]['your_field_collection_field']['#title'] = t('Your new title');
      $form['your_field_collection'][LANGUAGE_NONE][$val]['your_field_collection_field']['#title_display'] = 'invisible';
    }
  }
}

Giải thích về đoạn mã trên:

Đầu tiên tôi gán bộ sưu tập trường cho một biến, để làm cho nó dễ đọc hơn một chút. Tôi đã sử dụng LANGUAGE_NONEđể đơn giản nhưng một cách thực hành tốt hơn sẽ là sử dụng $form['your_field_collection']['#language'], phải thừa nhận rằng nó làm cho toàn bộ mã phức tạp hơn để đọc.

Thứ hai, tôi đã sử dụng một foreach, vì hầu hết thời gian chúng tôi sử dụng một bộ sưu tập trường nếu chúng tôi muốn có nhiều giá trị của một số bộ sưu tập các trường. Vì vậy, foreachvòng lặp sẽ chăm sóc tất cả các trường hợp của bộ sưu tập trường.

Hack thứ ba, là một mánh khóe bẩn thỉu tôi học được từ một người nào đó trên Drupal.org, có thể sẽ có một cách tiếp cận tốt hơn, nhưng nó chỉ hoạt động nên tôi không đào sâu vào. Tôi kiểm tra nếu $valuelà số, để loại trừ tất cả các thuộc tính meta và vòng lặp khác chỉ thông qua các yếu tố.

Sau đó, cuối cùng, trong mỗi phần tử tôi thay đổi trường trong bộ sưu tập trường.


Cảm ơn. Nhưng trong trường hợp thu thập trường, nó không có bất kỳ thuộc tính nào được đính kèm
xuất hiện vào

Nó chắc chắn có, nhưng bộ sưu tập trường hơi phức tạp một chút tùy thuộc vào cách bạn định cấu hình trường bộ sưu tập trường. Nếu bạn sử dụng tiện ích 'Nhúng', bạn sẽ có thể tìm thấy các trường trong mảng biểu mẫu của mình.
ЕЕннн

tiện ích nhúng của nó chỉ, nhưng vẫn không có gì xảy ra. Tôi không cố gắng làm bất cứ điều gì với bộ sưu tập trường nhưng với các trường bộ sưu tập trường là tôi muốn thay đổi nhãn
xuất hiện

1

Điều này sẽ giúp bạn.

/**
 * Implements hook_field_widget_form_alter().
 */
function YOURMODULE_field_widget_form_alter(&$element, &$form_state, $context) {
  if (isset($element['#entity_type']) && $element['#entity_type'] == 'field_collection_item' && $element['#bundle'] == 'YOUR FIELD COLLECTION') {
    $element['value']['#title_display'] = 'invisible';
  }
}

1

Các field_display_label mô-đun giải quyết điều này bằng cách thêm một nhãn hiển thị riêng biệt.

Bằng cách này, nhãn trường ban đầu chỉ xuất hiện trên biểu mẫu tạo / chỉnh sửa, trong khi nhãn hiển thị (nếu được đặt) xuất hiện riêng trên trang xem. Vì vậy, bằng cách đặt nhãn trường ban đầu thành không có gì, bạn chỉ có thể xóa nhãn trong biểu mẫu tạo / chỉnh sửa.


0

Sử dụng hook_form_FORM_ID_alter () cố gắng hành động trên biểu mẫu chỉnh sửa nút, điều này hiệu quả với tôi:

function MYMODULE_form_NODE_TYPE_node_form_alter(&$form, &$form_state, $form_id) {
  $form['field_MY_FIELD']['und']['#title_display'] = 'invisible';
}

(Thay thế các giá trị của bạn cho các giá trị trong TẤT CẢ CAPS.)

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.