Score:0

วิธีสร้างโมดูลด้วยการตั้งค่าเริ่มต้น

ธง cn

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

นี่คือการดูไฟล์:

MYMODULE.settings.yml

pathToSound: '/assets/sound.mp3'

MYMODULE.schema.yml

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

MYMODULE.module

<?php

ใช้ Drupal\Core\Form\FormStateInterface;

ฟังก์ชัน MYMODULE_page_attachments (อาร์เรย์ &$ ไฟล์แนบ) {
  $attachments['#attached']['library'][] = 'MYMODULE/MYMODULE';
  $attachments['#attached']['drupalSettings']['MYMODULE'] = [
  'pathToSound' => \Drupal::config('MYMODULE.settings')->get('pathToSound'),
  ];
}

MYMODULE.js

/**
 * @ไฟล์
 */
(ฟังก์ชัน ($, Drupal) {
  'ใช้อย่างเข้มงวด';

  Drupal.behaviors.MYMODULE = {
    /**
     * พฤติกรรมการแนบ Drupal
     */

    แนบ: ฟังก์ชัน (บริบท การตั้งค่า) {
      // ทริกเกอร์เมื่อแคชถูกล้างเพื่อเล่นเสียง
      $('body', context).once('MYMODULE').each(function () {
        console.log (การตั้งค่า MYMODULE.pathToSound);
        เสียง var = document.createElement ('เสียง');
        sound.setAttribute ('src', การตั้งค่า MYMODULE.pathToSound);
        เสียง.เล่น();
      });
    },
  };
  })(jQuery, Drupal, drupalSettings, ครั้งเดียว);

ฉันพยายามแยกโค้ดที่ไม่เกี่ยวข้องออกให้ได้มากที่สุด อย่างไรก็ตาม ยังมีแบบฟอร์มที่แก้ไข MYMODULE.settings "pathToSound" เมื่อกำหนดค่าโมดูลในเมนูผู้ดูแลระบบ ในที่สุดก็มีไฟล์ JS ที่เล่นเสียง อย่างที่ฉันพูดไป มันใช้งานได้หลังจากกำหนดค่าในเมนูผู้ดูแลระบบ แต่ไม่ใช่ก่อนหน้านี้ ฉันสงสัยว่าก่อนที่จะกำหนดค่า pathToSound จะคืนค่า null แม้ว่าจะถูกตั้งค่าใน MYMODULE.settings ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก ขอบคุณ!

แก้ไข: แก้ไขโค้ดตามคำแนะนำ ยังไม่ทำงาน เพิ่ม JS ที่กำลังเรียกใช้บันทึกคอนโซลซึ่งส่งคืนค่าว่างด้วย

4uk4 avatar
cn flag
หลังจากที่คุณกำหนดค่าโมดูลในเมนูผู้ดูแลระบบแล้ว คุณสามารถส่งออกการกำหนดค่าและใช้เป็นเทมเพลตสำหรับการกำหนดค่าเริ่มต้นของโมดูลได้ ฉันคิดว่าปัญหาคือไฟล์ yaml เก็บค่าในระดับที่สองในขณะที่คุณดึงค่าจากระดับแรก
ru flag
คุณวางไฟล์ settings.yml ลงในโฟลเดอร์ย่อย `config/install` ของโมดูลของคุณหรือไม่
apaderno avatar
us flag
ด้วยออบเจกต์การกำหนดค่านั้น รหัสควรเรียก `\Drupal::config('myModule.settings')->get('path.pathToSound')` เพื่อรับค่า *pathToSound* แม้ว่าสคีมาจะไม่ตรงกับวัตถุการกำหนดค่า ที่ต้องมีการเปลี่ยนแปลงด้วย ตรวจสอบด้วยว่าไฟล์ .settings.yml อยู่ในไดเร็กทอรีที่ถูกต้องตามที่ @Hudri แนะนำ
Joseph avatar
cn flag
settings.yml อยู่ในไดเร็กทอรีที่ถูกต้อง และฉันลองเปลี่ยนโค้ดและไฟล์สคีมาตามที่ @apaderno แนะนำ แต่ก็ไม่เป็นผล ฉันจะส่งออกการกำหนดค่าได้อย่างไรหลังจากกำหนดค่าโมดูลตามที่ 4uk4 แนะนำ
apaderno avatar
us flag
เมื่อติดตั้งโมดูลแล้ว การเปลี่ยนไฟล์คอนฟิกูเรชันหรือไฟล์สคีมาจะไม่ช่วยอะไร ต้องถอนการติดตั้งโมดูลก่อน จากนั้น คุณสามารถเปลี่ยนไฟล์เหล่านั้นได้
Score:2
ธง us

สกีมาการกำหนดค่าต้องตรงกับไฟล์การกำหนดค่า ตัวอย่างเช่น รายการต่อไปนี้ตรงกัน

myModule.settings.yml

pathToSound: '/assets/sound.mp3'

myModule.schema.yml

flush.settings:
  ประเภท: config_object
  ป้ายกำกับ: 'การตั้งค่าฟลัช'
  การทำแผนที่:
    เส้นทางเสียง:
      ประเภท: สตริง
      ป้ายกำกับ: 'เส้นทางสู่เสียง'

ในกรณีนี้, \Drupal::config('myModule.settings')->get('pathToSound') จะกลับมา เส้นทางสู่เสียง ค่า.

สำหรับไฟล์คอนฟิกูเรชันที่มีบรรทัดต่อไปนี้ สคีมานั้นจะไม่ทำงาน

เส้นทาง:
  pathToSound: '/assets/sound.mp3'

สคีมาที่ถูกต้องจะเป็นแบบต่อไปนี้

flush.settings:
  ประเภท: config_object
  ป้ายกำกับ: 'การตั้งค่าฟลัช'
  การทำแผนที่:
    เส้นทาง:
      ประเภท: การทำแผนที่
      ป้ายกำกับ: 'การตั้งค่าเส้นทาง'
      การทำแผนที่:
        เส้นทางเสียง:
          ประเภท: สตริง
          ป้ายกำกับ: 'เส้นทางสู่เสียง'

ในกรณีนี้, \Drupal::config('myModule.settings')->get('path.pathToSound') จะกลับมา เส้นทางสู่เสียง ค่า.

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

Joseph avatar
cn flag
Thanks. Updated again to show current schema and settings files. Still doesn't work but should be what you suggested it look like
Joseph avatar
cn flag
This code actually does work, it wasn't working before because of an external issue.

โพสต์คำตอบ

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