Điểm:0

Làm cách nào để tạo liên kết mô-đun tùy chỉnh xuất hiện trên/admin/config?

lá cờ cn

Tôi đang làm việc với một mô-đun tùy chỉnh và tôi muốn cấu hình mô-đun đó thông qua menu quản trị. Tôi gặp khó khăn khi nhận biểu mẫu xuất hiện trong trang quản trị.

Truy cập admin/config/MYMODULE sẽ hiển thị biểu mẫu, nó chỉ không hiển thị trên trang/admin/config.

Đây là cấu trúc tệp của tôi cho đến nay (không bao gồm các tệp không liên quan):

*Tệp biểu mẫu chỉ là một biểu mẫu ví dụ để cố gắng làm cho nó xuất hiện trên trang quản trị.

MYMODULE.routing.yml

MYMODULE.settings:
  đường dẫn: '/admin/config/system/MYMODULE'
  mặc định:
    _form: '\Drupal\MYMODULE\Form\myModuleSettingsForm'
    _title: 'Cài đặt myModule'
  yêu cầu:
    _permission: 'quản lý cấu hình trang web'

MYMODULE.schema.yml

MYMODULE.settings:
  gõ: config_object
  nhãn: 'Cài đặt myModule'
  lập bản đồ:
    đường dẫn đến âm thanh:
      loại: chuỗi
      nhãn: 'Đường dẫn đến âm thanh'

MYMODULE.links.menu.yml

MYMODULE.settings:
  tiêu đề: 'Cài đặt myModule'
  mô tả: 'Thay đổi cài đặt myModule'
  route_name: MYMODULE.settings
  cha mẹ: system.admin_config_system

MYMODULE.settings.yml

con đường:
  path_to_sound: '/modules/custom/MYMODULE/myModule.mp3'

myModuleSettingsForm.php

<?php

không gian tên Drupal\MYMODULE\Form;

sử dụng Drupal\Core\Form\ConfigFormBase;
sử dụng Drupal\Core\Form\FormStateInterface;

/**
 * Định cấu hình cài đặt ví dụ cho trang web này.
 */
