如何在Magento完成以下任务?
-
使用控制器/视图/模型方法显示"Hello World"消息 . 所以,如果我去了
http://example.com/myController
,它会显示字符串'Hello World' . 能够在我的网站模板中显示此字符串(例如,页眉,页脚等)将是一个奖励 . -
如何向该控制器(或必要时的新控制器)添加方法,该方法与模型交互,并执行查询
Select * FROM articles where id='10'
并将行(包含列id, title, content
)返回给控制器?然后使用控制器包含一个视图,该视图将显示此行 . 因此,转到http://example.com/myController/show_row
(或类似的东西)会在视图中显示该行 . (不需要花哨,只是echo $row->id;
或类似的东西会起作用 . )
关于Magento代码结构的任何其他信息也将非常有用 .
4 回答
首先,我强烈建议你买PDF/E-Book from PHP Architect . 它's US$20, but is the only straightforward 585904 resource I'已经能够找到 . 我也开始写Magento tutorials at my own website .
其次,如果你有一个选择,并且没有经验丰富的程序员(理想情况下是PHP和Java),那么 pick another cart . Magento设计精良,但它被设计成一个购物车解决方案,其他程序员可以在其上构建模块 . 它的设计并不容易被聪明的人理解,但不是程序员 .
第三,Magento MVC与Ruby on Rails,Django,CodeIgniter,CakePHP等MVC模型非常不同,基于Zend模型的's popular with PHP developers these days. I think it',整个事情非常类似于Java OOP . 你需要关注 two 控制器 . 模块/ frontName控制器,然后是MVC控制器 .
第四,Magento应用程序本身是使用与Magento相同的模块系统构建的,现有的类是 overriding . 我在这里介绍的是 creating 新功能,而不是覆盖 . 当你在那里查看代码样本时,请记住这一点 .
我将从您的第一个问题开始,向您展示如何设置控制器/路由器以响应特定的URL . 这将是一部小小说 . 我可能稍后有时间讨论与模型/模板相关的主题,但就目前而言,我没有 . 但是,我将简要地谈谈您的SQL问题 .
Magento使用EAV数据库架构 . 尽可能尝试使用系统提供的模型对象来获取所需的信息 . 我知道's all there in the SQL tables, but it'最好不要考虑使用原始SQL查询抓取数据,否则你会发疯 .
最后的免责声明 . 我已经使用Magento大约两三个星期了,所以请注意 . 这是一个练习,可以直接解决这个问题,就像帮助Stack Overflow一样 .
创建一个模块
Magento的所有添加和自定义都是通过模块完成的 . 因此,您需要做的第一件事是创建一个新模块 . 在
app/modules
中创建一个XML文件,命名如下MyCompanyName是您修改的唯一命名空间,它没有't have to be your company'的名称,但推荐的约定是我的magento .
HelloWorld
是模块的名称 .清除应用程序缓存
现在模块文件到位了,我们需要让Magento了解它(并检查我们的工作) . 在管理应用程序中
进入系统 - >缓存管理
从“所有缓存”菜单中选择“刷新”
单击“保存缓存设置”
现在,我们确保Magento了解该模块
进入系统 - >配置
单击“高级”
在"Disable modules output"设置框中,查找名为"MyCompanyName_HelloWorld"的新模块
如果您可以忍受性能下降,则可能需要在开发/学习时关闭应用程序缓存 . 没有什么比这更令人沮丧的了,忘记清除缓存并想知道为什么你的更改没有出现 .
设置目录结构
接下来,我们需要为模块设置目录结构 . 你不需要所有这些目录,但现在设置它们没有任何害处 .
并添加配置文件
在配置文件中,添加以下内容,这实际上是一个“空白”配置 .
这个配置文件过于简单化,可以让你告诉Magento你想要运行什么代码 .
设置路由器
接下来,我们需要设置模块的路由器 . 这将让系统知道我们正在处理任何形式的URL
因此,在配置文件中,添加以下部分 .
你在这里说的是“任何带有helloworld的frontName的URL ......
应该使用frontName控制器MyCompanyName_HelloWorld“ .
因此,通过上述配置,当您加载上面的helloworld页面时,您将获得一个404页面 . 那是因为我们没有为控制器创建文件 . 我们现在就这样做 .
现在尝试加载页面 . 进展!而不是404,你将获得PHP / Magento例外
因此,打开我们刚刚创建的文件,并粘贴以下代码 . 类的名称需要基于您在路由器中提供的名称 .
我们刚刚设置的是模块/ frontName控制器 . 这是默认控制器和模块的默认操作 . 如果你想添加控制器或动作,你必须记住,Magento URL的树的第一部分是不可变的,它们总是这样 -
http://example.com/magento/index.php/frontName/controllerName/actionName
所以,如果你想匹配这个网址
你必须有一个FooController,你可以这样做:
请注意,默认控制器IndexController和默认操作indexAction可以隐式但必须是显式的,如果它后面的东西 . 所以
http://example.com/magento/index.php/helloworld/foo
将匹配控制器FooController和动作indexAction而不是IndexController的动作fooAction . 如果你想拥有一个fooAction,在控制器IndexController中你必须像这样显式地调用这个控制器:http://example.com/magento/index.php/helloworld/index/foo
因为url的第二部分是并且将永远是controllerName . 此行为是Magento中捆绑的Zend Framework的继承 .您现在应该能够点击以下URL并查看echo语句的结果
所以,这应该给你一个关于Magento如何调度到控制器的基本想法 . 从这里开始,我建议在现有的Magento控制器类中查看模型和模板/布局系统的使用方法 .
在过去的一个月左右的时间里,我一直在和Magento搏斗,我还在努力解决这个问题 . 所以这就是盲人领导盲人的情况 . 文档的方式很少,论坛/维基充其量只是混乱 . 不仅如此,还有一些解决方案已经过时或远非最佳 . 我不确定你是否有一个项目或只是想弄明白,但如果你开始修改现有的功能而不是创造一些全新的东西,那可能会更容易 . 为此,我肯定会在维基中使用“推荐开发人员的文章” . 新的付款方式令人大开眼界 .
对于调试我肯定会推荐using FirePHP并在出现问题时查看您的HTML源代码 . ole echo调试方法并没有真正发挥作用 .
一般的架构是如此令人难以置信的复杂,即使我完全理解它,我也需要写一本书来掩盖它 . 我能做的最好的就是给你建议,我希望有人在我刚开始的时候给了我...
远离核心文件 . 不要修改它们,而是编写自己的模块并覆盖您需要的模块 .
Magento使用由XML组成的配置文件来决定它需要做什么 . 为了让它运行你自己的东西而不是核心功能,你需要正确的xml . 遗憾的是,没有关于如何构建XML的指南;你需要看一些例子并做一些严肃的测试 . 更复杂的是,这些文件的内容在很大程度上区分大小写 . 但是,如果掌握了这些功能,您可以覆盖基本功能的任何部分,从而构成一个功能非常强大的系统 .
Magento使用
Mage::getModel('mymodel')
,Mage::getSingleton('mysingleton')
,Mage::helper('myhelper')
等方法返回某些类的对象 . 它默认在其核心命名空间中找到它们 . 如果您希望它使用您自己的,您需要在config.xml
文件中覆盖它们 .类的名称必须与它们所在的文件夹相对应 .
Magento中的很多对象最终会扩展名为
Varien_Object
的东西 . 这是一个通用类(有点像瑞士军刀),它的目的是让你能够动态定义自己的方法/变量 . 例如,您将看到它用作一个美化数组,用于将数据从一个方法传递到另一个方法 .在开发过程中,请确保禁用缓存 . 它会让magento变得极其缓慢,但它会为你节省很多头部创伤(从敲打你的 table 上) .
你会看到
$this
被大量使用 . 它意味着一个不同的类,具体取决于您看到的文件 .get_class($this)
是你的朋友,特别是与FirePHP一起使用 .记下纸上的东西 . 很多 . 在你遇到它们1-2天之后,你将需要无数的小事实 .
Magento喜欢OO . 如果跟踪方法会带您通过5-10个不同的类,请不要感到惊讶 .
阅读设计师指南here . 它主要面向图形设计人员,但您需要它来了解模块输出的最终位置和原因 . 为此,请不要忘记在管理面板的开发人员部分打开"Template path hints" .
还有更多,但在此变成论文之前我会停在这里 .
我宁愿推荐Mage2Gen,这将帮助您生成样板,您可以专注于核心业务逻辑 . 它只是有助于加快速度 .
Magento模块是一组包含需要的块,控制器,帮助程序和模型的目录创建特定的商店功能 . 它是Magento平台中的定制单元 . 可以创建Magento模块以执行具有支持逻辑的多种功能,以影响用户体验和店面外观 . 它具有允许安装,删除或禁用它们的生命周期 . 从商家和扩展开发人员的角度来看,模块是Magento平台的核心单元 .
Declaration of Module
我们必须使用配置文件声明模块 . 由于Magento 2在模块的etc目录中搜索配置模块 . 所以现在我们将创建配置文件module.xml .
代码如下所示:
Registration of Module 必须使用Magento Component Registrar类在Magento 2系统中注册该模块 . 现在我们将在模块根目录中创建文件registration.php:
守则将如下所示:
Check Module Status 完成上述步骤后,我们将创建一个简单的模块 . 现在,我们将使用以下命令行检查模块的状态以及是启用还是禁用它:
完成整个过程后,请分享您的反馈