2009-10-06 38 views
6

Tôi đang xây dựng một cửa hàng Magento cho khách hàng và muốn thêm thuộc tính vào tất cả các sản phẩm hoạt động như một danh sách thả xuống. Giống như thuộc tính 'Nhà sản xuất'.Magento: cách điền trước các giá trị thuộc tính thả xuống của sản phẩm

Tuy nhiên, thay vì nhập thủ công danh sách giá trị cho thuộc tính, tôi muốn các giá trị được điền từ trang web bên ngoài. Vì vậy, mỗi lần bạn tạo một sản phẩm mới hoặc chỉnh sửa sản phẩm hiện có, danh sách thả xuống được điền bằng danh sách cập nhật các giá trị đã được truy lục từ một trang web từ xa. Không nên tìm nạp danh sách chỉ một lần trong quá trình tạo thuộc tính, nhưng mỗi khi một sản phẩm được tạo hoặc chỉnh sửa.

Ví dụ: giả sử bạn có thể nhận danh sách tất cả Nhà sản xuất qua curl từ một trang web từ xa. Tên trong danh sách này đôi khi được sửa đổi hoặc thêm vào, tuy nhiên id vẫn giữ nguyên như vậy nên chúng được sử dụng phía sau hậu trường. Làm cách nào bạn sẽ điền trước các giá trị của trình đơn thả xuống của nhà sản xuất?

Tôi biết cách tạo tiện ích mở rộng tùy chỉnh cơ bản nhưng mở rộng phần phụ trợ adminhtml là công cụ mới cho tôi.

Mọi trợ giúp đều được đánh giá cao.

+0

Chấp nhận câu trả lời? – ColinM

+0

@ColinM Rất tiếc. Làm xong. :) –

Trả lời

10

Thuộc tính sản phẩm Magento cực kỳ linh hoạt, nhưng có giá trị động trên mỗi sản phẩm sẽ có nghĩa là bạn sẽ cần một thuộc tính cho mỗi sản phẩm không có ý nghĩa nhiều, vì vậy tôi giả định rằng các giá trị thuộc tính này chia sẻ một số điểm chung giữa các sản phẩm trong lưu trữ, do đó bạn sẽ có một số lượng hạn chế các thuộc tính (hoặc một?). Đối với mỗi thuộc tính như vậy, bạn nên tạo thuộc tính và mô hình phụ trợ trước và sau đó sử dụng một công việc hoặc sự kiện cron cập nhật các tùy chọn giá trị thuộc tính từ API của bạn và lưu chúng cục bộ trong cơ sở dữ liệu hoặc một số phương thức khác. Bạn có thể thêm thuộc tính vào trình cài đặt mô-đun của mình như sau:

$installer->addAttribute('catalog_product', 'my_attr_code', array(
    'label' => 'Attribute Name', 
    'required' => false, 
    'input' => 'select', 
    'source' => 'namespace/source', 
    'default' => 'none', 
    'position' => 1, 
    'sort_order' => 3, 
)); 

Hoặc cuộn bảng chèn SQL của riêng bạn cho bảng eav_attribute. Đảm bảo gán thuộc tính mới của bạn cho một thuộc tính được đặt trong phần cuối để có thể sử dụng được với các sản phẩm của bạn.Sau đó, bạn tạo ra một mô hình tại My_Namespace_Model_Source kéo dài Mage_Eav_Model_Entity_Attribute_Source_Table (giả sử bạn muốn có một lựa chọn đầu vào cho các giá trị thuộc tính của bạn) và thực hiện ở mức tối thiểu các phương pháp sau:

getAllOptions() 
getOptionText($value) 

Vì vậy, những sẽ kéo từ các tùy chọn động được lưu trữ tại địa phương và đối với hầu hết các phần, thuộc tính mới của bạn sẽ hoạt động giống như bất kỳ thuộc tính nào khác trong Magento. Hãy chắc chắn sử dụng bộ nhớ đệm thông minh vì các phương pháp này có khả năng bị ảnh hưởng nhiều lần trong một lần tải trang. Có thể có một sự kiện bạn có thể quan sát được được gọi ngay trước khi sản phẩm tạo hoặc chỉnh sửa trang được hiển thị, nếu không chỉ ghi đè lên một lớp hoặc bộ điều khiển hoặc sử dụng tác vụ cron Magento.

Chỉnh sửa: Bạn cũng có thể sử dụng các mô hình thuộc tính Magento hiện có và tạo các giá trị tùy chọn thông qua API hiện tại nhưng tôi giả định rằng để thực hiện đồng bộ hoặc vì một số lý do khác bạn có thể cần thêm siêu dữ liệu trong trường hợp bạn muốn có một mô hình phụ trợ tùy chỉnh.

4

Không phải là câu trả lời hay nhưng tôi đoán ở đây, trước hết tôi sẽ thêm thuộc tính và sau đó thiết kế lại để xem nó được điền như thế nào.

Sau đó, trong trang trưng bày sản phẩm trên admin, tôi sẽ ghi đè chỉnh sửa và mới hành động của ProductController, để tải các giá trị sử dụng curl cho thuộc tính đó (bạn có thể tra cứu các id của thuộc tính trong bảng eav_attribute)

Sau đó, bạn có thể đóng gói này dưới dạng tiện ích mở rộng tùy chỉnh, do đó bạn không chỉnh sửa mã lõi trực tiếp. Chúc may mắn!

4

Bạn cần tra cứu bộ công cụ sự kiện Magento.

Về cơ bản, mỗi lần xảy ra sự kiện - cập nhật sản phẩm, gửi đơn đặt hàng, xóa nội dung nào đó - một thông báo được gửi qua hệ thống. Các tin nhắn này có thể bị bắt và sau đó có thể kích hoạt các phương thức bạn đã tạo. Để đạt được những gì bạn muốn, bạn sẽ cần nắm bắt sự kiện được kích hoạt khi một sản phẩm được tạo và cập nhật và thực hiện điều này để chạy một phương thức từ một trong các mô-đun tùy chỉnh của bạn. Phương pháp này sau đó sẽ lấy giá trị từ trang web từ xa và cập nhật sản phẩm với nó.

Sau khi tìm kiếm trên Google nhanh chóng, tôi thấy bài viết sau:

http://blog.baobaz.com/en/tag/magento-events

Bạn có thể tìm thấy những gì Magento sự kiện được kích hoạt bằng cách nhìn vào các mã mô-đun thích hợp.

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