Score:0

ฉันจะทำให้ลิงก์โมดูลที่กำหนดเองปรากฏบน /admin/config ได้อย่างไร

ธง cn

ฉันมีโมดูลแบบกำหนดเองที่กำลังทำอยู่ และต้องการให้กำหนดค่าผ่านเมนูผู้ดูแลระบบ ฉันประสบปัญหาในการทำให้แบบฟอร์มปรากฏในหน้าผู้ดูแลระบบ

การไปที่ admin/config/MYMODULE จะแสดงแบบฟอร์ม แต่ไม่สามารถมองเห็นได้ในหน้า /admin/config

นี่คือโครงสร้างไฟล์ของฉันจนถึงตอนนี้ (ไม่รวมไฟล์ที่ไม่เกี่ยวข้อง):

*ไฟล์แบบฟอร์มเป็นเพียงตัวอย่างแบบฟอร์มเพื่อพยายามให้ปรากฏในหน้าผู้ดูแลระบบ

MYMODULE.routing.yml

MYMODULE การตั้งค่า:
  เส้นทาง: '/admin/config/system/MYMODULE'
  ค่าเริ่มต้น:
    _form: '\Drupal\MYMODULE\Form\myModuleSettingsForm'
    _title: 'การตั้งค่าโมดูลของฉัน'
  ความต้องการ:
    _permission: 'จัดการการกำหนดค่าไซต์'

MYMODULE.schema.yml

MYMODULE การตั้งค่า:
  ประเภท: config_object
  ป้ายกำกับ: 'การตั้งค่า myModule'
  การทำแผนที่:
    เส้นทาง_to_sound:
      ประเภท: สตริง
      ป้ายกำกับ: 'เส้นทางสู่เสียง'

MYMODULE.links.menu.yml

MYMODULE การตั้งค่า:
  ชื่อเรื่อง: 'การตั้งค่า myModule'
  คำอธิบาย: 'แก้ไขการตั้งค่า myModule'
  route_name: MYMODULE.settings
  พาเรนต์: system.admin_config_system

MYMODULE.settings.yml

เส้นทาง:
  path_to_sound: '/modules/custom/MYMODULE/myModule.mp3'

myModuleSettingsForm.php

<?php

เนมสเปซ Drupal\MYMODULE\Form;

ใช้ Drupal\Core\Form\ConfigFormBase;
ใช้ Drupal\Core\Form\FormStateInterface;

/**
 * กำหนดการตั้งค่าตัวอย่างสำหรับไซต์นี้
 */
คลาส myModuleSettingsForm ขยาย ConfigFormBase {

  /**
   * การตั้งค่าคอนฟิก
   *
   * @var สตริง
   */
  const SETTINGS = 'MYMODULE.settings';

  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นสาธารณะ getFormId () {
    กลับ 'MYMODULE_admin_settings';
  }

  /**
   * {@inheritdoc}
   */
  ฟังก์ชันที่ได้รับการป้องกัน getEditableConfigNames () {
    กลับ [
      คงที่::การตั้งค่า,
    ];
  }

  /**
   * {@inheritdoc}
   */
  ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state) {
    $config = $this->config(static::SETTINGS);

    $แบบฟอร์ม['example_thing'] = [
      '#type' => 'ช่องข้อความ',
      '#title' => $this->t('สิ่งของ'),
      '#default_value' => $config->get('example_thing'),
    ];

    ส่งคืนพาเรนต์::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  ฟังก์ชันสาธารณะ submitForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
    // ดึงการกำหนดค่า
    $this->configFactory->getEditable(คงที่::SETTINGS)
      // ตั้งค่าการกำหนดค่าที่ส่ง
      ->set('example_thing', $form_state->getValue('example_thing'))
      // คุณสามารถตั้งค่าได้หลายค่าพร้อมกันโดยทำ
      // โทรหลายชุด ()
      ->บันทึก();

    parent::submitForm($form, $form_state);
  }

}

ฉันเข้าใจว่าตอนนี้ฉันควรจะเห็นแบบฟอร์มนี้ในหน้าการกำหนดค่าแล้ว แต่ฉันไม่เห็น ไม่ว่าจะมีการล้างแคช ฯลฯฉันทำตามเอกสารประกอบเพื่อทำสิ่งนี้และแม้กระทั่งการอ้างอิงข้ามโมดูลยอดนิยมอื่น ๆ ดังนั้นฉันจึงไม่แน่ใจว่าฉันทำอะไรผิด

Score:0
ธง ne

ใช้ พาเรนต์: system.admin_config สำหรับลิงค์เมนูนั้นต้องการเส้นทางที่มี _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage' เป็นตัวควบคุม และตอนนี้คุณสามารถเพิ่มลูกในลิงค์นั้นได้

