在主页Magento2中显示带图像的类别

时间:2016-02-06 08:57:25

标签: magento2

在主页Magento2中显示带图像的类别

http://ibnab.com/en/blog/magento-2/magento-2-frontend-how-to-call-category-collection-on-home-page

这篇文章工作正常,但我需要显示类别图像。如何获取类别图像

我正在使用$ category-> getImageUrl();

但它不起作用

2 个答案:

答案 0 :(得分:3)

通过结合教程和R T的答案,我能够在主页上显示。因为我在该页面上没有_objectManager(当我尝试使用R T代码时页面出错了),我在块文件中包含了类别模型(Collection.php)

protected $_categoryHelper;
protected $categoryFlatConfig;
protected $topMenu;
protected $categoryView;

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Catalog\Helper\Category $categoryHelper,
    \Magento\Catalog\Model\Indexer\Category\Flat\State $categoryFlatState,
    \Magento\Theme\Block\Html\Topmenu $topMenu,
    \Magento\Catalog\Model\Category $categoryView
) {

    $this->_categoryHelper = $categoryHelper;
    $this->categoryFlatConfig = $categoryFlatState;
    $this->topMenu = $topMenu;
    $this->categoryView = $categoryView;
    parent::__construct($context);
}

然后我添加了一个方法来调用块文件底部的phtml。

    public function getCategoryView() {
    return $this->categoryView;
}

在phtml(storecategories.phtml)中,我将代码改为像这样工作。

<?php
$categories = $this->getStoreCategories(true,false,true);
$categoryHelper = $this->getCategoryHelper();
?>
<ul>
<?php
    foreach($categories as $category):
        if (!$category->getIsActive()) {
            continue;
        }
?>
    <li><a href="<?php echo $categoryHelper->getCategoryUrl($category) ?>">
<?php
    $catId = $category->getId();
    $categoryAgain = $this->getCategoryView()->load($catId);
    $_outputhelper = $this->helper('Magento\Catalog\Helper\Output');
    $_imgHtml   = '';
    if ($_imgUrl = $categoryAgain->getImageUrl()) {
        $_imgHtml = '<img src="' . $_imgUrl . '" />';
        $_imgHtml = $_outputhelper->categoryAttribute($categoryAgain, $_imgHtml, 'image');
        /* @escapeNotVerified */ 
        echo $_imgHtml;
    }
?>
    <?php echo $category->getName() ?></a></li>
    <?php endforeach; ?>
</ul>

然后我将新调用添加到di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<type name="Ibnab\CategoriesSide\Block\CategorisCollection">
    <arguments>
        <argument name="deleteorderAction" xsi:type="array">
            <item name="context" xsi:type="string">\Magento\Framework\View\Element\Template\Context</item>
            <item name="helper" xsi:type="string">\Magento\Catalog\Helper\Category</item>
            <item name="flatstate" xsi:type="string">\Magento\Catalog\Model\Indexer\Category\Flat\State</item>
            <item name="menu" xsi:type="string">\Magento\Theme\Block\Html\Topmenu</item>
            <item name="categoryview" xsi:type="string">\Magento\Catalog\Model\Category</item>
        </argument>
    </arguments>
</type>

答案 1 :(得分:1)

我设法在模板中执行以下操作:

    $category = $this->_objectManager->create('Magento\Catalog\Model\Category')->load($item->getId());
    $_outputhelper    = $this->helper('Magento\Catalog\Helper\Output');

    $_imgHtml   = '';
    if ($_imgUrl = $category->getImageUrl()) {

       $_imgHtml = '<img src="' . $_imgUrl . '" />';
    $_imgHtml = $_outputhelper->categoryAttribute($category, $_imgHtml, 'image');
    /* @escapeNotVerified */ 
    echo $_imgHtml;
}

希望有所帮助