Tùy chỉnh lớp không thuộc tính dựa trên điều hướng. Đây có phải là cách duy nhất để làm điều đó?


8

Hôm nay tôi đã đưa ra một tùy chọn điều hướng lớp không dựa trên một thuộc tính. Đó là để xếp hạng để mặt trước có thể hiển thị các ngôi sao sáng bóng đẹp.

Để làm điều này tôi có:

  1. Tạo một mô-đun
  2. Viết lại danh mục_block_layer_view

    <blocks>        
      <catalog>
        <rewrite>
          <layer_view>Bob_Catalog_Block_Layer_View</layer_view>
         </rewrite>                
       </catalog>
    </blocks>
  3. Đã tạo một lớp có tên là Bob_Catalog_Block_Layer_View giúp mở rộng Mage_Catalog_Block_Layer_View

  4. Đã tạo _initBlocks (), getFilters () và _prepareLayout () để ghi đè các phương thức lớp cha. Tất cả đều gọi lớp cha tại một số điểm và sau đó thêm hoặc thêm dữ liệu vào dữ liệu được trả về.
  5. Tạo một khối bộ lọc Bob_Catalog_Block_Layer_Filter_Rating mở rộng Mage_Catalog_Block_Layer_Filter_Abauge với một hàm tạo đặt bộ lọcModelName và gọi cha mẹ của nó và sau đó đặt một mẫu tùy chỉnh vì nó có vẻ như Mage_Catalog_Block_Layer_Filter
  6. Tạo một mô hình Bob_Catalog_Model_Layer_Filter_Rating mở rộng Mage_Catalog_Model_Layer_Filter_Abauge và thực hiện áp dụng (), getName (), _getItemsData ().

Tất cả điều này hoạt động tốt. Các ngôi sao sáng bóng đẹp hiển thị trong lớp hải quân.

Tôi có một cảm giác đặc biệt rằng tôi đang thiếu một cái gì đó bởi vì khi nói đến mẫu trạng thái lớp, tôi đã phải đặt một điều kiện vào đó để chọn bộ lọc xếp hạng tùy chỉnh và thay đổi bố cục. Ngoài ra một số điều tôi cần phải làm (sao chép bộ sưu tập sản phẩm để sự kiện tải không làm tăng số lượng bộ sưu tập trên trang) khiến tôi cảm thấy như mình đang bơi lên đồi.

Vì vậy, câu hỏi là có ai trong số các bạn có bất kỳ đề xuất nào tốt hơn (hoặc có thể là một bài đăng trên blog nháy mắt ) về cách xây dựng bộ lọc điều hướng lớp không thuộc tính được hỗ trợ tùy chỉnh không?

Cảm ơn vì đã đọc,


Tôi phải làm điều đó vào những ngày tiếp theo và tôi nghĩ sẽ làm nó như thế này.
Fabian Blechschmidt

Câu trả lời:


5

Có một cách khác để làm điều đó, bạn có thể thêm một thuộc tính bình thường vào sản phẩm của mình, đó sẽ là xếp hạng. Sau đó, sử dụng một người quan sát (tôi không biết cách xếp hạng này được hình thành) để cập nhật thuộc tính của sản phẩm. Hoặc, nếu người quan sát không có tùy chọn, có thể sử dụng cronjob để cập nhật thuộc tính đó cho mọi sản phẩm sau mỗi x phút tùy thuộc vào mức độ nặng của tập lệnh.

Bằng cách này, không có Magento viết lại và thay đổi liên quan, tất cả các mô-đun điều hướng sẽ vẫn hoạt động và dễ bảo trì hơn.

Tất nhiên câu hỏi là, đây có phải là một lựa chọn cho bạn? Xếp hạng đến từ đâu?

EDIT Bạn sẽ phải tạo kiểu cho các ngôi sao bằng cách sử dụng javascript hoặc kiểm tra tên thuộc tính trong mẫu.


Tôi nghĩ rằng điều này bao gồm khá nhiều tất cả các tùy chọn. Đề nghị quan sát viên là một ý tưởng thú vị.
Si Griffiths

Nếu tôi nhớ lại, kiểu dáng ngôi sao tiêu chuẩn chỉ là chiều rộng CSS dựa trên xếp hạng trung bình ngoài 5. 1/5 = 20% chiều rộng, 4,3 / 5 = 86% chiều rộng, v.v ... Tôi nghi ngờ rằng cần phải thay đổi ... nhưng cập nhật giá trị thuộc tính thông qua một tập lệnh cron là khá thông minh. +1
pspahn

2

Tôi đào sâu vào mã và không tìm thấy sự kiện nào. Không thêm thuộc tính bổ sung, không có gì để làm mà không có<rewrite>

Bạn phải thêm khối của mình vào \Mage_Catalog_Block_Layer_View::_prepareLayout()trước apply()(nếu không bạn có thể sử dụng core_block_abstract_prepare_layout_after.

Và bạn cần thêm nó vào \Mage_Catalog_Block_Layer_View::getFilters()và không có sự kiện quá.


Đây chính xác là những gì tôi tìm thấy. Dường như không có cách nào để làm việc xung quanh mẫu state.phtml. Có vẻ như một nhánh có điều kiện là cần thiết để thay đổi bất kỳ đầu ra.
Si Griffiths

Tôi viết lại catalog/layer_filter_category, catalog/layer_filter_attributecatalog_resource/layer_filter_attributeđể hiển thị các tùy chọn tất cả các thời gian mà không sử dụng state.phtmlvào lúc này không có cách nào để loại bỏ các bộ lọc: - /
Fabian Blechschmidt

Công việc của tôi có if ($ _filter-> getName () === 'anything') {} Để di chuyển hiển thị html trạng thái tùy chỉnh. Nó không phải là một giải pháp tuyệt vời nhưng nó là một giải pháp không hơn không kém. Thi thiên Hy vọng bạn vẫn khỏe kể từ lần cuối chúng tôi gặp nhau tại MDP.
Si Griffiths
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.