为什么magento使用xml文件进行主题化?

时间:2011-12-23 23:35:49

标签: php xml magento

我是Magento的新手并正在研究其文档。如果我听起来有点反对,请原谅我,但我心胸开阔。我不明白为什么Magento使用XML进行主题化。它背后的原因是什么?

我正在运行SVN repo中的最新版本1.6并关注this site

我读到我需要创建local.xml来声明进出主题的内容。在我完成基本结构后,通过后端添加了我的主题目录。我使用一些xml元素删除了前端的元素

示例:

<remove name="right.poll"/>
<remove name="right.permanent.callout"/>
<remove name="left.permanent.callout"/>
<remove name="paypal.partner.right.logo"/>

主页不会改变......为什么会这样?还有其他需要修改的位置吗?
我发现我只需禁用dev的所有缓存。
(对于那些不知道它的人(管理页面) - &gt;系统 - &gt;缓存管理 - &gt;选择全部并禁用)

我也不明白为什么CSS / JS / media目录与模板目录完全分开。他们为什么会这样做是没有意义的。我不明白的另一件事是为什么有一百万个目录(讽刺)我需要进行修改。我假设他们正在使用某种MVC模型,但它是迄今为止我从未见过的。如果他们试图用所有这些目录制作漂亮的URL,我很确定他们已经听说过htaccess。 (再次请原谅我,如果我听起来无知,但我是新人)。

PS。,我查看了phtml文件,其中大多数看起来像是刚刚调用这些XML元素,是否可以使用普通的旧HTML和PHP来创建主题?或者我被迫使用他们的XML方法?

编辑:app / design / frontend中的主题文件夹有两个文件夹base和default,我认为这些都是接口,例如我想要使用的一组主题。我将design_change db表从default / default修改为base / default(也在admin页面上完成,但我更喜欢db)。我看到呈现了一个不同的页面。所以我想我可以拿出基础文件夹因为它的额外混乱。当我这样做时,该网站破了。所以看起来magento已将两个主题目录绑定到此应用程序中。就好像他们和我们一样困惑。我是对的吗?

请让我知道你的意见。

感谢。

ps:我发现magento来自zend框架。

2 个答案:

答案 0 :(得分:40)

你的答案反过来:

  

&#34;我不明白为什么Magento使用XML进行主题化。&#34;

