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

การบริการลูกค้านั้นยอดเยี่ยมใช่ไหม?

แม้ว่า Magento จะไม่มีวิธีดำเนินการผ่านแผงผู้ดูแลระบบ แต่ก็ค่อนข้างง่ายในการใช้คำสั่ง SQL สองสามข้อ เพียงเข้าสู่ระบบแผง MySQL ที่คุณเลือก (phpMyAdmin และ Adminer เป็นสองตัวเลือกที่ยอดเยี่ยม) และดำเนินการค้นหาต่อไปนี้:

อัปเดต sales_flat_order SET customer_id = (YOUR-CUSTOMER-ID), customer_is_guest=0 WHERE enter_id = YOUR-ORDER-ID และ customer_id IS NULL อัปเดต sales_flat_order_grid SET customer_id = YOUR-CUSTOMER-ID WHERE enter_id = Your-ORDER-ID และ customer_id IS NULL

สงสัยว่าจะรับค่าที่ถูกต้องสำหรับ customer_id และ enter_id ได้อย่างไร มันเป็นเรื่องง่าย. หากต้องการรับ customer_id เพียงไปที่ลูกค้า > จัดการลูกค้าในผู้ดูแลระบบ Magento ค้นหาลูกค้าที่คุณกำลังมองหาและคลิกที่พวกเขาราวกับว่าคุณกำลังจะแก้ไขข้อมูลของพวกเขา เมื่อคุณดูข้อมูลลูกค้า ส่วนท้ายของ URL จะมีลักษณะดังนี้:

/index.php/admin/customer/edit/id/3193/

ในตัวอย่างนี้ customer_id คือ 3193 หากต้องการค้นหาentity_idของคำสั่งซื้อที่ดำเนินการโดยใช้การชำระเงินแบบแขก ให้ไปที่การขาย > คำสั่งซื้อในแผงผู้ดูแลระบบ Magento และคลิกที่คำสั่งซื้อเพื่อดูรายละเอียด ดูที่ส่วนท้ายของ URL อีกครั้ง:

/index.php/admin/sales_order/view/order_id/16675/

ในตัวอย่างนี้ enter_id สำหรับคำสั่งซื้อคือ 16675 ใช้ค่าของคุณในคำสั่งการสืบค้น SQL ที่แสดงด้านบน เท่านี้คุณก็พร้อมแล้ว คุณสามารถตรวจสอบอีกครั้งว่ามีการเชื่อมโยงเกิดขึ้นหรือไม่ โดยไปที่ลูกค้า > จัดการลูกค้าในผู้ดูแลระบบ Magento ค้นหาลูกค้าที่ต้องการ และคุณจะเห็นว่าคำสั่งซื้อเป็นส่วนหนึ่งของประวัติคำสั่งซื้อแล้ว

H/T Fran และ R.S ที่ Stack Overflow คัดลอกและขยายที่นี่เพื่อใช้อ้างอิงของฉัน

เผยเเพร่โดย

ไบรอัน ไลแมน

Brian เป็นผู้ก่อตั้ง Vale Studios ซึ่งเป็นเพียงชื่อที่ใช้ในการแสดงประสบการณ์ที่ยอดเยี่ยมในการทำงานฟรีแลนซ์ ปัจจุบัน Brian กำลังทำงานภายใต้สัญญาเฉพาะสำหรับผู้ค้าปลีกอีคอมเมิร์ซที่ยอดเยี่ยม แต่เขาใช้พื้นที่นี้เพื่อเผยแพร่แนวคิดและการสะท้อนที่เกี่ยวข้องกับอีคอมเมิร์ซ การตลาด และ Magento ต่อไป

ยกตัวอย่าง Zend_ACL ฉันสงสัยว่าควรจัดระเบียบโครงการนี้อย่างไร แน่นอนว่าตัวอย่างนั้นดีและเรียบร้อย แต่ไซต์จริงนั้นซับซ้อนกว่ามาก

$ = ใหม่ Zend_Acl(); $acl->addRole(zend_Acl_Role ใหม่("แขก")); $acl->addRole(zend_Acl_Role ใหม่("สมาชิก")); $acl->addRole(zend_Acl_Role ใหม่("ผู้ดูแลระบบ")); $parents = array("แขก", "สมาชิก", "ผู้ดูแลระบบ"); $acl->addRole(ใหม่ Zend_Acl_Role("someUser"), $parents); $acl->เพิ่ม(Zend_Acl_Resource ใหม่ ("someResource")); $acl->deny("แขก", "someResource"); $acl->allow("สมาชิก", "someResource"); echo ($acl->isAllowed("แขก", "someResource") ? "allowed" : "denied");

