我正在尝试为我的网站写一个插件,在Ushahidi地图平台上运行。
Ushahidi使用Kohana。我使用的版本是Kohana 2。
网站上的大部分页面被称为报告页面。下面是一个例子:
https://trashswag.com/reports/view/1106这个页面从数据库中提取了大量数据。例如,报告标题"Coffee Table"被填充,并且必须从数据库中完成。
我的目标是为每个报表页面添加一个元描述标签:
<meta name="description" content=[report_title]."at".[report_location] />
我要查找的所有数据都存在于表MyDatabase.incident
第一步是report_title。每个报表页面都应该动态地从数据库中提取自己的报表标题,并将其添加到元描述标签中。
生成每个报表页面html的视图称为detail.php。php必须已经拉入报告标题,因为它出现在页面上(参见上面的示例网站链接)。我在detail.php中滚动查找位置以及平台是如何做到这一点的。我在第17行找到了这个:
<h1 class="report-title"><?php echo html::escape($incident_title);
这里是一个要点的细节。php: https://gist.github.com/anonymous/a2cbf012c7abcfee694e
上面的代码片段必须将显示在页面顶部附近的现有报告标题添加到主导航下方的左侧。
我想抓取相同的内容-"咖啡桌",并将其添加到我的元标签。我正在通过我试图构建的插件来做到这一点。该插件是通过钩子添加的,如果我尝试简单地回显$incident_title
,它没有定义,因为,据推测,它在不同的脚本中。
我无法看到或理解在Kohana2上运行的Ushahidi平台是如何设置这个变量的。
在试验和错误中,我设法得到以下代码片段来提取数据库中第一个报告的报告标题:
$incititle = ORM::factory('incident',1)->incident_title;
我需要改变的是数字1。例如,我上面提供的链接应该填充:
$incititle = ORM::factory('incident',1106)->incident_title;
我如何编辑这段代码,以便它动态地为每个报告页面添加事件id:
$incititle = ORM::factory('incident',[What goes here?])->incident_title;
Kohana 2太旧了,所以我找不到doc,但你需要从请求中获取参数id
。对于Ko3,它是:
// Can be used anywhere:
$id = Request::instance()->param('id');
// From within a controller:
$this->request->param('key_name');
Id应该是数字形式https://trashswag.com/reports/view/1106。通常是id
,但有时开发人员会更改此变量的名称……查看路由规则
所以在你的插件中,你应该首先检索适当的记录,然后给View赋值。最快的(虽然不是最安全的)方法是赋值global。
$incident = ORM::factory('incident',Request::instance()->param('id'));
View:set_global('incident_title',$incident->incident_title);
View:set_global('report_title',$incident->report_title);
View:set_global('report_location',$incident->report_location);
//Uou have meta in `incident_meta` column?
//View:set_global('incident_meta',$incident->incident_meta);
现在你可以使用$report_location等等…视图中的变量
如果你在incident
表中没有report_location
等列-你需要从右表中获取这些值。显示结构…