【问题标题】:magento - category name and image in static block?magento - 静态块中的类别名称和图像?
【发布时间】:2012-06-04 23:27:07
【问题描述】:

如何通过 magento 后端从 magento 的静态块中引用类别名称和图像?我正在运行 1.7。

【问题讨论】:

    标签: php magento


    【解决方案1】:

    我不知道有什么方法可以轻松地从静态块中引用这些值。

    相反,我建议您创建和使用一个小部件(在我看来,这是 Magento 最未被充分利用的功能之一),它将提供一种更清洁、更可扩展的方式来实现这一点——尽管它确实需要更多的前期工作 :)

    请参阅下面的代码以获取 Magento 小部件的完整(简化)示例,该小部件完全按照您对静态块的要求:

    app/etc/modules/YourCompany_Categorywidget.xml

    <config>
        <modules>
            <MyCompany_Categorywidget>
                <active>true</active>
                <codePool>community</codePool>
            </MyCompany_Categorywidget>
        </modules>
    </config>
    

    app/code/community/MyCompany/Categorywidget/etc/config.xml

    <?xml version="1.0"?>
    
    <config>
        <modules>
            <MyCompany_Categorywidget>
                <version>1.0.0</version>
            </MyCompany_Categorywidget>
        </modules>
        <global>
            <blocks>
                <categorywidget>
                    <class>MyCompany_Categorywidget_Block</class>
                </categorywidget>
            </blocks>
            <helpers>
                <categorywidget>
                    <class>MyCompany_Categorywidget_Helper</class>
                </categorywidget>
            </helpers>
        </global>
    </config>
    

    app/code/community/MyCompany/Categorywidget/etc/widget.xml

    <?xml version="1.0"?>
    
    <widgets>
        <category_widget type="categorywidget/catalog_category_widget_info" translate="name description" module="categorywidget">
            <name>Category Info Block</name>
            <description>Category Info Block showing name, image etc</description>
            <parameters>
                <block_title translate="label">
                    <required>1</required>
                    <visible>1</visible>
                    <label>Block Title</label>
                    <type>text</type>
                </block_title>
                <template>
                    <required>1</required>
                    <visible>1</visible>
                    <label>Template</label>
                    <type>select</type>
                    <value>categorywidget/info.phtml</value>
                    <values>
                        <default translate="label">
                            <value>categorywidget/info.phtml</value>
                            <label>Category Widget Info Block - Default Template</label>
                        </default>
                        <!-- Add different temmplates here for different block positions -->
                    </values>
                </template>
                <category translate="label">
                    <visible>1</visible>
                    <required>1</required>
                    <label>Category</label>
                    <type>label</type>
                    <helper_block>
                        <type>adminhtml/catalog_category_widget_chooser</type>
                        <data>
                            <button translate="open">
                                <open>Select Category...</open>
                            </button>
                        </data>
                    </helper_block>
                    <sort_order>10</sort_order>
                </category>
            </parameters>
        </category_widget>
    </widgets>
    

    app/code/community/MyCompany/Categorywidget/Helper/Data.php

    <?php
    
    class MyCompany_Categorywidget_Helper_Data extends Mage_Core_Helper_Abstract
    {}
    

    app/code/community/MyCompany/Categorywidget/Block/Catalog/Category/Widget/Info.php

    <?php
    
    class MyCompany_Categorywidget_Block_Catalog_Category_Widget_Info
        extends MyCompany_Categorywidget_Block_Catalog_Category_Info
            implements Mage_Widget_Block_Interface
    {
        protected function _prepareCategory()
        {
            $this->_validateCategory();
    
            $category = $this->_getData('category');
            if (false !== strpos($category, '/')) {
                $category = explode('/', $category);
                $this->setData('category', (int)end($category));
            }
            return parent::_prepareCategory();
        }
    }
    

    app/code/community/MyCompany/Categorywidget/Block/Catalog/Category/Info.php

    <?php
    
    class MyCompany_Categorywidget_Block_Catalog_Category_Info extends Mage_Core_Block_Template
    {
        protected $_category;
    
        protected function _beforeToHtml()
        {
            $this->_category = $this->_prepareCategory();
            return parent::_beforeToHtml();
        }
    
        protected function _prepareCategory()
        {
            $this->_validateCategory();
            return Mage::getModel('catalog/category')->load($this->_getData('category'));
        }
    
        protected function _validateCategory()
        {
            if (! $this->hasData('category')) {
                throw new Exception('Category must be set for info block');
            }
        }
    
        public function getCategoryName()
        {
            return $this->_category->getName();
        }
    
        public function getCategoryImage()
        {
            return $this->_category->getImageUrl();
        }
    }
    

    app/design/frontend/base/default/template/categorywidget/info.phtml

    <?php
        $_categoryName = $this->getCategoryName();
        $_categoryImage = $this->getCategoryImage();
     ?>
    
     <div class="categoryinfo_block block">
        <p><strong><?php echo $_categoryName ?></strong></p>
        <img src="<?php echo $_categoryImage ?>" alt="<?php echo $_categoryName  ?>" />
     </div>
    

    【讨论】:

    • 我已按照本教程进行操作 - 小部件出现在哪里?
    • 我尝试按照这些说明创建此模块。该模块已安装,但该小部件在 magento 管理中不可见。你确定它有效吗?
    【解决方案2】:

    我希望图片也可以链接到该类别,所以我添加了...

    app/code/community/MyCompany/Categorywidget/Block/Catalog/Category/Info.php

    public function getCategoryUrl()
    {
        return $this->_category->getUrl();
    }
    

    app/design/frontend/base/default/template/categorywidget/info.phtml

    <?php
    $_categoryName = $this->getCategoryName();
    $_categoryImage = $this->getCategoryImage();
    $_categoryUrl = $this->getCategoryUrl();
    ?>
    
    <div class="categoryinfo_block block">
        <p><strong><?php echo $_categoryName ?></strong></p>    
        <a href="<?php echo $_categoryUrl ?>" title="<?php echo $_categoryName ?>" alt="<?php echo $_categoryName ?>">
            <img src="<?php echo $_categoryImage ?>" alt="<?php echo $_categoryName  ?>" />
        </a>
    </div>
    

    如果这对其他人有帮助?

    【讨论】:

    • 如何获得我正在使用的类别的简短描述 1.9
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多