Saya suka menyebutnya “Penyesalan Checkout Tamu.” Saat itulah pelanggan selesai check out sebagai tamu, hanya untuk menyadari bahwa ini berarti mereka tidak dapat masuk ke situs web untuk memeriksa status pesanan mereka. Jadi mereka segera membuat akun dan kemudian menghubungi layanan pelanggan untuk menanyakan apakah pesanan tamu mereka sebelumnya dapat dihubungkan ke akun pelanggan baru mereka.

Bukankah layanan pelanggan luar biasa?

Meskipun Magento tidak menyediakan cara untuk melakukan ini melalui panel admin, cara ini relatif mudah menggunakan beberapa kueri SQL. Cukup masuk ke panel MySQL pilihan Anda (phpMyAdmin dan Adminer adalah dua opsi bagus), dan jalankan kueri berikut:

UPDATE sales_flat_order SET customer_id = (ID-PELANGGAN ANDA), customer_is_guest=0 WHEREentity_id = YOUR-ORDER-ID DAN customer_id IS NULL UPDATE sales_flat_order_grid SET customer_id = YOUR-CUSTOMER-ID WHEREentity_id = YOUR-ORDER-ID DAN customer_id IS NULL

Ingin tahu bagaimana cara mendapatkan nilai yang tepat untuk customer_id dan entitas_id? Mudah. Untuk mendapatkan customer_id cukup buka Pelanggan > Kelola Pelanggan di admin Magento. Temukan pelanggan yang Anda cari dan klik mereka seolah-olah Anda akan mengedit informasi mereka. Saat Anda melihat info pelanggan, bagian akhir URL Anda akan terlihat seperti ini:

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

Dalam contoh ini, customer_id adalah 3193. Untuk menemukan entitas_id pesanan yang dilakukan menggunakan checkout tamu, buka Penjualan > Pesanan di panel admin Magento dan klik pesanan untuk melihat detailnya. Lihat lagi bagian akhir URL:

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

Dalam contoh ini, entitas_id untuk pesanan adalah 16675. Gunakan nilai Anda dalam pernyataan kueri SQL yang ditunjukkan di atas dan Anda akan siap. Anda dapat memeriksa ulang apakah pengaitan telah dibuat dengan membuka Pelanggan > Kelola Pelanggan di admin Magento, mencari pelanggan yang dimaksud, dan Anda akan melihat pesanan tersebut sekarang menjadi bagian dari riwayat pesanan mereka.

H/T Fran dan RS di Stack Overflow. Disalin dan diperluas di sini untuk referensi saya.

Diterbitkan oleh

Brian Lyman

Brian adalah pendiri Vale Studios, yang sebenarnya hanyalah nama panggung untuk pengalaman hebat dalam dunia lepas. Brian saat ini bekerja di bawah kontrak khusus untuk pengecer e-commerce yang hebat, namun dia menggunakan ruang ini untuk terus menerbitkan ide dan refleksi terkait e-commerce, pemasaran, dan Magento.

Mengambil Zend_ACL sebagai contoh, saya bertanya-tanya bagaimana ini harus diatur untuk sebuah proyek. Tentu saja contohnya bagus dan rapi, tetapi situs sebenarnya jauh lebih kompleks.

$ = Zend_Acl baru(); $acl->addRole(Zend_Acl_Role baru("tamu")); $acl->addRole(Zend_Acl_Role baru("anggota")); $acl->addRole(Zend_Acl_Role baru("admin")); $orang tua = array("tamu", "anggota", "admin"); $acl->addRole(Zend_Acl_Role baru("someUser"), $parents); $acl->tambahkan(Zend_Acl_Resource baru("someResource")); $acl->deny("tamu", "someResource"); $acl->allow("anggota", "someResource"); echo ($acl->isAllowed("guest", "someResource") ? "diizinkan" : "ditolak");

Mengingat setiap pengontrol/halaman di situs saya akan memiliki semacam pemeriksaan akses, saya memerlukan aturan yang dapat diakses secara global. Apakah ini berarti saya perlu membuat file konfigurasi atau kelas besar untuk mengonfigurasi semua aturan boot? Bukankah itu akan membuang banyak memori?

Tetapi jika saya hanya menetapkan aturan yang diperlukan untuk setiap pengontrol, apakah itu akan melebihi target ACL? Alasan utama penggunaan ACL adalah untuk menghindari izin disebarkan ke seluruh basis kode:

Admin_Controller ( fungsi publik action() ( if($user->role !== "admin") ( die("tidak diizinkan"); ) ) )

Bagaimana dengan perubahan? Bagaimana jika aturan ACL disimpan dalam database dimana administrator dapat dengan mudah mengubah izin. Haruskah semuanya dimuat setiap permintaan halaman? Bukankah hal ini akan memberikan banyak tekanan pada sistem?

Singkatnya, bagaimana cara kerja ACL di situs besar? Masalah apa saja yang muncul? Bagaimana cara menangani izin berjenjang?

Anda dapat menyimpan peran dalam database dan menyimpan objek dalam memori menggunakan memcache, jadi Anda hanya perlu menanyakan db ketika peran baru ditambahkan atau diubah. Mengenai implementasi ACL, karena ini akan digunakan di seluruh sistem, Anda dapat menginisialisasinya di file Bootstrap.php dan kemudian menyimpan objek di Zend_Registry sehingga tersedia di seluruh aplikasi Anda.