在许多MVC系统中,确定视图中可用的内容和数据意味着处理(创建和定制)控制器操作。布局XML使得前端开发人员能够在不必重写动作控制器类的情况下,将视图元素及其数据(&#34;块&#34;在Magento中)添加和删除到不同的路径。

  

&#34;我读到我需要创建local.xml来声明进出主题的内容。&#34;

不一定。如果您没有布局XML的自定义,则您不需要local.xml文件。此外,如果您只对主页进行布局XML自定义,则可以通过CMS管理员将布局更新XML添加到页面数据中。

  

&#34; [W] hy [是] CSS / JS / media目录与模板目录完全分开[?]&#34;

这只是一个安全功能。 ./skin下的所有文件都可以通过浏览器直接访问,./app 下的所有文件都无法通过浏览器访问,包括./app/design下的主题相关文件。这是一个符合逻辑的开发人员策略吗?完全没有,Magento正在Magento 2中解决这个问题,which is available on github

  

&#34; [为什么有]一百万个目录(讽刺)我需要进行修改[?]我假设他们正在使用某种MVC模型,但它到目前为止我没有任何东西。看出&#34;

Magento确实是一个MVC框架,并且是一个强大的框架。正如您所注意到的那样,它非常独特,特别是在PHP框架领域。

  • 模型是app/code/[codePool]/Namespace/ModuleName/下的PHP类。按照惯例,它们位于Model目录下。它们有三种一般的风格:通常直接位于Model/目录下的数据模型,以及资源模型和资源模型。资源集合,通常位于Magento 1.6的Model/Resource下。
  • 视图是通常位于app/code/[codePool]/Namespace/ModuleName/Block/下的PHP类。它们可能会也可能不会与模板文件一起呈现(.phtml)。与许多MVC框架不同,Magento中的Views经常加载自己的数据而不依赖于路由/操作。
  • 控制器是PHP类,可在app / code / [codePool] / Namespace / ModuleName / controllers /`下找到。
  

&#34;如果他们试图用所有这些目录创建漂亮的URL,我很确定他们已经听说过htaccess。&#34;

完全没有。将URL连接到动作控制器的唯一方法是配置(对于Mage命名空间之外的所有MVC类都是如此)。 SEF URL可以通过多种方式配置以及可以在core_url_rewrite表中找到的数据库重写来实现。 Magento仅使用.htaccess文件作为将适当请求路由到系统入口点index.php的方法。

  

&#34;我查看了phtml文件,其中大多数看起来就像是调用这些XML元素,是否可以使用普通的旧HTML和PHP来创建主题?或者我被迫使用他们的XML方法?&#34;

模板很愚蠢。如果没有呈现它们的View类,它们毫无意义 - 字面上included()。可用的方法和数据来自(通常)布局配置的View类。有关视图配置的示例,请参阅 app/design/frontend/base/default/layout/cms.xml <block type="core/template" name="page_content_heading" template="cms/content_heading.phtml"/>行使用前端主题中的Mage_Core_Block_Template模板声明cms/content_heading.phtml的实例。

  

&#34; [T] app / design / frontend中的主题文件夹有两个文件夹base和default,我认为每个都是接口,例如我想要使用的一组主题。我修改了design_change db&#34;

你正在调查这些事情,这很好;在学习框架时,探索者的方法会很有帮助。 Magento中的主题由三个组件定义:区域(前端或adminhtml),包名称和实际主题名称。在文件系统中,这些设置会映射到两个地方,正如您所注意到的那样。它们是./app/design/AREA/PACKAGE/THEME/./skin/AREA/PACKAGE/THEME/。 Magento还有两个主题:主题资产类型和后备。

有四种主题资产类型:布局,模板,翻译和皮肤。系统用于查找给定主题资源的路径基于配置以及一些硬编码路径。主题资产的绝对回退点是 base 包的默认主题。适当的Magento配置首先要声明一个包(例如&#39; my_package&#39;在系统&gt;配置&gt;设计。没有声明主题设置,系统将只查找默认主题;这将映射到app/design/frontend/my_package/default/template/。如果你要在设计配置中声明一个&#34;模板&#34;主题(例如&#34; my_templates&#34 ;,系统首先会看到那里然后在默认主题下查看。还有一个&#34;默认&#34;配置设置,如果设置,将用于所有主题资产类型(例如&#34; my_default&#34;这一切都发生在Mage_Core_Model_Design_Package中,看起来如下;我们将使用我们的示例设置和上面的&#34; cms / content_heading.phtml&#34; param:

  1. app/design/frontend/my_package/my_templates/template/cms/content_heading.phtml(如果找到,请使用此处,不要在其他任何地方查看)
  2. app/design/frontend/my_package/my_default/template/cms/content_heading.phtml(如果找到,请使用此处,不要在其他任何地方查看)
  3. app/design/frontend/my_package/default/template/cms/content_heading.phtml(如果找到,请使用此处,不要在其他任何地方查看)
  4. app/design/frontend/base/default/template/cms/content_heading.phtml(如果在此处找不到,有人搞砸了,并且会在[{1}})系统日志中记录异常
  5. 此设计回退的使用有两个原因:允许开发人员存储主题资产(基本/默认)的故障安全位置,并允许多主题重用和DRY覆盖主题资产。

    也就是说,这不是一个理想的架构,如上所述,这在Magento 2中消失了 - 所有主题资产都将存储在各自模块的目录中。

答案 1 :(得分:3)

只有阅读才能在这里帮助你。一旦掌握了它,xml布局非常方便,只是痛苦地了解它们的工作原理。

你确实可以忽略很多xml的东西,只是把东西放在模板文件中,但正如你会从其他来源读到的那样,以这种方式工作并不总是最好的做法(虽然我&#39 ;确保每个Magento开发人员偶尔都会这样做)。

您最好的参考通常是Magento代码本身。只要你从未接触过base / default中的任何内容,你就会总是引用它的假设&#34;假设&#34;上班。

Magento绝对是瑞士军队的工具。你可以通过多种方式完成工作,每种方式都有其优点和缺点。有时将硬件编码到模板/布局中是要走的路......有时你需要使用静态块和CMS(例如,如果客户希望能够编辑某些东西)。

再一次,坚持下去......学习肯定令人沮丧,但你最终会发现细微差别并开始感觉更舒服。