集成dokuwiki和jquery

时间:2010-03-09 08:01:09

标签: javascript jquery dokuwiki

Dokuwiki us原型,我的网站使用Jquery。

如果有另一种方法来改变Dokuwiki javascript,而是在我的jQuery上使用jQuery.noConflict()或/和var $ j = jQuery?

我打开Dokuwiki上的所有.js文件,搜索“$(”并将其替换为“$ DW(”,它就像一个魅力,但我必须处理每个有javascript的Dokuwiki插件。

那么,如何在原型库/ Dokuwiki中改变“$”?

2 个答案:

答案 0 :(得分:1)

你这样做是错误的。只需在原型后包含jQuery,然后立即拨打jQuery.noConflict()。在你的代码中总是写

jQuery(..) / jQuery.[functionname](...)代替通常的$符号。

这样您就可以保持dokuwiki的所有现有javascript源和所有现有插件不变。您可以在代码中使用jQuery。

或者如果您仍然需要一个简短的句柄而不是编写jQuery,您可以为jQuery创建一个别名

<script ... include prototype ..</script>
<script ... include jquery ..</script>
<script ...>
    var jQ = jQuery.noConflict();
    //do something with prototype
    $("findme");
    jQ("div hideme").hide();
</script>

有关详情,请查看jQuery.noConflict()

答案 1 :(得分:0)

我这样做的方法是创建一个非常简单的“插件”,除了在每个页面的页眉节中包含一个额外的JS文件外,别无其他选择。

您需要做的就是在lib/plugins下添加一个新目录,其中包含一个“ plugin.info.txt”(请参见其他插件)和一个名为“ action.php”的文件(以及其他文件)您要加载的文件(在本例中为.js文件)。

该“ action.js”文件应只包含一个扩展了“ DokuWiki_Action_Plugin”并具有两个功能的类:

首先,“注册”到注册事件处理程序以输出元数据:

public function register(Doku_Event_Handler $controller) {
    $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this,
            'handle_tpl_metaheader_output');
}

第二,实际的事件处理程序是:

public function handle_tpl_metaheader_output(Doku_Event $event, $param) {
    global $ID, $conf, $INFO;
    if (page_exists($ID)) {
        $event->data["script"][] = array (
            "type" => "text/javascript",
            "src" => DOKU_BASE."lib/plugins/[YOURPLUGINNAME]/[YOURJSFILENAME].js"
        );
    }
}

就是这样。然后根据需要在JS文件中进行操作。

编辑:当然,您仍然需要使用“ jQuery()”而不是“ $()”来引用jQuery。