พาเรนต์: system.admin_config มีไว้สำหรับสร้างบล็อกเฉพาะเรื่องใหม่ ในขณะที่คุณสามารถใช้ พาเรนต์: system.admin_config_content, พาเรนต์: system.admin_config_system ฯลฯ เพื่อเพิ่มลิงค์ของคุณไปยังบล็อกที่มีอยู่

ดังนั้นสลับอย่างใดอย่างหนึ่ง พาเรนต์: system.admin_config ถึง พาเรนต์: system.admin_config_content ตัวอย่างเช่นในลิงก์ Yaml ของคุณและในเส้นทาง Yaml ของคุณ เส้นทาง: '/admin/config/content/MYMODULE' เพื่อเพิ่มลิงก์ของคุณไปยังบล็อก "การเขียนเนื้อหา"

หรือปรับ MYMODULE.routing.yml และ MYMDOULE.links.menu.yml ของคุณให้มีลักษณะเหมือนที่แสดงด้านล่างแทน เพื่อสร้างบล็อกธีมใหม่และให้ลิงก์ของคุณเป็นลูกของสิ่งนั้น

MYMODULE.routing.yml:

MYMODULE การตั้งค่า:
  เส้นทาง: '/admin/config/MYMODULE'
  ค่าเริ่มต้น:
    _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
    _title: 'โมดูลของฉัน'
  ความต้องการ:
    _permission: 'เข้าถึงหน้าการดูแลระบบ'

MYMODULE.example_thing:
  เส้นทาง: '/admin/config/MYMODULE/example-thing'
    _form: '\Drupal\MYMODULE\Form\myModuleSettingsForm'
    _title: 'ตัวอย่าง'
  ตัวเลือก:
    _admin_route: จริง
  ความต้องการ:
    _permission: 'เข้าถึงหน้าการดูแลระบบ'

MYMODULE.links.menu.yml

MYMODULE การตั้งค่า:
  ชื่อเรื่อง: 'MyModule'
  route_name: MYMODULE.settings
  พาเรนต์: system.admin_config
  คำอธิบาย: 'กำหนดค่าโมดูลของฉัน'
  น้ำหนัก: -10

MYMODULE.example_thing:
  ชื่อเรื่อง: 'สิ่งตัวอย่าง'
  พาเรนต์: MYMODULE.settings
  คำอธิบาย: 'ตัวอย่างการกำหนดค่าสิ่งของ'
  น้ำหนัก: 0
  route_name: MYMODULE.example_thing
Joseph avatar
cn flag
ฉันเข้าใจและขอบคุณคำตอบนี้ ขอบคุณ อย่างไรก็ตาม ฉันทดสอบการเพิ่มลงในบล็อกที่มีอยู่ เช่น ระบบ โดยทำตามที่คุณบอก แต่ก็ยังไม่ปรากฏ
leymannx avatar
ne flag
@Joseph â หากคุณเปลี่ยนเป็น `parent: system.admin_config_system` ในลิงก์ Yaml ของคุณ ให้เปลี่ยนเป็น `path: '/admin/config/system/MYMODULE'` ใน Yaml การกำหนดเส้นทางของคุณ แน่นอนว่าล้างแคช และหากยังไม่ได้ผล ให้ดูที่ฐานโค้ดของ Drupal โดยเฉพาะโมดูลทั้งหมด มีตัวอย่างมากมายที่คุณวางลิงก์ในหน้า /admin/config อย่างถูกต้องตัวอย่างเช่น https://git.drupalcode.org/project/drupal/-/blob/9.3.9/core/modules/system/system.routing.yml#L153-159 และ https://git.drupalcode.org/ โครงการ/drupal/-/blob/9.3.9/core/modules/system/system.links.menu.yml#L115-120
Joseph avatar
cn flag
ฉันได้แก้ไขคำถามของฉันเพื่อเปลี่ยนลิงก์และการกำหนดเส้นทางไฟล์เป็นสิ่งที่พวกเขาเป็นอยู่ในขณะนี้ ซึ่งเกือบจะเหมือนกับสำเนาของวิธีการดำเนินการในตัวอย่างที่คุณให้ไว้ และยังคงไม่ปรากฏ ฉันขาดอะไรไปหรือเปล่า หรือมีสิ่งอื่นที่อาจขัดขวางการทำงานหรือไม่
No Sssweat avatar
ua flag
`มีสิ่งอื่นที่อาจป้องกันไม่ให้ทำงานได้หรือไม่' คุณสามารถสร้างปัญหาของโมดูลซ้ำในการติดตั้ง Drupal ใหม่ได้หรือไม่ ถ้าไม่ใช่ แสดงว่ามีบางอย่างขัดขวางไม่ให้ทำงานอย่างที่ควรจะเป็น @Joseph

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา