Magento 页面解析
Magento 页面解析
Magento 页面解析
1:首页: 2栏右
2: list 页面 : 3栏
3:detail 页面: 2栏右
4: shopping 页面: 2栏右
5: checkout yemian :2栏右
6: 登录 注册页面: 1栏
7: search 页面 : 3栏
8: account 登录之后页面 : 2栏 左
默认是有 5个block :上面一个header
中间3个 left content right
下面一个 footer
Layout文件一般包含block、reference、action三种标签。
对于Magento系统,首先会将系统中相关相关的layout合并,合并一般是包括app\design\frontend\base \default\layout目录下的xml文件,【合并读取】
以及指定的模板下面的对应的layout文件。最终普通网页合并之后的从default下 output=”toHtml”进行最终的输出,那么解析的block或其他元素也是从该节点进行解析
1.顶层的block一般位于page.xml中,如下所示。Output表示通过toHtml进行输出。默认使用3columns.phtml三列布局。Type对应Mage_Page_Block_Html类。
<block type=”page/html” name=”root” output=”toHtml” template=”page/3columns.phtml”>
2.在顶层的block中,一般包含以下几个关键部分,分别是Html头部、网页头部、内容左部中部右部、网页底部这么几个基本结构布局。
<block type=”page/html_head” name=”head” as=”head”> Html头部:Html头部主要包括增加默认的js和css相关文件。
<block type=”page/html_header” name=”header” as=”header”> 页面头部:主要包括一些头部链接、语言切换等
<block type=”page/html_breadcrumbs” name=”breadcrumbs” as=”breadcrumbs”/>
<block type=”core/text_list” name=”left” as=”left” translate=”label”> 左右部侧栏,一般有product_compare_sidebar、catalog.leftnav、catalog.product.related等侧边栏,具体需要看对应页面的所对应的侧边栏。
<block type=”core/text_list” name=”content” as=”content” translate=”label”> content内容一般在具体页面中进行指定,不同模块的内容肯定是不同的,在page.xml文件中只是定义了一个as。
<block type=”core/text_list” name=”right” as=”right” translate=”label”>
<block type=”page/html_footer” name=”footer” as=”footer” template=”page/html/footer.phtml”> footer包括了切换store、常见链接等
3.每个模块一般情况下都会有对应的模块xml文件,如目录布局文件为catalog.xml文件,支付为checkout.xml。不过对于magento系统来说,最终还是合并读取的。
4.如果是目录模块被调用,在catalog.xml中,首先会将default节点中所有元素进行加载和解析,然后根据对应产品模块具体页面加载 对应的节点,如分类文件默认采用catalog_category_default节点下的元素更新,
如果分类设置为Is Anchor,则采用catalog_category_layered节点下的元素更新。产品默认采用catalog_product_view节点下 的元素更新。
也就是说在page.xml
里面有:默认是采用page.xml 这个布局 + 对应模块的默认布局+ 具体的block的更新布局=最后的布局文件,引用之后只做更新处理。引用了不处理,那么还是原来的block,
引用都是引用的page.xml里面的这几个大的block。
header的问题:默认【这个里面有 searth / topLinks/store_language / topmenu/breadcrumbs】
Left:
Content:
Right:
Footer:
9: local.xml
布局的话:
一栏
2栏左
2栏右
3栏
1: block解析
<block type=”checkout/cart_sidebar” name=”cart_sidebar” template=”checkout/cart/sidebar.phtml” before=”-“>
<block type=”core/text_list” name=”cart_sidebar.extra_actions” as=”extra_actions” translate=”label” module=”checkout”>
<label>Shopping Cart Sidebar Extra Actions</label>
</block>
</block>
什么意思?
解析这个的时候,先找到半类名 checkout的block 对应的半类名。得到 Mage_Checkout_Block 再和 cart_sidebar 组成全类名 Mage_Checkout_Cart_Sidebar.
然后对应的template。然后 before=“-”:表明在同级之上。 排在最上面。 name需要唯一。
在解析子block的时候,如type=”core/text_list”的Block,会告诉他的父节点cart_sidebar该子节点信息,这 样,在父节点所对应的模板文件中,
才能使用getChildHtml(“cart_sidebar.extra_actions”)函数调用子节点的 html信息。
如果有as节点,表示该节点可以在其他地方被引用,也就是说可以在其他地方再次解析,比如as=’left’,则可以在其他地方用reference中进行添加相关block操作。
2: layout中是通过reference的方式来增加或替换Block, 通过remove来移除Block, 通过update来更新Block, 通过after或before来调整Block位置等等。
F ④: 根据使用的layout中的block标签中的type=”…”找到使用的Block, Page模块对应的Block是所有其他Block的“父类”, 会自动加载,
这个Block里面的方法可以被其他Block使用。
问题》如何更改 category list的左侧栏:???
<catalog_category_default translate=”label”>
<label>Catalog Category (Non-Anchor)</label>
<reference name=”root”>
<action method=”setTemplate”><template>page/2columns-left.phtml</template></action>
</reference>
<reference name=”left”>
<!– <block type=”catalog/navigation” name=”catalog.leftnav” after=”currency” template=”catalog/navigation/left.phtml”/>–>
<block type=”catalog/navigation” before=”-” name=”catalog.vertnav” template=”catalog/navigation/vert_nav.phtml”/>
</reference>
这样就可以 不加载默认的left block,反而加载一个自定义的block。
问题: 首页布局更新???
譬如首页可以在cms.xml的cms_index_index标签中设置,
问题3: 2.编辑左右栏的内容,中间栏的内容
magento左右栏怎么添加block?这个是大多数magento模板初学者会遇到的问题,答案就是,在xml添加。在xml中声明添加到左栏还是右栏,添加使用哪个.phtml文件。
问题4:
3.添加css js文件
xml可以定义不同页面的结构,并且可以给不同的页面添加不同的css js文件。我们的phtml可以做到这点,但是远没有xml做的好。
如果你在magento的产品详细页加了一个js效果,你可以将要加载的js文件只在这个页面加载,那么我们就要到定义产品详细页的页面的xml来添加。
问题4: Remove block 用“remove”来从布局里移除一些特殊的block(products compare, products viewed and related products)
<reference name=”right”>
<remove name=”catalog.compare.sidebar” />
<remove name=”left.reports.product.viewed” />
<remove name=”catalog.product.related” />
</reference>
问题5: 添加js css
<reference name=”head”>
<action method=”addItem”><type>skin_js</type>
<name>js/stereotabs.js</name></action>
<action method=”addItem”><type>skin_js</type>
<name>js/shadowbox/shadowbox.js</name></action>
</reference>
问题6: 用“unsetChild”来从布局里移除一些特殊的block(products compare, products viewed and related products)
<reference name=”left”>
<!– Removed the Newsletter from the left sidebar –>
<action method=”unsetChild”><name>left.newsletter</name></action>
<action method=”unsetChild”><name>tags_popular</name></action>
</reference>
问题7: 一切布局尽在 local.xml中来处理。
问题8: magento 调试
在php里做调试的时候我们经常用exit来中断流程,Magento也是一样,但有些后台运行的代码是没办法用exit中断后输出信息到浏览器的,
比如监听事件的方法运行的时候,又比如api接口被调用的时候,这是可以用写日志文件的方式来记录一些特定内容来做调试,Magento自带了一个写日志的静态方法:Mage::log()。
Mage::log(‘$Message’);
可以把你想要记录的信息写进系统自带的system.log文件里,当然你也可以自己新建一个文件来写记录,代码如下
Mage::log($loginfo, null, “test.log”);
http://blog.csdn.net/shuishui8310/article/details/5570926 这个网页也经常看看吧–magento技术
问题8: magento的促销,价格战。
买2送一: Buy X get Y free : 注意设置: 就是 你必须至少 买X+Y 个,才能起作用。而且不是在cart里面,是subtotal-discount,这里显示的。
疑问1:magento的Mgt-commerce 的在admin的 menu 为什么无法去掉?
疑问2: 为什么module装完之后,总是在配置的时候 出现404 错误呢?
疑问3: 价格如何可以自定呢? 就是说购买的东西是按照 每块/ 或者per feet ,如何价格根据前台的js变化而变化。——-或者如何更改价格在前台。
疑问4: 配置的产品和 简单产品如何可以自由转换? 已经解决,需要明白原理,并写上注释。
疑问5: 关于产品的图片 颜色问题—color switch 的处理方案,需要注释。
很多的module都是需要注释的。注释的时候可以明白。
http://yanfeili.wordpress.com/2013/08/26/magento-%E9%A1%B5%E9%9D%A2%E8%A7%A3%E6%9E%90/