Như đã đề cập bởi mhaupt, tải bộ sưu tập nhanh hơn là mỗi danh mục trong một vòng lặp. Nhưng, theo như tôi lo ngại, không cần phải tải các danh mục con theo cách thủ công. Về cơ bản đây là những gì $category->getChildrenCategories()
đã làm.
Ngoài ra còn có bộ lọc để chỉ nhận danh mục hoạt động. Chỉ cần gọi addIsActiveFilter()
trên bộ sưu tập.
a.) Tải trọng hoạt động chủ đề con qua getChildren()
// 1. Get a list of all child category ids (e.g "12,23,11,42")
$subcategoryIds = $category->getChildren();
// 2. Create collection
$categoryCollection = Mage::getModel('catalog/category')->getCollection();
// 3. Add all attributes to select, otherwise you can not
// access things like $cat->getName() etc.
$categoryCollection->addAttributeToSelect('*');
// 4. Filter by ids
$categoryCollection->addIdFilter($subcategoryIds);
// 5. Add filter to collection to get active categories only
$categoryCollection->addIsActiveFilter();
b.) Tải chủ đề con tích cực với getChildrenCategories()
// 1. Load collection
$categoryCollection= $category->getChildrenCategories();
// 2. Add filter to collection to get active categories only
$categoryCollection->addIsActiveFilter();
Bộ sưu tập sẽ được nạp dưới dạng cơ sở dữ liệu trong thời gian sớm vì nó được truy cập. Nếu bộ sưu tập không được tải và $subcategories->count()
chỉ được gọi là "số lượng SELECT (*)" sẽ được kích hoạt đối với cơ sở dữ liệu (trái ngược với count($subcategories)
sẽ buộc bộ sưu tập tải chính nó).
Iterating bộ sưu tập
foreach($categoryCollection as $category) {
echo $category->getName();
}
Nếu bạn thêm nhiều bộ lọc để bộ sưu tập sau khi truy cập vào nó, bộ sưu tập sẽ không tải bản thân lại tự động. Để áp dụng các thay đổi cho bộ sưu tập, chỉ cần gọi $categoryCollection->load()
để tải lại bộ sưu tập từ cơ sở dữ liệu.
Nguồn
2014-04-17 08:17:54
Cảm ơn bạn rất nhiều nó hoạt động ngay bây giờ. – Tonzkie
Sử dụng getAllChildren và chuyển giá trị true thành nó, điều này sẽ trả về một mảng. Không cần phải phát nổ chuỗi. Lyle Mcclanahan cung cấp lời khuyên tốt nhất – Tisch
cảm ơn tuyệt vời! – zaw