เนื่องจากทุกตัวควบคุม/เพจบนเว็บไซต์ของฉันจะมีการตรวจสอบการเข้าถึงบางประเภท ฉันจึงจำเป็นต้องมีกฎที่สามารถเข้าถึงได้ทั่วโลก นี่หมายความว่าฉันต้องสร้างไฟล์กำหนดค่าหรือคลาสขนาดใหญ่เพื่อกำหนดค่ากฎการบูตทั้งหมดหรือไม่ มันจะไม่เปลืองความจำมากนักเหรอ?

แต่หากฉันตั้งกฎที่จำเป็นสำหรับคอนโทรลเลอร์แต่ละตัวเท่านั้น นั่นจะเกินเป้าหมาย ACL หรือไม่ เหตุผลหลักในการใช้ ACL คือเพื่อหลีกเลี่ยงไม่ให้มีการเผยแพร่สิทธิ์ทั่วทั้งโค้ดเบส:

Admin_Controller ( ฟังก์ชั่นสาธารณะ action() ( if($user->role !== "admin") ( die("not allowance"); ) ) )

แล้วการเปลี่ยนแปลงล่ะ? จะเกิดอะไรขึ้นถ้ากฎ ACL ถูกเก็บไว้ในฐานข้อมูลที่ผู้ดูแลระบบสามารถเปลี่ยนสิทธิ์ได้อย่างง่ายดาย ควรโหลดทุกคำขอหน้าหรือไม่ นั่นจะไม่สร้างความเครียดให้กับระบบมากนักเหรอ?

กล่าวโดยย่อ ACL ทำงานอย่างไรบนไซต์ขนาดใหญ่ เกิดปัญหาอะไรขึ้น? สิทธิ์แบบเรียงซ้อนได้รับการจัดการอย่างไร

คุณสามารถจัดเก็บบทบาทในฐานข้อมูลและแคชออบเจ็กต์ในหน่วยความจำโดยใช้ Memcache ดังนั้นคุณเพียงแค่ต้องสืบค้นฐานข้อมูลเมื่อมีการเพิ่มหรือเปลี่ยนแปลงบทบาทใหม่เท่านั้น เกี่ยวกับการนำ ACL ไปใช้ เนื่องจากจะใช้ทั่วทั้งระบบ คุณจึงสามารถเริ่มต้นได้ในไฟล์ Bootstrap.php จากนั้นจัดเก็บอ็อบเจ็กต์ใน Zend_Registry เพื่อให้พร้อมใช้งานทั่วทั้งแอปพลิเคชันของคุณ

การใช้กฎเหล่านี้อาจเกิดขึ้นในจุดที่แตกต่างกัน คุณสามารถใช้เส้นทางในเราเตอร์แบบกำหนดเองหรืออาจในระดับที่สูงกว่าในระดับคอนโทรลเลอร์ หากคุณขยาย Zend_Controller_Action คุณสามารถใส่กฎ ACL ของคุณในคอนโทรลเลอร์หลักนี้ได้ ซึ่งได้รับมาจากคอนโทรลเลอร์อื่น ๆ ทุกตัว คุณสามารถตรวจสอบสิทธิ์ ACL ได้ในเมธอด _init() อาจมีจุดอื่นๆ ในระบบที่คุณต้องการ ACL หรือต้องการตรวจสอบ ขึ้นอยู่กับวิธีและวิธีที่คุณสร้าง (ซึ่งเป็นสาเหตุที่คุณเก็บ ACL ไว้ในรีจิสทรี)

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

ใน Magento ไม่มีคุณสมบัติเริ่มต้นที่ให้คุณเชื่อมโยงทั้งสองสิ่งนี้เข้าด้วยกัน (ข่าวร้ายฉันรู้) แต่ก็สามารถทำได้ (ใส่เครื่องหมายดอกจันที่นี่)

วิธีเชื่อมต่อคำสั่ง Magento กับลูกค้าในฐานข้อมูล
หากลูกค้าชำระเงินขณะเข้าสู่ระบบ สิ่งนี้จะเกิดขึ้นตามค่าเริ่มต้น อย่างไรก็ตาม หากลูกค้าไม่ได้เข้าสู่ระบบเมื่อชำระเงิน และต้องการคำสั่งซื้อที่เชื่อมโยงกับบัญชีของตนในภายหลัง ให้ทำตามขั้นตอนเหล่านี้เพื่อเชื่อมโยงทั้งสองรายการเข้าด้วยกัน

ตัวเลือกโซลูชัน

