Intereting Posts
Почему эти Heredoc и Nowdoc вызывают ошибки? Как подпись PHAR предотвращает несанкционированное использование файлов? PHP uploading script – автоматически создавать папку Поделиться контроллерами модулей zend для использования в другом модуле Как я могу обработать предупреждение о функции file_get_contents () в PHP? PHP: как проверить, был ли пользователь уже зарегистрирован и иным образом перенаправлен на страницу входа в систему Добавление двух переменных – php PHP StdErr после Exec () Что такое временная метка Unix и зачем ее использовать? Возможно ли использовать чрезмерное статическое связывание в PHP? Использование переменной PHP $ _SESSION для хранения больших символов данных PHP: соединение с базой данных в классе или глобальном PHP PDO MySQL прокручиваемый курсор не работает Подкаталог WordPress как Symfony (Symfony3) редактирование стандарта форматирования исходного кода NetBeans

Получить категории детей magento

Попытка получить дочерний объект определенной категории, который активен. Пожалуйста помоги. У меня проблемы с этим. В настоящее время я могу показать им все, но не конкретно. Поблагодарили бы за любую помощь.

$category = Mage::getModel('catalog/category')->load(2); $category->getChildCategories(); $tree = $category->getTreeModel(); $tree->load(); $ids = $tree->getCollection()->getAllIds(); 

вот код для загрузки активной категории

 /* Load category by id*/ $cat = Mage::getModel('catalog/category')->load($id); /*Returns comma separated ids*/ $subcats = $cat->getChildren(); //Print out categories string #print_r($subcats); foreach(explode(',',$subcats) as $subCatid) { $_category = Mage::getModel('catalog/category')->load($subCatid); if($_category->getIsActive()) { $caturl = $_category->getURL(); $catname = $_category->getName(); if($_category->getImageUrl()) { $catimg = $_category->getImageUrl(); } echo '<h2><a href="'.$caturl.'" title="View the products for this category"><img src="'.$catimg.'" alt="" />'.$catname.'</a></h2>'; } } ?> 

надеюсь, это поможет вам.

Как упоминалось mhaupt, быстрее загружать коллекцию, а не каждую категорию в цикле. Но, насколько мне известно, нет необходимости вручную загружать дочерние категории. В основном это то, что уже делает $category->getChildrenCategories() .

Существует также фильтр, чтобы получать только активные категории. Просто вызовите addIsActiveFilter() в коллекции.

a.) Загружать активные дочерние категории через getChildren()

 // 1. Get a list of all child category ids (eg "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.) Загружать активные дочерние категории с помощью getChildrenCategories()

 // 1. Load collection $categoryCollection= $category->getChildrenCategories(); // 2. Add filter to collection to get active categories only $categoryCollection->addIsActiveFilter(); 

Сбор будет загружен из базы данных сразу же после ее обращения. Если коллекция не загружена и вызывается $subcategories->count() то для базы данных будет использоваться только «SELECT count (*)» (в отличие от count($subcategories) которая заставит сборку загружать себя).

Итерирование коллекции

 foreach($categoryCollection as $category) { echo $category->getName(); } 

Если вы добавите в коллекцию дополнительные фильтры после ее получения, коллекция не будет автоматически загружаться автоматически. Чтобы применить изменения к коллекции, просто вызовите $categoryCollection->load() чтобы перезагрузить коллекцию из базы данных.

Те, кто говорят использовать getAllChildren () вместо getChildren (), просто ошибаются. Оба метода возвращают то же самое, с одной разницей, getAllChildren (true) вернет массив вместо строки с разделителями-запятыми. getAllChildren ($ bool asArray) по умолчанию имеет значение false. Моя точка зрения заключается в том, что в любом случае вам придется использовать

 Mage::getModel('catalog/category')->load($catId); 

внутри цикла, если вы не используете функцию ниже.

 private function fetchCatsById($onlyThese) { $cats = Mage::getModel('catalog/category') ->getCollection(true) ->addAttributeToSelect('*') ->addIdFilter($onlyThese) ->addAttributeToFilter('level','2') ->addIsActiveFilter(); return $cats; } $cats = $this->fetchCatsById($onlyThese); 

Один ответ, который написал лиякат, не должен использоваться в профессиональных магазинах, потому что он поднимает проблему с производительностью из-за множества n временных нагрузок объекта категории, скорее используйте набор категорий для этого, получите всех детей

 $cat->getAllChildren() 

, затем ограничьте набор категорий нужной категорией, например

 $coll->addIdFilter($idFilter); 

то вам не придется загружать n раз в базу данных.

Пожалуйста, имейте в виду, что нагрузки внутри циклов являются одним из наиболее часто используемых примеров неправильного кода в любых проектах Magento и для их предотвращения!

Привет, вы увидите ниже код

 $category_model = Mage::getModel('catalog/category'); $_category = $category_model->load(13); $all_child_categories = $category_model->getResource()->getAllChildren($_category); print_r($all_child_categories); 

Если вы хотите любое количество подкатегорий родительской категории, чем Нажмите здесь http://magentoo.blogspot.com/2014/01/get-all-subcategories-of-parent-category-magento.html