【问题标题】:Using ORM::factory to get from the database使用 ORM::factory 从数据库中获取
【发布时间】:2014-05-03 13:20:43
【问题描述】:

我正在尝试为我的网站编写一个在 Ushahidi 地图平台上运行的插件。

Ushahidi 使用 Kohana。我运行的版本使用的是 Kohana 2。

网站上的大部分页面都称为报告页面。这是一个例子:

https://trashswag.com/reports/view/1106

此页面从数据库中提取了大量数据。例如,报表标题“咖啡桌”已填充,并且必须从数据库中填充。

我的目标是为每个报告页面添加一个元描述标签:

<meta name="description" content=[report_title]."at".[report_location] />

我要查找的所有数据都存在于表中MyDatabase.incident

第一步是report_title。每个报告页面都应该从数据库中动态提取自己的报告标题,并将其添加到元描述标签中。

生成每个报告页面的html的视图称为detail.php。 Detail.php 必须已经拉入他的报告标题,因为它出现在页面上(参见上面的示例网站链接)。我浏览了 detail.php 以找出下落以及平台是如何做到这一点的。我在第 17 行找到了这个:

<h1 class="report-title"><?php echo html::escape($incident_title);

这里是detail.php的要点:https://gist.github.com/anonymous/a2cbf012c7abcfee694e

上面的这个 sn-p 必须将显示在页面顶部附近的现有报告标题添加到主导航下方的左侧。

我想获取相同的内容 - “咖啡桌”并将其添加到我的元标记中。我正在通过我正在尝试构建的插件来做到这一点。该插件是通过钩子添加的,如果我尝试简单地回显$incident_title,则它没有定义,因为它可能位于不同的脚本中。

我无法看到或理解在 Kohana2 上运行的 Ushahidi 平台如何设法设置此变量。

在反复试验中,我设法得到以下 sn-p 来提取数据库中第一个报告的报告标题:

$incititle = ORM::factory('incident',1)->incident_title;

我需要更改的是数字 1。例如,我上面提供的链接应该填充:

$incititle = ORM::factory('incident',1106)->incident_title;

我将如何编辑这段代码的 sn-p 以便它为每个报告页面动态添加事件 ID:

$incititle = ORM::factory('incident',[What goes here?])->incident_title;

【问题讨论】:

    标签: php orm kohana kohana-orm ushahidi


    【解决方案1】:

    Kohana 2 太旧了,所以我找不到文档,但您需要来自请求的参数 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,但有时开发人员会更改此变量的名称...在路由规则中检查它。

    所以在您的插件中,您应该首先检索适当的记录,然后为视图分配一个值。最快(虽然不是最安全)的方法是分配全局。

    $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 等 - 您需要从右表中获取这些值。显示结构...

    【讨论】:

      猜你喜欢
      • 2014-08-08
      • 2021-04-13
      • 2015-01-28
      • 2021-02-26
      • 1970-01-01
      • 2018-07-19
      • 2020-06-14
      • 2012-12-14
      • 2012-03-04
      相关资源
      最近更新 更多