มีสองวิธีในการเข้าถึงสิ่งนี้:

  1. ติดตั้งส่วนขยาย
  2. แก้ไขฐานข้อมูลด้วยตนเอง

เชื่อมโยงคำสั่งซื้อของลูกค้ากับบัญชีผ่านส่วนขยาย Magento

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

อัปเดตเมื่อวันที่ 5 มกราคม 2016

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

ส่วนขยาย Magento เพื่อเชื่อมโยงลูกค้ากับคำสั่งซื้อของแขก

PromInc Magento Extension สำหรับการเชื่อมโยงลูกค้าและคำสั่งซื้อนั้นมีให้ใช้งานผ่าน Github และจะต้องมีการติดตั้งด้วยตนเอง ซึ่งต่างจากการใช้ Magento Connect ดาวน์โหลดโค้ดเพื่อเพิ่มลงในการติดตั้ง Magento ของคุณเองได้ตามสบาย คำแนะนำในการติดตั้งและการใช้งานมีการบันทึกไว้ใน Github ด้วย

เชื่อมโยงคำสั่งซื้อของลูกค้ากับบัญชีผ่านฐานข้อมูล

สิ่งที่ฉันจะแบ่งปันกับคุณคือวิธีการแก้ไขด้วยตนเองในฐานข้อมูล อย่างไรก็ตาม ในการดำเนินการนี้ คุณต้องเข้าถึงฐานข้อมูลไปยังไซต์ Magento ของคุณผ่านทาง PHP MyAdmin ซึ่งเป็นเครื่องมือฐานข้อมูลบุคคลที่สาม เช่น MySql Workbench, NovaBench ฯลฯ หรือการเข้าถึงบรรทัดคำสั่ง

บันทึก: หากคุณหลงทางไปกับประโยคสุดท้ายนั้น ฉันคิดว่าคุณไม่ใช่นักพัฒนาและ/หรือผู้ดูแลฐานข้อมูล และนี่คือที่ที่คุณควรหันหลังและเดินออกจากโพสต์นี้ :) ฉันไม่ได้พยายามหยาบคายแต่จริงใจมากกว่า การตั้งค่าสำหรับเครื่องมือเหล่านั้นจำเป็นต้องมีการกำหนดค่าจากเว็บโฮสต์ของคุณ และความรู้ที่ถูกต้องในการทราบวิธีใช้เครื่องมือเหล่านี้ การเล่นในฐานข้อมูลไม่ใช่สิ่งที่มือใหม่ควรทำ คุณสามารถสร้างผลลัพธ์ที่ไม่พึงประสงค์ได้มากมายในนั้น หากคุณไม่รู้ว่ากำลังทำอะไรอยู่

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

คุณจะต้องทราบข้อมูลต่อไปนี้:

  • รหัสลูกค้า (customer_id)
    • วิธีที่ง่ายที่สุดในการค้นหารหัสลูกค้าคือการดูลูกค้าใน Magento Admin และดูที่ URL ของลูกค้ารายนั้นในแถบที่อยู่ โดยรหัสลูกค้าคือตัวเลขที่อยู่ท้าย URL
      https://www.yoursite.com/index.php/guru/customer/edit/id/ 200490 /
  • รหัสคำสั่งซื้อ (entity_id)
    • บันทึก: นี่คือรหัสเอนทิตีฐานข้อมูล ไม่ใช่รหัสคำสั่งซื้อที่คุณใช้กับใบแจ้งหนี้ของคุณ
    • วิธีที่ง่ายที่สุดในการค้นหา ID คำสั่งซื้อคือการเปิดคำสั่งซื้อใน Magento Admin และดูที่ URL ของคำสั่งซื้อนั้นในแถบที่อยู่ - Order ID คือหมายเลขที่อยู่ท้าย URL
      https://www.yoursite.com/index.php/guru/sales_order/view/order_id/ 291855 /

มีสองตารางในฐานข้อมูล Magento ที่ต้องได้รับการอัปเดต:

  • ขาย_แบน_สั่งซื้อ
  • sales_flat_order_grid
    • บันทึก: ฉันเชื่อว่าตารางนี้ใช้สำหรับผู้ดูแลระบบ Magento เท่านั้น

หากคุณใช้เครื่องมือแก้ไขฐานข้อมูลแบบ GUI เช่น MySQL Workbench คุณเพียงแค่ต้องแก้ไขรายการรหัสคำสั่งซื้อในสองตารางที่แสดงด้านบน โดยตั้งค่าช่อง customer_id เป็นรหัสลูกค้าที่พบด้านบน

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