使用基于php的平台的钩子向上移动DOM

时间:2014-03-31 12:07:47

标签: php dom plugins hook kohana

我正在尝试为一个名为Ushahidi的平台构建我的第一个插件。 Ushahidi是一个基于PHP的平台,使用Kohana框架。

我在这里看到了所有可用的钩子:https://wiki.ushahidi.com/display/WIKI/Plugin+Actions

我的目标是将元标记添加到某些页面的标题中,以帮助使网站更易于搜索和共享。这些标签将根据页面内容动态显示,但现在我只想将“Hello World”放到正确的位置。

我能找到的最近的钩子带我到正确的页面,但不是正确的地方。如果您访问http://advance.trashswag.com/reports/view/1我已设法在页面上显示字符串“Hello World”。第1步完成 - 很棒。对我来说,第2步是让hello world出现在页面的标题中,所以只能使用“view page source”查看。有没有办法可以根据我的功能重新启动DOM:

<?php

class SearchShare{

    public function __construct(){
        //hook into routing
        Event::add('system.pre_controller', array($this, 'SearchShare'));
    }

    public function SearchShare(){
        // This seems to be the part that tells the platform where to place the change. Presumably this is the part I'd need to edit to step up the DOM into the head section
        Event::add('ushahidi_action.report_meta', array($this, 'AddMetaTags'));
    }

    public function AddMetaTags(){
        // just seeing if I can get any code to run
        echo '<h1 style="font-size:70px;">Hello World</h1>';
    }
}
new SearchShare;

?>

1 个答案:

答案 0 :(得分:1)

您需要使用其他事件将代码放在正确的位置。 有几个地方你可以参与:

  1. 使用ushahidi_action.header_scripts事件:

    Event::add('ushahidi_action.header_scripts', array($this, 'AddMetaTags'));

    请参阅header.php,了解其中的位置。

  2. 使用ushahidi_filter.header_block事件:

    public function SearchShare(){
      Event::add('ushahidi_filter.header_block', array($this, 'AddMetaTags'));
    }
    public function AddMetaTags(){
      $header = Event::$data;
      $header .= "Hello World";
      Event::$data = $header;
    }
    
    请参阅Themes.php了解其挂钩位置。

  3. 这些都不比其他更好/更差,所以请根据自己的喜好使用。