Score:1

ผู้ใช้ที่ไม่ถูกต้องกับ currentUser() บนผลิตภัณฑ์

ธง kn

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

นี่คือที่ฉันไม่เข้าใจ ฉันกำลังโหลดข้อมูลโดยผู้ใช้ปัจจุบัน แต่ผู้ใช้ไม่ใช่ผู้ใช้ที่ดี...

ฉันมีชื่อ "ใหม่" หลังจากล้างแคชเว็บไซต์ด้วย drush แล้วเท่านั้น

/**
 * ใช้ hook_preprocess_HOOK()
 */
ฟังก์ชัน frr_menu_link_preprocess_menu__account(&$ตัวแปร)
{
    $current_user = \Drupal::currentUser();
    $ตัวแปร['ชื่อ'] = FALSE;
    ถ้า ($current_user->isAuthenticated()) {
        $entity_manager = \Drupal::entityTypeManager();
        $profileStorage = $entity_manager->getStorage('โปรไฟล์');
        $profileCustomerFound = $profileStorage->loadByProperties([
            'uid' => $current_user->id(),
            'ประเภท' => 'ลูกค้า',
            'is_default' => 1,
            'สถานะ' => 1,
        ]);
        ถ้า($profileCustomerFound > 0) {
            $customer = end($profileCustomerFound);
            $ชื่อแรก = $customer->get('field_firstname')->value;
            $variables['firstname'] = !empty($firstname) ? ucfirst($ชื่อแรก) : FALSE;
        }
    }
}
id flag
คุณหมายถึงอะไรโดยผู้ใช้ "คนก่อน"?
Score:3
ธง id

อาจเป็นเพราะคุณต้องเพิ่ม ข้อมูลเมตาความสามารถในการแคช ดังนั้น Drupal จึงรู้จักแคชเนื้อหาแยกตามผู้ใช้

cn flag
ข้อบังคับ - การเปลี่ยนแปลงแคชต่อผู้ใช้ไม่ใช่ความคิดที่ดี เนื่องจากจำนวนรายการแคชอาจมีจำนวนมาก ผู้สร้างขี้เกียจและตัวยึดตำแหน่งสามารถใช้ในสถานการณ์แบบนี้ได้ มีโพสต์ที่ดีพร้อมตัวอย่างที่นี่: https://www.qed42.com/insights/coe/drupal/lazy-builders-drupal-8-caching-ftw และหากคุณค้นหาไซต์นี้ด้วยคำว่า [lazy_builder](https:/ /drupal.stackexchange.com/search?q=lazy_builder) มีตัวอย่างและคำอธิบายอื่นๆ อีกมาก
kn flag
เว็บไซต์ของฉันมีผู้ใช้ประมาณ 160,000 รายในขณะนี้ ด้วยจำนวนผู้ใช้ "dev" ฉันไม่มีปัญหา... ฉันจะเพิ่มข้อมูลเมตาความสามารถในการแคชได้หรือไม่
kn flag
ถ้าเป็นเช่นนั้น ฉันจะทำอย่างไร ?
4uk4 avatar
cn flag
หากคุณมีผู้ใช้จำนวนนี้ ให้เพิ่ม `$variables['#cache'] = ['max-age' => 0];` เพื่อป้องกันไม่ให้เมนูถูกแคชสำหรับผู้ใช้ทุกคนที่เข้าชมเพจ ในกรณีนี้ตัวสร้างแบบขี้เกียจไม่จำเป็นอย่างยิ่งเพราะเมนูมักจะแสดงผลในบล็อกและบล็อกก็มีตัวสร้างแบบขี้เกียจอยู่แล้ว
4uk4 avatar
cn flag
แม้ว่าตัวสร้างขี้เกียจแยกต่างหากเฉพาะสำหรับ $variables['firstname'] จะดี ซึ่งจะทำให้การโหลดหน้าเว็บมีความลื่นไหลมากขึ้นเมื่อส่วนไดนามิกถูกจำกัดไว้ที่ค่าต่ำสุดที่แน่นอน ดู https://drupal.stackexchange.com/questions/305479/can-bigpipe-exclude-certain-blocks
kn flag
`$variables['#cache'] = ['max-age' => 0];` ใช้งานได้ดี ขอบคุณ !

โพสต์คำตอบ

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