将内容块添加到主页,删除“ std” <div>


9

我想做些事情,而且我是新手,对Magento的熟练程度非常差。我要的是执行以下操作的最佳,最简洁的方法:

  1. 我想在我的文本编辑器中而不是在管理面板“所见即所得”中编辑主页的内容(可能还有其他每个CMS页,随着我对该项目的进一步了解)。我想我只有一个模板,例如home-content.phtml包含我的轮播标记以及最终放在首页上的其他内容。在我看来,执行此操作的最合乎逻辑的方法是将我附加home-content.phtmlgetChildHtml('content')管理面板-> CMS->页面->主页->'设计'选项卡->布局更新xml中的方法,如下所示:

    <reference name="content">
                <block type="core/template" name="home-content"
                       as="home-content" template="home-content.phtml" />
    </reference>

    但是,我接下来想做的事情把它弄糟了。

  2. 在我看来,默认的Magento HTML结构令人肿,嵌套div的太多(包装器->页面-> main-container col1-layout-> main-> col-main只是为了获得页面内容) 。对于我来说,这使Sass成为一个噩梦,所有这些类的样式都分为5个不同的Sass局部。因此,我正在清理默认结构以匹配我自己的设计原则。这部分意味着删除空的元素,例如臭名昭​​著的<div class="std"> </div>。摆脱这种情况的最有效方法(因为我不打算使用管理面板来显示内容)是<remove name="cms.wrapper">在CMS Home Layout Update XML中使用的。问题是,这将删除我使用上述方法(reference name="content")添加的所有内容。

基本上:如何在没有冲突的情况下使用a将内容添加到我的主页.phtml 删除它<div class="std"> </div>?我不了解admin-> CMS->布局更新XML的功能与layout.xml的功能有何不同,或者为什么我应该在另一个之上使用(例如,我不能<cms index-index>用来做同样的事情?) 。

预先感谢大家。


就我而言,.std在不需要的地方添加列表样式。可以预见,使用Magento,这是一个漫长的过程。
rybo111

Answers:


12

让我们将您的问题分为3部分并进行审查。

1.您需要将模板文件添加到CMS页面

您在这里采用的方法肯定会起作用。那就是您需要在“设计”选项卡下的“ cms”页面内添加此代码段。

<reference name="content"><block type="core/template" name="home-content"  template="test.phtml" /></reference>

由于您的模板文件直接受到content阻止,因此您的模板内容将由magento呈现。因此,您无需在中使用as属性core/template block

2.如何避免 <div class="std"></div>

该div实际上是cms页面的包装div元素。请在此处查看此块的定义。

  <block type="page/html_wrapper" name="cms.wrapper" translate="label">
        <label>CMS Content Wrapper</label>
        <action method="setElementClass"><value>std</value></action>
        <block type="cms/page" name="cms_page"/>
  </block>

如您所见,cms.wrapperblock的类型为page/html_wrapper。该块的作用是,它将用div元素(默认元素)包装其所有子块,并自动呈现这些子块。

为了避免此阻塞,您已使用此代码

<remove name="cms.wrapper">

但是,这是完全错误的。它确实删除了包装div。但与此同时,它也删除了它的子块cms_page。这cms_page是一种类型cms/page。这意味着它引用了该块Mage_Cms_Block_Page。此块是CMS Pages 的“心脏”。因此,卸下包装纸也将CMS Page的心脏传导阻滞擦掉。这就是为什么您的cms页面上没有任何输出的原因。

那么,应该怎么做才能避免这种包装?答案很简单。cms_page从包装纸中逸出,然后安全地取出包装纸。因此,这是您需要在cms页面布局部分使用的代码。

<reference name="content"><remove name="cms.wrapper" /><block type="core/template" name="home-content"  template="test.phtml" /><block type="cms/page" name="cms_page"/></reference>

如您在布局xml代码中所见,我们首先删除包装器,并因此cms_page在我们的代码中插入了块。如您所见,我们还使用了模板块。这将首先在您的页面中呈现模板文件的内容,然后是cms页面内容。

3.管理员-> CMS->布局更新XML与layout.xml的功能有何不同

假设您希望站点中的CMS页面之一具有特殊外观。为此,您可以选择的最佳方法是通过admin-> CMS-> Layout添加布局更新。这将仅适用于CMS页面。

但是,如果您需要对所有CMS页面进行一些常规更改,那么使用会很容易layout.xml

因此,通常,应该采用哪种方法来更改布局,这完全取决于您要实现的目标。因此,您需要采用一种方法。并非所有方法。

希望能有所帮助


3

如果只有一个冒犯页面,那么IMO最好和最简单的方法是:

编辑CMS页面的"Design"标签。

引用wrapper元素,使用该setElementClass方法不应用任何类或新类。

<reference name="cms.wrapper">
<action method="setElementClass"><value>none</value></action>
</reference>

0

您应该修改布局,通常是1column.phtml,2columns.phtml等,并使它们像您想要的/需要的那样。

这些PHTML是任何布局的基本结构,并以编程方式填充XML更新。

如果您在自己的主题中保持模板和布局之间的一致性,则不会影响其他任何内容。


像什么,if this is the home page, include this code ...在所有布局页面上添加条件,然后仅getCHildHtml('content')在所有页面上删除?我想学习如何更好地使用Magento及其工具,而不仅仅是大刀阔斧地解决问题。
2014年

不可以,布局会在站点各处使用,在不同的情况下以及根据路线的不同更新。一次提出一个问题,如果您有更多疑问,请提出更多问题,但不要编辑此问题,否则可能会被关闭。
mbalparda 2014年

我不是想在这里不礼貌;感谢您抽出宝贵的时间回答我。但是,我只是认为您的回答对我没有帮助。我正在尝试删除一个元素并将一个块添加到单个CMS页面,但是我的方法不起作用-因此,我要求一个可行的方法。我知道布局和模板的一般用途,并且您的“正确使用东西并且它将起作用”无法回答我的问题。
Ezratic 2014年

您在此页面上误认为“别人做免费工作”。答案是有效的,并且可能是您正在寻找的答案。一旦您了解了Magento的工作原理,您将发现此答案是在这种情况下进行的方法。
mbalparda 2014年

:阅读这个,你需要什么,你会发现大多数的magentocommerce.com/knowledge-base/entry/...
mbalparda

0

我花了一分钟的时间来理解已接受答案中的所有指示,因此,需要背负一下,这是删除所有CMS页的包装所需要的: <div class="std"></div>

在cms.xml中,将cms_page块更改为:

<cms_page translate="label">
    <label>CMS Pages (All)</label>
    <reference name="content">
        <block type="core/template" name="page_content_heading" template="cms/content_heading.phtml"/>
        <block type="cms/page" name="cms_page"/>
    </reference>
</cms_page>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.