Score:1

อย่างใดสมัคร / ตอบสนองต่อ addMessage

ธง cn

ฉันกำลังพยายามค้นหากิจกรรมที่ฉันสามารถสมัครรับข้อมูลด้วยวิธี addMessage

ฉันต้องทริกเกอร์รหัสทุกครั้งที่มีการเพิ่มข้อความสถานะ ในการตอบสนองต่อเหตุการณ์นี้ ฉันต้องส่งตัวแปรจาก php ไปยัง JS ฉันไม่พบกิจกรรมที่จะสมัคร ดังนั้นฉันจึงใช้กระบวนการล่วงหน้าด้านล่างแทน

<?php
ฟังก์ชัน mymodule_preprocess_status_messages(&$ตัวแปร) {
  $variables['#attached']['drupalSettings']['send_me_to_js']['_variable'] = 'ไปที่ js...';
}

การประมวลผลล่วงหน้านี้ทำงานทุกครั้งที่ใช้ addMessage และข้อความแสดงสถานะปรากฏขึ้น แต่ตัวแปรที่ฉันต้องการส่งไปยัง JS ไม่ได้ถูกส่งเสมอไป

ตัวอย่างเช่น ใช้ได้กับข้อความที่สร้างจากคอร์ และฉันได้รับตัวแปรใน JS แต่เมื่อ Drupal Commerce ใช้ addMessage (เช่น เมื่อเพิ่มสินค้าลงในรถเข็นในการตั้งค่า ajax) การประมวลผลล่วงหน้าจะทำงาน ข้อความแสดงสถานะจะแสดงขึ้น แต่ตัวแปรไม่พร้อมใช้งานใน JS

นี่คือจาวาสคริปต์:

(ฟังก์ชัน ($, Drupal, drupalSettings) {

  Drupal.behaviors.alwave_alerts = {
    แนบ: ฟังก์ชัน (บริบท การตั้งค่า) {
      
      $('.my-class', context).once('unique-string').each(function () { 
        
        // เรียกใช้หลังจากการเรียก ajax แต่ละครั้ง
        $(เอกสาร).ajaxComplete(ฟังก์ชัน () {
          
          // บางครั้งสิ่งนี้ไม่ได้กำหนดแม้ว่าการประมวลผลล่วงหน้าด้านบนจะทำงาน
          // และมีข้อความแสดงสถานะบนหน้าจอ
          // (เช่น เมื่อการค้าสร้างข้อความแสดงสถานะ)
          console.log(settings.send_me_to_js);

        });
          
      });
  
    }
  };
  
}(jQuery, Drupal, drupalSettings));

ต้องมีวิธีที่ง่าย?

อัปเดต:

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

คำถามคือ ฉันจะส่งตัวแปรไปยัง JS จากการประมวลผลล่วงหน้านี้ในการเรียก ajax ได้อย่างไร

