Score:2

เหตุใดคุกกี้จึงถูกแคชใน hook_prepress_node() และฉันจะป้องกันหรือแก้ไขปัญหานี้ได้อย่างไร

ธง ng

ใน Drupal 9 เรามี _preprocess_node() hook ที่โหลดคุกกี้ผู้ใช้เช่น:

ฟังก์ชัน THEME_preprocess_node(&$ตัวแปร) {


  $พารามิเตอร์ = [];
  ถ้า (isset($_COOKIE['utm_source'])){
    $parameters[] = 'utm_source=' $_COOKIE['utm_source'];
    $parameters['#cache']['contexts'][] = 'คุกกี้:utm_source';
  }
  ถ้า (isset($_COOKIE['utm_medium'])){
    $พารามิเตอร์[] = 'utm_medium=' $_COOKIE['utm_medium'];
    $parameters['#cache']['contexts'][] = 'คุกกี้:utm_medium';
  }
  ถ้า (isset($_COOKIE['utm_campaign'])){
    $parameters[] = 'utm_campaign=' $_COOKIE['utm_campaign'];
    $parameters['#cache']['contexts'][] = 'คุกกี้:utm_campaign';
  }
  $parameters = implode('&', $parameters);

  $ตัวแปร['พารามิเตอร์'] = '&' $พารามิเตอร์;
}

ในเทมเพลต Node ของฉัน:

{{ พารามิเตอร์ }}

แต่จะโหลดคุกกี้ที่แคชไว้ แม้กระทั่งจากผู้เยี่ยมชมรายอื่น จนกว่าแคชจะถูกล้าง

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

มีวิธีอื่นอีกไหมที่เราควรตรวจสอบและส่งข้อมูลคุกกี้ไปยังเทมเพลตโหนด

id flag
คุณใช้บริบทแคชใดสำหรับเนื้อหาที่แสดงผล
quantumized avatar
ng flag
ขออภัย ฉันไม่แน่ใจว่าคุณหมายถึงอะไรในการแสดงเนื้อหาคุณช่วยชี้ให้ฉันไปยังสถานที่ที่ถูกต้องเพื่อค้นหาข้อมูลเพื่อตอบคำถามของคุณได้ไหม
id flag
นี่เป็นคำถามที่เกือบจะเหมือนกัน: https://www.drupal.org/project/drupal/issues/2587489
quantumized avatar
ng flag
ฉันได้เพิ่มแท็กแคชแล้ว แต่ก็ยังใช้งานไม่ได้สำหรับฉันฉันได้เพิ่มโค้ดฟังก์ชันแบบเต็มลงในโพสต์ต้นฉบับแล้ว
id flag
ฉันได้อัปเดตคำตอบแล้ว ตามคำถามที่ตอบแล้ว https://drupal.stackexchange.com/questions/189451/cache-in-hook-preprocess-page ว่าการตั้งค่าแคชจะไปที่ใด
id flag
ฉันขอแนะนำให้ปิดคำถามนี้เป็นคำถามที่ซ้ำกัน
leymannx avatar
ne flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [แคชในหน้าการประมวลผลล่วงหน้าของ hook](https://drupal.stackexchange.com/questions/189451/cache-in-hook-preprocess-page)
quantumized avatar
ng flag
@leymannx ใช่ ฉันได้บอกเลิกสมาชิกเหตุการณ์แล้วและสามารถโหลดค่าคุกกี้ได้อย่างถูกต้องในขณะนี้ แต่ฉันยังไม่ทราบวิธีการส่งค่าเหล่านั้นไปยังเทมเพลตโหนดของฉันจากสมาชิกเหตุการณ์ มีความคิดเกี่ยวกับเรื่องนี้? ขอบคุณ!
Score:4
ธง id

คุณต้องคำนึงถึง แสดงแคช. ในกรณีนี้ คุณต้องเพิ่มบริบทแคชที่ อ้างอิงคุกกี้. มี คำถามอื่นๆ ในฟอรัมนี้พร้อมตัวอย่างและโมดูลท่อขนาดใหญ่ มีอีก:

$has_big_pipe_nojs_cookie = $request->cookies->has(BigPipeStrategy::NOJS_COOKIE);
$page['#cache']['contexts'][] = 'คุกกี้:' BigPipeกลยุทธ์::NOJS_COOKIE;

คุณยังไม่ได้แสดงรหัสทั้งหมดของคุณ แต่สิ่งที่ฉันคิดว่าคุณต้องการนี่คือ:

$variables['#cache']['contexts'][] = 'คุกกี้:utm_source';
sonfd avatar
in flag
คุณแสดงตัวอย่างได้ไหม
id flag
ฉันไม่รู้ว่า $parameters คืออะไร เพราะเราไม่เห็นโค้ดทั้งหมดของคุณ
sonfd avatar
in flag
พวกเขาอยู่ในโหนดการประมวลผลล่วงหน้า ดังนั้นพวกเขาอาจต้องเพิ่มบริบทในการแสดงโหนด

โพสต์คำตอบ

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