我需要在块文件中有条件地以编程方式添加JS文件.我试过这些代码:
if (Mage::getStoreConfig('mymodule/settings/enable')) {
$this->getLayout()->getBlock('head')->addJs('path-to-file/file1.js');
} else {
$this->getLayout()->getBlock('head')->addJs('path-to-file/file2.js');
}
Run Code Online (Sandbox Code Playgroud)
但是,无论设置是什么,都不会加载此文件.我甚至试图消除这种情况并仅显式加载一个文件,但它仍然无效.我在这做错了什么?
我有一个工作链接添加到top.links块像这样:
<block type="page/template_links" name="top.links" as="topLinks">
<action method="addLink">
<label>About Us</label>
<url helper="mymodule/getAboutUsUrl"/>
<title>About Us</title>
<prepare/>
<urlParams/>
<position>20</position>
</action>
</block>
Run Code Online (Sandbox Code Playgroud)
最终我想让getAboutUsUrl变成getExternalSiteUrl.我想要一个函数来获取参数.例如,getExternalSiteUrl('about-us')然后返回//url/about-us之类的东西.但是,我似乎找不到在Layout XML文件中发送辅助类参数的方法.我已经搜索了其他模块,并且在我搜索的Customer模块中找不到.
有人可以帮忙吗?
我正在制作模块的东西是它生成一个javascript片段,所以我不能使用一个动作只是将它挂钩到HTML的部分,因为动作需要我有一个JS文件(如果我是正确的我错误).我有什么方法可以将JavaScript代码段放入代码中?我正在考虑使用一个块,但我不确定该块后面应该添加什么,我必须考虑这将适用于所有主题.
我有一个自定义扩展,包括jQuery到布局XML,如下所示:
<reference name="head">
<action method="addJs"><script>jquery/jquery-1.8.1.min.js</script></action>
</reference>
Run Code Online (Sandbox Code Playgroud)
使用jQuery的其他扩展需要在我的模块之后加载,以便jQuery保持在最顶层.
默认情况下,Magento按字母顺序加载所有内容.有没有办法为扩展指定排序顺序?
一种方法是page.xml在我的主题中覆盖并手动将jQuery包含在头部中,或者我可以将每个自定义模块设置为依赖于我想要的模块,例如:
<depends>
<Package_JQueryLib />
</depends>
Run Code Online (Sandbox Code Playgroud)
还有其他建议吗?
编辑
我在想我也可以覆盖Mage_Page_Block_Html_Head和修改addItem()方法,以包括排序或预先添加文件到头部.
如何在主题 CSS 之前更改CSS文件的顺序以加载模块的CSS?以下是一些代码示例:
主题的local.xml中添加的主题CSS文件(加载在所有页面上):
<default>
<reference name="head">
<action method="addItem">
<type>skin_css</type>
<name>css/theme.css</name>
</action>
</reference>
</default>
Run Code Online (Sandbox Code Playgroud)
扩展的CSS文件(仅在类别页面上加载)添加在模块的XML布局文件中:
<catalog_category_layered>
<reference name="head">
<action method="addItem">
<type>skin_css</type>
<name>css/extension.css</name>
</action>
</reference>
</catalog_category_layered>
Run Code Online (Sandbox Code Playgroud)
这是我在类别页面上加载的CSS文件的顺序,扩展的CSS在主题的CSS之后加载:
- /default/mytheme/css/styles.css
- /default/mytheme/css/theme.css
- / default/mytheme/css/extension.css
我想要实现的目标:扩展的CSS在主题CSS之前加载.
如何强制这个CSS文件的顺序:
- /default/mytheme/css/styles.css
- / default/mytheme/css/extension.css
- /default/mytheme/css/theme.css
我注意到如果我安装了很多扩展,一些扩展的CSS在主题的CSS之前加载,其他一些扩展的CSS在主题的CSS之后加载.我假设它与Magento中的模块顺序有关,但我不明白如何影响前端的CSS(或JavaScript)文件的顺序.
我已按照本文将产品评论添加到产品页面的附属部分:http: //www.crearegroup-ecommerce.co.uk/blog/magento-tutorials/product-reviews-on-product-view-page .PHP
我已将以下代码添加到我的local.xml:
<catalog_product_view translate="label">
<reference name="content">
<block type="review/product_view_list" name="product.info.product_additional_data" as="product_review" template="review/product/view/list.phtml">
<block type="review/form" name="product.review.form" as="review_form"/>
</block>
</reference>
Run Code Online (Sandbox Code Playgroud)
以及view.phtml中的以下代码:
<?php echo $this->getChildHtml('product_review') ?>
Run Code Online (Sandbox Code Playgroud)
以上是在getChildHtml的其他一些调用之间添加的(在附属部分)
问题:评论和表单是否已添加到页面末尾而非附加部分?
任何帮助表示赞赏.谢谢.
我知道这个问题已被提出,但我一直无法找到对我有用的答案.我有一个我自己构建的自定义模块,它在搜索结果时也会搜索CMS静态页面.在这个模块中,我有一个更新布局xml的文件.我确信我的xml正在加载.出于某种原因,我尝试删除或取消设置分层导航并将其移动到右列没有结果.下面是我的代码,我希望有人能指出我的错误.谢谢!
<layout version = "0.1.0">
<catalog_category_default>
<reference name="left">
<action method="unsetChild"><name>catalog.leftnav</name></action>
</reference>
<reference name="right">
<action method="insert"><child>catalog.leftnav</child></action>
</reference>
</catalog_category_default>
<catalogsearch_result_index>
<reference name="content">
<block type="cmssearch/results" name="cms-search-results-view" after="search.result" template="cmssearch/cmssearchview.phtml">
</block>
</reference>
<reference name="left">
<!-- <remove name = "catalogsearch.leftnav" /> -->
<action method="unsetChild"><name>catalogsearch.leftnav</name></action>
</reference>
<reference name="right">
<!-- <block type="catalogsearch/layer" name="catalogsearch.leftnav" before="+" template="catalog/layer/view.phtml"/> -->
<action method="insert"><child>catalogsearch.leftnav</child></action>
</reference>
</catalogsearch_result_index>
<catalog_category_layered>
<reference name="left">
<action method="unsetChild"><name>catalog.leftnav</name></action>
</reference>
<reference name="right">
<action method="insert"><child>catalog.leftnav</child></action>
</reference>
</catalog_category_layered>
Run Code Online (Sandbox Code Playgroud)
我在Magento安装中使用自定义模块,它使用布局XML文件将一些Javascript文件添加到每个页面的head部分.
这工作正常,但是这些javascript文件需要在我已经在page.xml中声明的那些之后添加,但是看起来XML文件按字母顺序处理而不是分层次!
我查看了页面/ html_head块,似乎没有本地方式来设置/更改包含项目的顺序.如果不从我的模块的XML文件中删除javascript文件并将它们放在page.xml中,有没有人知道如何确保首先添加page.xml javascript?