Jaypan avatar
de flag
คุณไม่ได้บอกเราจริง ๆ ว่าคุณกำลังพยายามทำอะไร แต่บอกเพียงว่าคุณกำลังพยายามทำมันอย่างไร เป้าหมายโดยรวมของคุณที่นี่คืออะไร?
hga77 avatar
cn flag
ตัวแปรไม่พร้อมใช้งานใน JS ในการเรียก ajax ฉันจะทำให้ตัวแปรจากการประมวลผลล่วงหน้านี้พร้อมใช้งานใน JS ระหว่างการโทร ajax ได้อย่างไร กล่าวอีกนัยหนึ่ง เมื่อข้อความสถานะถูกสร้างขึ้นระหว่างการโทร ajax ฟังก์ชัน "mymodule_preprocess_status_messages" นี้จะทำงาน และภายในนั้นเป็นตัวแปรที่ฉันต้องการใน JS $variables['message_list']ฉันจะทำให้ตัวแปรนี้พร้อมใช้งานใน JS จากคำขอ ajax ได้อย่างไร (ไม่ใช่ htmlrequest หรือการโหลดหน้าเว็บเริ่มต้น) ตัวแปรถูกส่งผ่านระหว่างคำขอ html แต่ไม่ใช่การเรียก ajax ที่ตามมา ไม่ได้กำหนดในคำขอ ajax ภายใน JS
Jaypan avatar
de flag
กรณีการใช้งานคืออะไร?
hga77 avatar
cn flag
@Jaypan ฉันต้องการตัวแปร $variables['message_list'] ใน JS ดังนั้นฉันจึงสามารถแทนที่สถานะของ masseges และสร้างเป็นป๊อปอัปแบบลอยได้โดยใช้ไลบรารีจาวาสคริปต์ของบุคคลที่สาม ไม่จำเป็นต้องใช้เทมเพลต status_masseges เนื่องจากมาร์กอัปมาจากไลบรารี ไลบรารีนี้จำเป็นต้องได้รับข้อมูลข้อความเพื่อสร้างข้อความ ดังนั้นเหตุผลที่ฉันต้องให้ตัวแปรนี้
Jaypan avatar
de flag
ฉันเคยตั้งค่าข้อความแสดงสถานะแบบลอยในอดีตโดยแก้ไขเทมเพลตให้ตรงกับเอาต์พุต จากนั้นสร้างไฟล์ JS ที่เรียก JS เพื่อทำให้ข้อความเป็นป๊อปอัปโดยใช้ Drupal.behaviors แต่ดูเหมือนว่าคุณตั้งใจทำมันอย่างที่คุณพยายามแล้ว แต่น่าเสียดายที่ฉันไม่มีคำตอบสำหรับวิธีที่คุณพยายามทำ ฉันรู้แค่ว่าทำได้อย่างไร
hga77 avatar
cn flag
@Jaypen ขอบคุณสำหรับการตอบกลับของคุณ ฉันแก้ไขปัญหานี้แล้วและจะเพิ่มคำตอบในไม่ช้า ฉันอยู่ในขั้นตอนการบริจาคโมดูล นี่คือหน้าโครงการ https://www.drupal.org/project/shoelace_messages
Score:0
ธง cn

ฉันจัดการเพื่อแก้ไขปัญหานี้ โดยพื้นฐานแล้ว ปัญหาคือฉันไม่สามารถส่งตัวแปรจากฟังก์ชันประมวลผลล่วงหน้าไปยัง JavaScript ในระหว่างการร้องขอ AJAX ได้ (ตามที่กล่าวไว้หลายครั้งในปัญหานี้) สิ่งที่ฉันทำ:

  1. ภายในการประมวลผลล่วงหน้า ฉันตั้งค่าตัวแปรเก็บชั่วคราวส่วนตัวสำหรับใช้ในภายหลังระหว่างคำขอ AJAX
  2. คำสั่ง AJAX Callback ที่กำหนดเองถูกสร้างขึ้นโดยยอมรับตัวแปรและเรียกใช้ฟังก์ชัน JavaScript ซึ่งจะรับตัวแปร
  3. จากนั้นฉันสมัครรับข้อมูลเหตุการณ์ตอบกลับที่ทำงานในทุกคำขอ เหตุการณ์คือ KernelEvents::RESPONSE
  4. ภายในตัวจัดการสำหรับเหตุการณ์นี้ ฉันตรวจสอบว่าเราอยู่ในคำขอ AJAX จากนั้นดึงตัวแปรจากที่เก็บชั่วคราวที่ตั้งค่าไว้ก่อนหน้านี้
  5. ฉันใช้คำสั่ง AJAX ที่กำหนดเองโดยให้ตัวแปร tempstore ซึ่งส่งไปยัง JavaScript เสร็จแล้ว!

คุณสามารถค้นหารหัสที่สมบูรณ์ได้ในโมดูลนี้: https://www.drupal.org/project/shoelace_messages

โพสต์คำตอบ

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