1

我正在使用 Plone 3,目前正在尝试覆盖默认的 javascript 文件之一,即 table_sorter.js。

在我的产品的浏览器目录下,我创建了一个目录“javascripts”(只是为了让事情井井有条),然后在 configure.zcml 中将该目录注册为资源:

<browser:resourceDirectory
    name="myproduct.javascripts" 
    directory="javascripts" 
    layer=".interfaces.IThemeSpecific" />

其中“myproduct”是不言自明的。然后在 jssregistry.xml 中,我注册并订购了 javascript 文件:

<javascript id="++resource++myproduct.javascripts/table_sorter.js" 
    enabled="True" 
    cookable="False" 
    inline="False" 
    insert-after="jquery.js" />

其中 table_sorter.js 是我需要覆盖的 javascript 文件的名称。

我需要覆盖该文件的原因是因为默认值无法告诉用户表是否可排序,直到单击它。默认情况下,我需要在表头上包含图标。

我已按照上述步骤操作,但似乎不起作用。我不知道我哪里出错了。任何帮助将不胜感激。

4

3 回答 3

2

您缺少通用设置导入步骤。使用以下代码将文件 skins.xml 添加到您的 gs 配置文件:

<?xml version="1.0"?>
<object name="portal_skins" allow_any="False" cookie_persistence="False">

    <object name="plonetheme_mytheme_js"
        meta_type="Filesystem Directory View"
        directory="your.product:skins/plonetheme_mytheme_js"/>

    <skin-path name="*">
        <layer name="plonetheme_mytheme_js"
            insert-after="custom"/>
    </skin-path>

</object>

之后,请记住重新安装您的产品以应用您的新 gs 步骤

注意:我给出另一个答案仅仅是因为注释中的代码不可读。查看@Martijn Pierters 对初始部分的回答(和评论)。

于 2011-11-28T10:24:20.833 回答
1

您没有覆盖原始 JavaScript 文件,只是添加了一个新文件。

你可以在这里做两件不同的事情:

  1. 从 portal_javascript 中删除原始 table_sorter.js:

    <javascript id="table_sorter.js" remove="true" />
    
  2. 因为原来的table_sorter.js文件是通过一个皮肤层来服务端的,所以你可以在自己的皮肤层中放一个新的同名文件来覆盖原来的文件。

于 2011-11-28T08:25:15.517 回答
0

考虑到您已经将自定义的 javascript 文件放入静态目录中,请执行以下操作。

在文件“your/app/profiles/default/jsregistry.xml”中

<?xml version="1.0"?>
<object name="portal_javascripts">
    <javascript id="table_sorter.js" remove="True" enabled="False" />

    <javascript cacheable="True" compression="none" cookable="True"
                enabled="True" expression=""
                id="++resource++your.app/path/to/customised/script/table_sorter.js" inline="False"/>
</object>

根据需要修改属性。:)

于 2013-12-20T10:09:36.007 回答