Silverstripe按日期获取最后8个项目,并按相反顺序显示

时间:2013-10-01 21:42:18

标签: php mysql silverstripe

我是PHP和Silverstripe的初学者,所以如果问题有一个非常简单的答案我会道歉。
我正试图从演出列表中按日期获取最后8个项目,并以反向(升序)顺序显示它们。这是我的代码:

//my php function
function Tour() {
      if(!isset($_GET['start']) || !is_numeric($_GET['start']) || (int)$_GET['start'] < 1) $_GET['start'] = 0;
      $SQL_start = (int)$_GET['start'];
      $doSet = DataObject::get(
        $callerClass = "GigDetail",
        $filter = "",
        $sort = "Date ASC",
        $join = "",
        $limit = "{$SQL_start},8"
      );

      return $doSet ? $doSet : false;
    }

//my ss file
<% control Tour %>
    <p>$Place - $Date.Nice - $Address <a href="$Link">more &raquo;</a></p>
<% end_control %>

这将以相反的顺序显示它们,但是从列表的底部开始。虽然我希望按日期获得最新的8场演出并以相反的顺序显示它们。它与$ _GET ['start']有什么关系吗?

提前致谢
莫罗

2 个答案:

答案 0 :(得分:4)

如果您正在使用Silverstripe 3,您可以在控制循环中反转DataLists,如下所示:

<强> PHP

function Tour() {
    $gigSet = GigDetail::get()->sort("Date DESC")->limit(8);

    return $gigSet ? $gigSet : false;
}

<强>模板

<% loop $Tour.Reverse %>
    <p>$Place - $Date.Nice - $Address <a href="$Link">more &raquo;</a></p>
<% end_loop %>

更多信息: http://doc.silverstripe.com/framework/en/reference/templates

答案 1 :(得分:1)

使用函数定义模型:

class Gig extends DataObject {
    static $db = array(
        'SomeField' => 'Text',
        'Date' => 'Date'
     );
}

class Gig_Controller extends Controller {
        public function Tour() {
            return Gig::get()->sort('Date ASC')->limit(8);
        }
}

不要以这种方式直接使用PHP $ _GET变量,因为您将打开您的应用程序直到SQL注入攻击。在Silverstripe中,扩展控制器的类可以使用$this->getRequest()->requestVar('varName'),它将为您清理GET和POST变量。