Penerapan aturan ini dapat terjadi pada titik yang berbeda. Anda dapat menggunakan rute di router khusus atau mungkin di level yang lebih tinggi di level pengontrol. Jika Anda memperluas Zend_Controller_Action, Anda dapat meletakkan aturan ACL Anda di pengontrol utama ini, yang merupakan asal setiap pengontrol lainnya. Anda dapat memeriksa izin ACL dalam metode _init(). Mungkin ada titik lain dalam sistem di mana Anda memerlukan ACL, atau ingin memeriksanya, tergantung pada bagaimana dan bagaimana Anda membuatnya (itulah sebabnya Anda menyimpan ACL di registri).

Hal ini akan terjadi ketika Anda menjalankan situs web E-Commerce – pengguna yang memiliki akun melakukan pembayaran saat menjadi tamu, menghubungi Anda dan ingin keduanya dikaitkan. Ya, kerja ekstra untukmu!

Di Magento, tidak ada fitur default yang memungkinkan Anda mengaitkan keduanya. (Berita buruk, saya tahu). TAPI, itu bisa dilakukan. (masukkan tanda bintang di sini)

Cara menghubungkan pesanan Magento ke pelanggan di database.
Jika pelanggan melakukan check out saat login, hal ini terjadi secara default. Namun, jika pelanggan tidak masuk saat melakukan pembayaran, dan kemudian ingin pesanan dikaitkan ke akunnya, ikuti langkah-langkah berikut untuk menyatukan keduanya.

Pilihan Solusi

Ada dua cara untuk melakukan pendekatan ini:

  1. Pasang ekstensi
  2. Edit database secara manual

Kaitkan Pesanan Pelanggan Dengan Akun Melalui Ekstensi Magento

Saya tahu ada ekstensi yang tersedia untuk ini, namun secara pribadi saya belum pernah menggunakannya sehingga tidak akan mendukung, merekomendasikan, atau bahkan menautkannya di sini untuk Anda. Namun sedikit usaha akan membawa Anda ke arah yang benar.

Pembaruan 5 Januari 2016

Meskipun saya menyatakan sebelumnya bahwa saya tidak memiliki dukungan untuk Ekstensi Magento karena menghubungkan pelanggan ke pesanan melalui Admin Magento, saya sekarang mendukung ekstensi tersebut. Saya merasa percaya diri mendukungnya karena saya yang menulisnya. Ya, itu adalah colokan yang tidak tahu malu. Tapi ini ekstensi gratis, jadi tidak apa-apa kan?

Ekstensi Magento untuk Menghubungkan Pelanggan ke Pesanan Tamu

Ekstensi PromInc Magento untuk menghubungkan pelanggan dan pesanan tersedia melalui Github dan memerlukan instalasi manual dibandingkan menggunakan Magento Connect. Jangan ragu untuk mengunduh kode untuk ditambahkan ke instalasi Magento Anda sendiri. Petunjuk instalasi dan penggunaan juga didokumentasikan di Github.

Kaitkan Pesanan Pelanggan Dengan Akun Melalui Database

Namun yang akan saya bagikan kepada Anda adalah bagaimana melakukan koreksi ini secara manual di database. Namun untuk melakukan ini, Anda memerlukan akses database ke situs Magento Anda melalui PHP MyAdmin, alat database pihak ketiga seperti MySql Workbench, NovaBench, dll., atau akses baris perintah.

CATATAN: Jika Anda benar-benar bingung dengan kalimat terakhir itu, saya berasumsi Anda bukan seorang pengembang dan/atau admin basis data, dan di sinilah sebaiknya Anda berbalik dan meninggalkan postingan ini. :) Saya tidak mencoba untuk bersikap kasar tetapi lebih jujur. Penyiapan alat-alat tersebut memerlukan konfigurasi dari host web Anda, dan pengetahuan yang tepat untuk mengetahui cara menggunakan alat-alat ini. Bermain di database bukanlah sesuatu yang harus dilakukan oleh seorang pemula – Anda dapat menciptakan banyak hasil yang tidak diinginkan di sana jika Anda tidak tahu apa yang Anda lakukan.

Ok bagi anda yang masih membaca dan memahami, berikut solusi yang anda cari. Saya tahu solusi ini berfungsi untuk Magento versi 1.4.1 dan lebih tinggi.

Anda perlu mengetahui informasi berikut:

  • ID Pelanggan (custom_id)
    • Cara termudah untuk menemukan ID Pelanggan adalah dengan melihat pelanggan di Admin Magento dan melihat URL pelanggan tersebut di bilah alamat – ID Pelanggan adalah nomor di akhir URL.
      https://www.situsanda.com/index.php/guru/customer/edit/id/ 200490 /
  • ID Pesanan (entity_id)
    • CATATAN: Ini adalah ID entitas Database, BUKAN ID Pesanan yang Anda gunakan pada invoice Anda.
    • Cara termudah untuk menemukan ID Pesanan adalah dengan membuka pesanan di Admin Magento dan melihat URL pesanan tersebut di bilah alamat- ID Pesanan adalah nomor di akhir URL.
      https://www.situsanda.com/index.php/guru/sales_order/view/order_id/ 291855 /

Ada dua tabel di Database Magento yang perlu diperbarui:

  • penjualan_flat_order
  • sales_flat_order_grid
    • CATATAN: Saya yakin tabel ini hanya digunakan untuk Admin Magento

Jika Anda menggunakan alat pengeditan database berbasis GUI seperti MySQL Workbench, Anda hanya perlu mengedit entri ID Pesanan di dua tabel yang tercantum di atas, mengatur bidang customer_id ke ID Pelanggan yang ada di atas.

Jika Anda lebih suka melakukan ini melalui skrip SQL, Anda dapat menggunakan dua skrip berikut, sebagai pengganti ID PELANGGAN Dan Memesan PENGENAL dengan info yang sesuai ditemukan di atas.