lớp myModuleSettingsForm mở rộng ConfigFormBase {

  /**
   * Cài đặt cấu hình.
   *
   * chuỗi @var
   */
  const SETTINGS = 'MYMODULE.settings';

  /**
   * {@inheritdoc}
   */
  hàm công khai getFormId() {
    trả về 'MYMODULE_admin_settings';
  }

  /**
   * {@inheritdoc}
   */
  chức năng được bảo vệ getEditableConfigNames() {
    trở lại [
      tĩnh :: CÀI ĐẶT,
    ];
  }

  /**
   * {@inheritdoc}
   */
  chức năng công khai buildForm(mảng $form, FormStateInterface $form_state) {
    $config = $this->config(static::SETTINGS);

    $form['example_thing'] = [
      '#type' => 'trường văn bản',
      '#title' => $this->t('Mọi thứ'),
      '#default_value' => $config->get('example_thing'),
    ];

    trả về cha mẹ::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  hàm công khai submitForm(mảng &$form, FormStateInterface $form_state) {
    // Truy xuất cấu hình.
    $this->configFactory->getEditable(static::SETTINGS)
      // Đặt cài đặt cấu hình đã gửi.
      ->set('example_thing', $form_state->getValue('example_thing'))
      // Bạn có thể đặt nhiều cấu hình cùng một lúc bằng cách thực hiện
      // nhiều lệnh gọi set().
      -> lưu();

    cha mẹ::submitForm($form, $form_state);
  }

}

Tôi hiểu rằng bây giờ tôi có thể thấy biểu mẫu này trên trang cấu hình, nhưng tôi không thấy, bất kể việc xóa bộ nhớ cache, v.v.Tôi đã làm theo tài liệu để làm điều này và thậm chí tham khảo chéo các mô-đun phổ biến khác, vì vậy tôi thực sự không chắc mình đang làm gì sai.

Điểm:0
lá cờ ne

để sử dụng cha mẹ: system.admin_config đối với một liên kết menu, nó cần một tuyến đường có _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage' như một bộ điều khiển. Và chỉ bây giờ bạn mới có thể thêm trẻ em vào liên kết đó.

cha mẹ: system.admin_config là để tạo các khối chủ đề mới. Trong khi bạn có thể sử dụng cha mẹ: system.admin_config_content, cha mẹ: system.admin_config_system v.v. để thêm liên kết của bạn vào một khối hiện có.

Vì vậy, một trong hai chuyển đổi cha mẹ: system.admin_config đến cha mẹ: system.admin_config_content ví dụ: trong các liên kết Yaml của bạn và trong Yaml định tuyến của bạn, đường dẫn đến đường dẫn: '/admin/config/content/MYMODULE' để thêm liên kết của bạn vào khối "Tác giả nội dung".

Hoặc điều chỉnh MYMODULE.routing.yml và MYMDOULE.links.menu.yml của bạn để trông giống như hình bên dưới thay vào đó để tạo một khối chủ đề mới và để liên kết của bạn là con của khối đó.

MYMODULE.routing.yml:

MYMODULE.settings:
  đường dẫn: '/admin/config/MYMODULE'
  mặc định:
    _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
    _title: 'Mô-đun của tôi'
  yêu cầu:
    _permission: 'truy cập trang quản trị'

MYMODULE.example_thing:
  đường dẫn: '/admin/config/MYMODULE/ví dụ-điều'
    _form: '\Drupal\MYMODULE\Form\myModuleSettingsForm'
    _title: 'Ví dụ'
  tùy chọn:
    _admin_route: ĐÚNG
  yêu cầu:
    _permission: 'truy cập trang quản trị'

MYMODULE.links.menu.yml

MYMODULE.settings:
  tiêu đề: 'Mô-đun của tôi'
  route_name: MYMODULE.settings
  cha mẹ: system.admin_config
  mô tả: 'Cấu hình MyModule'
  trọng lượng: -10

MYMODULE.example_thing:
  tiêu đề: 'Điều ví dụ'
  cha mẹ: MYMODULE.settings
  description: 'Cấu hình điều ví dụ'
  trọng lượng: 0
  route_name: MYMODULE.example_thing
Joseph avatar
lá cờ cn
Tôi hiểu và đánh giá cao câu trả lời này, cảm ơn bạn. Tuy nhiên mình đã test thêm nó vào 1 block đã có, như system, làm như bạn nói mà nó vẫn không hiện
leymannx avatar
lá cờ ne
@Joseph â Nếu bạn đã chuyển sang `parent: system.admin_config_system` trong Yaml liên kết của mình, hãy chuyển sang `path: '/admin/config/system/MYMODULE'` trong Yaml định tuyến của bạn. Tất nhiên, hãy xóa bộ nhớ cache và nếu điều này vẫn không hoạt động, chỉ cần xem cơ sở mã của Drupal, đặc biệt là tất cả các mô-đun. Có rất nhiều ví dụ về cách bạn đặt một liên kết chính xác trên trang /admin/config.Ví dụ: https://git.drupalcode.org/project/drupal/-/blob/9.3.9/core/modules/system/system.routing.yml#L153-159 và https://git.drupalcode.org/ project/drupal/-/blob/9.3.9/core/modules/system/system.links.menu.yml#L115-120.
Joseph avatar
lá cờ cn
Tôi đã chỉnh sửa câu hỏi của mình để thay đổi các liên kết và tệp định tuyến thành hiện tại là các bản sao gần như giống hệt nhau về cách nó được thực hiện trong các ví dụ bạn đã cung cấp và nó vẫn không xuất hiện. Tôi đang thiếu thứ gì đó hay có thứ gì khác có khả năng ngăn nó hoạt động?
No Sssweat avatar
lá cờ ua
`có điều gì khác có khả năng ngăn nó hoạt động không?` Bạn có thể tạo lại sự cố của mô-đun trên bản cài đặt Drupal mới không, nếu không, thì vâng, có điều gì đó đang ngăn không cho hoạt động bình thường @Joseph

Đă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.