2012-11-26 23 views
9

Tôi đã cài đặt mô-đun phần thưởng vào bản dựng Magento của mình. Tôi cũng đã thiết lập một số quảng cáo giỏ hàng. Làm tất cả mọi việc. Trên trang giỏ hàng, bạn có thể đổi điểm thưởng và nhập mã giảm giá và mọi thứ được giảm giá chính xác. Vấn đề là họ đều dán nhãn dưới nhãn 'giảm giá' (nơi 1.000 điểm = £ 1 tắt)Magento Hiển thị nhiều Giảm giá Phân tích

http://i.imm.io/N0hf.png

Như bạn có thể thấy, nó là nhóm giảm giá phiếu giảm giá £ 5 và phần thưởng £ 1 giảm giá cùng nhau. Làm cách nào để tách riêng những thứ này để tôi có hai hàng giảm giá, một cho phiếu thưởng và một cho điểm thưởng?

+0

Tên của mô-đun phần thưởng mà bạn đã cài đặt là gì? –

+0

SweetTooth - http://www.magentocommerce.com/magento-connect/sweet-tooth-customer-rewards.html –

+0

Bạn đang chạy phiên bản nào của Sweet Tooth? – JMTyler

Trả lời

11

Đây không phải là một nhiệm vụ đơn giản. Thật không may hệ thống giảm giá của Magento không được chuẩn bị vô cùng cho việc bổ sung các loại giảm giá mới loại mà bạn có thể không muốn thêm vào cùng nhau trong hộp tổng giỏ hàng.

Đúng là bạn cần phải sửa đổi phương thức resetDiscountLabels() của lớp TBT_Rewards_Model_Salesrule_Observer. Tuy nhiên, phương pháp này không phải là nơi Sweet Tooth thêm giảm giá của nó vào mô tả giảm giá. Khá ngược lại. Giảm giá của Sweet Tooth là tự động được thêm vào danh sách giảm giá của Magento trên giỏ hàng (và mô tả chiết khấu được tạo tự động từ danh sách giảm giá này). Vấn đề là ngay cả giảm giá Sweet Tooth rằng không nên thêm vào giỏ hàng sẽ hiển thị ở đó - giảm giá áp dụng cho giỏ hàng dựa trên quy tắc bạn đã tạo, nhưng khách hàng chưa thực sự chọn để chi tiêu điểm nào. Phương pháp resetDiscountLabels() tồn tại để xóa mô tả giảm giá không mong muốn khỏi giỏ hàng, không thêm bất kỳ mô tả nào.

Giải pháp cho vấn đề của bạn có hai bước và bước thứ hai là tính thuế nhiều hơn.

Trước tiên, bạn phải sửa đổi phương pháp được đề cập ở trên để xóa tất cả Mô tả giảm giá bằng Sweet Tooth từ giỏ hàng, chứ không phải chỉ những mô tả không áp dụng. Tôi khuyên bạn nên sao chép tệp vào ứng dụng/mã/mã hóa cục bộ của bạn trước tiên và sửa đổi tệp đó thay vì tệp gốc. Nếu bạn lặp qua tất cả ID quy tắc trên giỏ hàng, sau đó tải mô hình quy tắc, bạn có thể biết đó là quy tắc Sweet Tooth hay không nếu trường points_action của nó được đặt, tức là $rule->getPointsAction() !== null. Nếu mọi quy tắc của quy tắc này là quy tắc của Sweet Tooth, bạn có thể unset chúng từ mô tả giảm giá theo cách mà phương thức đã thực hiện. Sau đó, giảm giá Sweet Tooth sẽ không còn xuất hiện trong hàng của hộp tổng cộng của bạn nữa.

Bước thứ hai là thêm một hàng mới vào hộp tổng, a.k.a. thêm một mô hình tổng mới vào báo giá. Đây sẽ là bước phức tạp hơn - phức tạp hơn nhiều so với tôi có thể mô tả trong câu trả lời này, nhưng đây là hướng dẫn về việc thêm tổng số cột mới: http://turnkeye.com/blog/magento-development-add-total-row-checkout/ Trong phương thức collect() của mô hình mới, bạn nên kiểm tra trường applied_redemptions của báo giá để nhận danh sách của ID quy tắc Sweet Tooth mà khách hàng đã áp dụng cho giỏ hàng của họ. Sau đó bạn có thể tái tạo tổng chiết khấu Sweet Tooth bằng cách sử dụng các giá trị này.

Như tôi đã nói, đây không phải là một nhiệm vụ đơn giản, và tiếc là đây là cách bán sạch duy nhất để làm điều đó. Hy vọng nó không quá nhiều. Bạn cũng có thể luôn luôn thuê một công ty phát triển để làm điều đó cho bạn, nếu bạn muốn tập trung thời gian dev của riêng bạn vào các nhiệm vụ khác.

Hy vọng điều này hữu ích!

+0

@Richard Parnaby-King: bạn có thể cho chúng tôi biết nếu bạn đã từng giải quyết thành công vấn đề của mình không? Tôi rất tò mò! – JMTyler

4

Bạn cần sửa đổi /TBT/Rewards/Model/Salesrule/Observer.php - kiểm tra checkRedemptionCouponBefore() để biết số tiền chiết khấu và kiểm tra resetDiscountLabels() - đây là nơi Sweet Tooth thêm giảm giá của nó vào mô tả giảm giá.

Bạn cũng có thể cần phải sửa đổi /app/design/frontend/base/default/template/rss/order/details.phtml - sau khi các dòng if ($_order->getDiscountAmount() > 0)

+0

Nếu anh ta không gọi resetDiscountLabels() anh ta sẽ mất nhãn giảm giá Sweet Tooth hoàn toàn, nhưng có vẻ như anh ta chỉ muốn tách chúng ra. – JMTyler

+0

Nó không phải về việc không gọi chức năng đó nhưng mở rộng nó để hiển thị sự cố. Tôi đã chỉ ra những điểm chính xác nơi mà 2 giảm giá được đưa vào một dòng duy nhất. –

Các vấn đề liên quan