Thêm trường liên kết ở dạng tùy chỉnh


8

Tôi muốn thêm trường liên kết (nhãn + url nội bộ / bên ngoài) ở dạng tùy chỉnh

Điều này không hoạt động:

$form['test_ink'] = array(
  '#type' => 'link',
  '#title' => $this->t('Link title'),
  '#url' => '',
);

Câu trả lời:


9

Các link( liên kết ) hiển thị loại yếu tố được sử dụng để làm cho một yếu tố neo trên một trang, và không được sử dụng để cung cấp một yếu tố đầu vào trong một hình thức đó là hạn chế cho các URL.

Để làm ví dụ, bạn có thể xem LinkWidget :: formE bổ sung , cho thấy cách tiện ích trường đó tạo các thành phần biểu mẫu cho trường Liên kết. Và cách thức thực hiện là sử dụng phần tử biểu mẫu url( Url ), phần tử này sẽ cung cấp phần tử đầu vào xác thực URL. Đảm bảo rằng thuộc #urltính là một đối tượng ( Url ) hợp lệ .

$form['test_ink'] = [
  '#type' => 'url',
  '#title' => $this->t('Link title'),
  // Example of a Url object from a route. See the documentation
  // for more methods that may help generate a Url object.
  '#url' => Url::fromRoute('entity.node.canonical', ['node' => 1]),
];

Chỉnh sửa :

  1. Đã thêm đề xuất của @ imclean vào câu trả lời cho dễ đọc

3
Lưu ý rằng đối với các liên kết nội bộ, urlloại không được sử dụng, thay vào đó entity_autocomplete.
Tim

1
Lưu ý rằng bạn cũng có thể sử dụng phần tử linkit nếu bạn có mô-đun linkit (xem drupal.org/project/linkit ): $ form ['test_ink'] = ['#type' => 'linkit', '#autocomplete_route_name' = > 'linkit.autocomplete', '#autocomplete_route_parameter' => ['linkit_profile_id' => 'mặc định',],]
mpp

1
Hãy chắc chắn rằng URL là một đối tượng URL hoặc đơn giản là nó sẽ không hoạt động. Ví dụ: use Drupal\Core\Url; $element['test_link'] = [ '#type' => 'link', '#title' => t('Link title'), '#url' => Url::fromRoute('entity.node_type.collection'), ];
imclean

0

Tôi đã phải đối mặt với vấn đề này khi tôi cần thêm một liên kết (url + nhãn) vào biểu mẫu cài đặt chủ đề. Tôi đã không sử dụng trường url vì nó có lỗi nếu người dùng muốn thêm liên kết nội bộ.

Đây là cách nó nhìn trên CMS:

nhập mô tả hình ảnh ở đây

Đây là mã:

/**
 * Implements hook_form_system_theme_settings_alter().
 **/
function francisco_form_system_theme_settings_alter(&$form, \Drupal\Core\Form\FormStateInterface &$form_state, $form_id = NULL) {
  // Work-around for a core bug affecting admin themes. See issue #943212.
  if (isset($form_id)) {
    return;
  }

  $form['francisco_theme_option_sidebar'] = array(
    '#type' => 'details',
    '#title' => t('Sidebar'),
    '#description' => t('Lorem ipsum.'),
    '#open' => TRUE,
  );

  $form['francisco_theme_option_sidebar']['francisco_theme_option_sidebar_footer_cta_title'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Link Title'),
    '#default_value' => theme_get_setting('francisco_theme_option_sidebar_footer_cta_title'),
    '#description'   => t("Lorem ipsum."),
    '#maxlength' => 255
  );

  $form['francisco_theme_option_sidebar']['francisco_theme_option_sidebar_footer_cta_url'] = array(
    '#type'          => 'textfield',
    '#title'         => t('URL'),
    '#default_value' => theme_get_setting('francisco_theme_option_sidebar_footer_cta_url'),
    '#description'   => t("Lorem ipsum."),
    '#maxlength' => 2048,
  );

}

0

Tôi thích câu trả lời của @ mpp về cách tạo trường liên kết nếu bạn bật mô-đun Linkit. Ví dụ của anh ấy không phải là mã được định dạng, vì vậy đây chỉ là một bản đăng lại sử dụng mã được định dạng để dễ đọc hơn và để dễ dàng sao chép dán mã này để sử dụng trong các dự án của riêng bạn. Tạo trường liên kết với mẫu api của Drupal:

$form['block_link'] = [
  '#type' => 'linkit',
  '#title' => $this->t('Select link target'),
  '#description' => $this->t('Start typing to see a list of results. Click to select.'),
  '#autocomplete_route_name' => 'linkit.autocomplete',
  '#autocomplete_route_parameters' => [
    'linkit_profile_id' => 'default',
  ],
  '#default_value' => isset($config['block_link']) ? $config['block_link'] : '',
];

Lưu ý rằng bạn có thể thay đổi 'mặc định' thành bất kỳ hồ sơ liên kết nào bạn có thể có trong dự án của mình. Cũng lưu ý: giá trị mặc định của tôi trong trường hợp này xuất phát từ biểu mẫu cấu hình khối vì tôi đã thêm trường liên kết này vào trang cài đặt của khối. Xóa #default_value nếu nó không áp dụng cho trường hợp của bạn hoặc thay đổi tùy thuộc vào nơi bạn nhận được giá trị của mình.

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.