Vô hiệu hóa chia sẻ giỏ hàng giữa các Cửa hàng khác nhau của trang web trong Magento 2?


7

Trang web của tôi có ba loại khác nhau Storesvà tôi muốn tắt cart sharingtính năng giữa các cửa hàng. Vì vậy, khi tôi chuyển từ cửa hàng này sang cửa hàng khác, sản phẩm trong giỏ hàng của tôi không nên hợp lệ hoặc không hiển thị sang cửa hàng khác.

Product added to the specific store should be displayed on the specific store only.

Tôi nghĩ bạn có một trang web -> một cửa hàng -> nhiều lượt xem?
Hassan Ali Shahzad

Tôi có 1 trang web, 2 cửa hàng và 2 lượt xem cửa hàng (một cho mỗi cửa hàng).
amitshree

Câu trả lời:


2

Tôi không chắc điều này có hiệu quả không, đó chỉ là một ý tưởng: Báo giá có chức năng chỉ định các cửa hàng đang chia sẻ báo giá. Theo mặc định, đây là tất cả các cửa hàng của một trang web. Dù sao, nếu có thể thiết lập một danh sách các cửa hàng spefic trước khi tải báo giá, tôi nghĩ có thể giới hạn báo giá cho một tập hợp con của tất cả các cửa hàng của một trang web, trong trường hợp của bạn chỉ là cửa hàng thực tế.

Một ý tưởng có thể là đặt giới hạn cửa hàng trong một plugin trước khi getphương thức Magento\Quote\Model\QuoteRepositorynày luôn được gọi khi trích dẫn được tải.

Một lần nữa, đó chỉ là một ý tưởng có thể không hoạt động và mã không được kiểm tra và chỉ để thể hiện suy nghĩ của tôi.

class MyPlugin{

    protected $storeManager;

    public function __construct( 
        \Magento\Store\Model\StoreManagerInterface $storeManager
    ){
        $this->storeManager = $storeManager;
    }

    public function beforeGet(
        \Magento\Quote\Model\QuoteRepository $quoteRepository, 
         $cartId, 
         array $sharedStoreIds
    ){
        return [$cartId, [$this->storeManager->getStore()->getId()]];
    }
}

Mong muốn được nghe những gì bạn nghĩ về phương pháp này.


Tôi sẽ thử và cập nhật nếu nó hoạt động.
amitshree

Người đàn ông tuyệt vời !!! :) +1
Rohan Hapani

Thử nó. Chỉ các mục được ẩn khỏi phần minicart nhưng chúng có thể nhìn thấy là các phần khác như giỏ hàng, thanh toán.
amitshree

0

Theo mặc định, Magento hỗ trợ chia sẻ giỏ hàng giữa các trang web và để làm như vậy, bạn cần đảm bảo các cài đặt sau:

  1. Đường dẫn cookie & Tên miền cookie

cài đặt cookie

  1. Chia sẻ tài khoản khách hàng -> Toàn cầu

chia sẻ tài khoản khách hàng

Để tắt chức năng chia sẻ giỏ hàng, tôi đề nghị thay đổi tên miền cookie của bạn. Ví dụ

lưu trữ 1: https://mystore.com=> tên miền cookie:.mystore.com

lưu trữ 2: https://mystore2.com=> tên miền cookie:.mystore2.com

Và vô hiệu hóa chức năng chia sẻ tài khoản khách hàng, nếu không, bạn có thể cần tìm cách tạo lại ID phiên giữa các cửa hàng (SID), trình chuyển đổi cửa hàng Magento tự động thêm SID cho cửa hàng, tôi khuyên bạn không nên sử dụng trình chuyển đổi cửa hàng của họ mà hãy phát triển trình chuyển đổi cửa hàng thuộc sở hữu của bạn tránh SID nối thêm.

Hy vọng điều này giúp đỡ.


Tôi chỉ có một trang web và tải cửa hàng thứ hai bằng cách sử dụng website.com / store2. Là bắt buộc để tạo 2 trang web?
amitshree

@amitshree Nếu cửa hàng của bạn sử dụng tên miền như website.com/store2, bạn nên xem xét đường dẫn cookie thay vì tên miền cookie.
Toàn Nguyễn

Tôi đã thay đổi đường dẫn cookie là / mặc định và / bán lẻ cho cả hai cửa hàng xem. Vẫn tôi thấy giỏ hàng được chia sẻ.
amitshree

0

Chuyển đến thư mục vị trí nhà cung cấp / magento / kiểm tra mô-đun / Mô hình / mở tệp Session.php. Bây giờ hãy tìm kiếm hàm _getQuoteIdKey trong tệp này và thay thế id trang web bằng id cửa hàng.

Thay thế dòng này

trả lại 'quote_id_'. $ this -> _ storeManager-> getStore () -> getWebsiteId () với dòng này
trả về 'quote_id_'. $ this -> _ storeManager-> getStore () -> getStoreId ();

bây giờ tất cả các cửa hàng của bạn, những người thuộc cùng một trang web hoạt động độc lập.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.