2012-05-17 4 views
6

Я пытаюсь использовать миниатюру категории Magento, но она не работает. Я следовал много учебников в Интернете (например, http://www.douglasradburn.co.uk/getting-category-thumbnail-images-with-magento/), и все они упоминают о функции:Magento Категория Thumbnail

$_category->getThumbnail() 

, который должен быть в модели категории. Я запускаю Magento 1.6, и я не могу найти эту функцию нигде. Я также скачал 1.5 и 1.7, посмотрел туда, и его нигде не найти. Когда я запускаю код, он не дает мне никаких ошибок, но ничего не выводится.

Вот мой полный код:

<ul id="nav"> 
<?php foreach ($this->getStoreCategories() as $_category): ?> 
    <?php echo $_category->getThumbnail(); ?> 
    <?php echo $this->drawItem($_category) ?> 
<?php endforeach ?> 
</ul> 

(Я пытаюсь использовать эскиз в качестве пункта меню, где он присутствует)


Понял работает. Секрет в том, что вам нужно повторно запрос для данных ПОЛНЫХ категорий, используя этот код:

Mage::getModel('catalog/category')->load($_category->getId())->getThumbnail() 

Я после этого учебника несколько:

http://www.h-o.nl/blog/using_category_images_in_your_magento_navigation/

для имеющей категории миниатюр в меню.

благодаря T

+0

Вы правильно установили эскиз на бэкэнд? На самом деле не будет метода getThumbnail(), это волшебный метод. Также, почтовый индекс. –

+0

Спасибо, что разъяснил, что я думал, что происходит что-то подобное! Я трижды проверил, что у меня есть набор миниатюр. Я добавил код в свой оригинальный пост. – Totomobile

+0

Проверьте, что foreach() выполняет итерацию. Также сделайте 'Zend_Debug :: dump ($ _ category); exit;' и опубликуйте результат. –

ответ

11

Для чего это стоит, ваши работы решения, но весьма неэффективно.

Использование:

Mage::getModel('catalog/category')->load($_category->getId())->getThumbnail() 

добавит несколько сотых, может быть, даже десятых доли секунды в категорию времени загрузки страницы.

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

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

Что вам нужно сделать, это, вероятно, больше вдоль этих линий:

<ul id="nav"> 
<?php foreach ($this->getStoreCategories()->addAttributeToSelect("*") as $_category): ?> 
    <?php echo $_category->getThumbnail(); ?> 
    <?php echo $this->drawItem($_category) ?> 
<?php endforeach ?> 
</ul> 

В самом деле, в идеале вы хотите переопределить функцию ->getStoreCategories() добавить подстановочные фильтр.

Я рекомендую открыть app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php и узнать, какие функции очень классной коллекции были написаны. Освоение коллекций EAV подобно обряду для разработчиков Magento. Как только вы это сделаете, вы будете остановить!

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

2

это работало для меня:

<img src="http://etienneaigner.com/shop/media/catalog/category/ 
    <?php echo Mage::getModel('catalog/category')->load($_category->getId())->getThumbnail(); ?>" 

    height="338px" width="338px" 
    alt="<?php echo $this->htmlEscape($_category->getName()) ?>" /> 
4

Там нет необходимости менять приложение/код/​​местные/Mage/Каталог/Модель/category.php

Это можно легко сделать с помощью этих линии код ... попробуйте это ... Его работы

$child= Mage::getSingleton('catalog/layer')->getCurrentCategory()->getId(); 

$imageSrc = Mage::getModel('catalog/category')->load($child)->getThumbnail(); 

$ThumbnailUrl = Mage::getBaseUrl('media').'catalog/category/'.$imageSrc; 

echo "<img src='{$ThumbnailUrl}' />"; 
1

Только что наткнулся на этот ответ. Тем не менее, в более поздних версиях magento 1.7+ нет необходимости добавлять накладные расходы к коду, вы можете добавить больше стандартных (и настраиваемых) атрибутов eav в коллекцию Category через config.xml. Если вы проверяете Mage/Каталог/и т.д./config.xml вы заметите в узле, что есть узлы:

<category> 
     <collection> 
      <attributes> 
       <name/> 
       <url_key/> 
       <is_active/> 
      </attributes> 
     </collection> 
    </category> 

Таким образом, вы можете создать модуль самостоятельно и добавить несколько атрибутов EAV:

<category> 
     <collection> 
      <attributes> 
       <thumbnail/> 
       <image/> 
      </attributes> 
     </collection> 
    </category> 

И они будут добавлены в вашу коллекцию категорий.

+0

Можете ли вы расширить свой ответ, первый набор узлов не существует в файле config.xml. Совершенно очевидно, что его нужно добавить, но где и как он ссылается один раз на месте. Хотя я уверен, что ваш ответ правильный, и я уверен, что вы знаете, как использовать его, кроме меня самого, и я уверен, что другие не делают этого. Благодарю. – Stuart

+0

Это единственный правильный ответ. Вы не должны загружать целую категорию, чтобы получить уменьшенное изображение ... –

Смежные вопросы