从头开始创建magento组件

时间:2010-08-19 21:30:38

标签: php zend-framework magento

我正在尝试创建一个magento购物车模块,但事情并没有成功。这是我的步骤

我首先在app等中创建一个xml ...

<?xml version="1.0"?>
<config>
    <modules>
        <mywebwow_AdvancedCatalog>
            <active>true</active>
            <codePool>local</codePool>
        </mywebwow_AdvancedCatalog>
    </modules>
</config>

然后我在本地池中创建我的文件夹

/local/mywebwow/AdvancedCatalog/

在该文件夹中我放了以下文件

/Block/AdvanceCatalog.php
/controllers/indexController.php
/etc/config.xml

我在块

中添加了以下内容

AdvancedCatalog.php

<?php
class mywebwow_AdvancedCatalog_Block_Advancedcatalog extends Mage_Core_Block_Template
{
    public function _prepareLayout()
    {
        return parent::_prepareLayout();
    }

    public function getHelloworld()
    {
        return 'Hello world';
    }
}

indexController.php

<?php
class mywebwow_AdvancedCatalog_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        $this->loadLayout();
        $this->renderLayout();
    }
}

config.xml中

<?xml version="1.0"?>
<config>
    <modules>
        <mywebwow_AdvancedCatalog>
            <version>0.1.0</version>
        </myweboww_AdvancedCatalog>
    </modules>
    <frontend>
        <routers>
            <AdvancedCatalog>
                <use>standard</use>
                <args>
                    <module>mywebwow_AdvancedCatalog</module>
                    <frontName>advancedcatalog</frontName>
                </args>
            </AdvancedCatalog>
        </routers>
        <layout>
            <updates>
                <AdvancedCatalog>
                    <file>advancedcatalog.xml</file>
                </AdvancedCatalog>
            </updates>
        </layout>
    </frontend>
    <global>
        <blocks>
            <AdvancedCatalog>
                <class>mywebwow_AdvancedCatalog_Block</class>
            </AdvancedCatalog>
        </blocks>
        <helpers>
            <AdvancedCatalog>
                <class>mywebwow_AdvancedCatalog_Helper</class>
            </AdvancedCatalog>
        </helpers>
    </global>
</config>

当我输入website.com/index.php/advancedcatalog/

我得到了404.没有找到任何页面。

[编辑]

我将块类从MyWebwow_AdvancedCatalog_Block_AdvancedCatalog更改为MyWebwow_AdvancedCatalog_Block_Advancedcatalog

我添加了advancedcatalog.xml,它看起来如下......

advancedcatalog.xml

<?xml version="1.0"?>
<layout version="0.1.0">
    <advancedcatalog_index_index>
        <reference name="content">
            <block type="advancedcatalog/advancedcatalog" name="advancedcatalog" template="advancedcatalog/helloworld.phtml" />
        </reference>
    </advancedcatalog_index_index>
</layout>

然后有我已经拥有的以下内容

/template/advancedcatalog/helloworld.phtml

helloworld.phtml

<h2><?php echo $this->getHelloworld(); ?></h2>

2 个答案:

答案 0 :(得分:1)

要解决一些问题,希望有人能让你感动:

  1. 将您的控制器从indexController.php移至IndexController.php。在区分大小写的系统上,这很可能导致无法找到控制器。

  2. 您是否定义了布局文件? (例如advancedcatalog.xml)。您的文件定义advancecatalog.xml,这似乎可能是一个错字,但如果您定义该文件它可以工作。

  3. 您是否定义了任何观点? loadLayout将尝试加载页面的布局句柄并相应地渲染块。这是您必须指定advancedcatalog/advancedcatalog块的地方。如果您有布局和模板,请发布。

  4. 不要使用camelcase作为块名,它会混淆Magento。该块需要定义为advancedcatalog/advancedcatalog,但这将解析为mywebwow_AdvancedCatalog_Block_Advancedcatalog(请注意没有第二个上限)。这将是一个问题。

  5. 修复它们并查看它是否开始工作,如果您仍然遇到问题,请告诉我。

    谢谢, 乔


    除非您正在调用模型,否则不一定需要模型。至于#4,你是否想在那个上使用混合大小写由你决定。在配置文件中,您将AdvancedCatalog块的前缀指定为mywebwow_AdvancedCatalog_Block,因此混合大小写应该不是问题。但是,相反,您可能希望块内的标记是小写的,这样当您调用模型时,您可以使用现有的Magento小写惯例。这样做:

    <global>
        <blocks>
            <advancedcatalog>
                <class>mywebwow_AdvancedCatalog_Block</class>
            </advancedcatalog>
        </blocks>
    ....
    

答案 1 :(得分:0)

@ numerical25:同样清理缓存以获得所需的输出(即),转到system-&gt;缓存管理,然后刷新magento缓存..