как получить миниатюру подкатегории в цикле?


$category = Mage::getModel('catalog/category')->load('2')->getChildrenCategories();
foreach ($category as $cat){

    $entity_id = $cat->getId();
    $name = $cat->getName();
    $url_key = $cat->getUrlKey();
    $url_path = $cat->getUrlPath();
    $skin_url = $cat->getImageUrl(); 


 <img src="<?php echo $skin_url; ?>" />

Вышеупомянутый код не работает для меня, если у кого-то есть решение, пожалуйста, помогите.

Author: Marius, 2014-10-02

4 answers

Попробуйте сделать это так:

$categories = Mage::getModel('catalog/category')->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('parent_id', 2);

foreach ($categories as $cat) {
    $entity_id = $cat->getId();
    $name = $cat->getName();
    $url_key = $cat->getUrlKey();
    $url_path = $cat->getUrlPath();
    $skin_url = $cat->getImageUrl(); 
    echo '<img src="'.$skin_url.'" />';
}
 4
Author: Marius, 2016-01-15 09:42:47
function getImageUrl($category)
 {

$cur_category=Mage::getModel('catalog/category')->load($category->getId());

$layer = Mage::getSingleton('catalog/layer');

$layer->setCurrentCategory($cur_category);
$url = $this->getCurrentCategory()->getImageUrl();
return $url;
};   

 if ($image = $cat->getImageUrl()) {
                <img src="<?php echo $_imgUrl ?>"/ >
    }

Или

<?php if($cat->getThumbnail()): ?>

<img src="<?php echo Mage::getBaseUrl('media')?>catalog/category/<?php echo $cat->getThumbnail() ?>

<?php endif; ?>

Дополнительная информация

 2
Author: Ravikumar Patel, 2014-10-03 03:59:10

Это решение

$category =  Mage::getModel('catalog/category')->getCollection()
                            ->addAttributeToSelect('*')
                            ->addAttributeToFilter('parent_id', 2);
    foreach ($category as $cat){
            $entity_id = $cat->getId();
            $name = $cat->getName();
            $url_key = $cat->getUrlKey();
            $url_path = $cat->getUrlPath();
            $skin_url = $cat->getThumbnail(); 
    <img src="<?php echo Mage::getBaseUrl('media')?>catalog/category/<?php echo $skin_url; ?>" />
    } #endforeach
?>
 2
Author: Muhammad Shoaib Murtaza, 2015-04-12 10:48:01

Есть 2 причины, по которым ваш код не работает.

Во-первых, есть синтаксические ошибки. Возможно, вы только что дали нам два фрагмента, но если это не так, то у вас есть теги php внутри кода php, и вы опустили закрывающую скобку оператора foreach.

Во-вторых, getChildrenCategories() загружает не все данные категорий, а только самые основные. Таким образом, getImageUrl() ничего не возвращает, потому что данные изображения не были загружены.

Самое смешное, что ответ Мариуса решает обе эти проблемы, но вы говорите, что это все равно не сработает. В этом случае, возможно, вам потребуется обновить кэш и/или индексы.

System > Cache Management > Additional Cache Management > Flush Catalog Images Cache
System > Index Management > Category Flat Data

Кроме того, я полагаю, что этот код находится внутри шаблона, и в этом случае вам также может потребоваться обновить кэш html блоков:

System > Cache Management > Blocks HTML output

В сочетании с кодом Мариуса это должно сработать.

ПС. Если код не внутри шаблона, то это открывает целую загрузку более возможных объяснений, например, Блоки и модели должны наиболее вероятно, будет использовать return вместо echo.

** РЕДАКТИРОВАТЬ **

ППС. В названии вашего вопроса написано "миниатюра", а не "изображение". Хотя у категорий есть миниатюры, команда Magento по какой-то причине забыла написать функцию getThumbnailUrl() в дополнение к getimageurl() - по крайней мере, это верно в CE 1.7 и 1.8, еще не проверил 1.9. Поэтому, если вам действительно нужна миниатюра, скопируйте Mage_Catalog_Model_Category::getimageurl() и измените соответственно.

 1
Author: Doug McLean, 2014-10-02 13:19:29