Smarty模板条件停止工作

时间:2012-12-28 01:03:54

标签: php smarty smarty3

我有一个聪明的模板,对我来说已经有一段时间了,但是由于我不太了解我所指定的变量之一"模板是$ activity_date,当我发送时间信息和我的日期信息时,它有一些令人惊讶的效果(也就是说,它可以在" 2012-12-27"传入但是以一种古怪的方式摔倒时起作用当" 2012-12-27 00:00:00"被传入。

如果问题实际上与某种模板与此变量的交互相关,但它似乎并不存在,那么可能会更有意义。相反,最终效果是条件语句,如:

class="ajax-selector {if ($span)}span{$span}{/if} left" 

产生以下错误:

PHP Notice:  Undefined index: span in /[PATH]/templates/compiled/96681eebf17717b8605c8deffb547d7e89c1ace6.file.select2-ajax.tmpl.php on line 35

对我而言,这是非常矛盾的。代码说"测试$ span的存在"然后只有在确实存在时才采取行动。错误消息抱怨未定义的索引,这是条件测试的目的。

正如我之前所说的,所有这些类型的条件语句过去都像你期望的那样完全工作,但它们都已经开始失败,唯一的区别似乎是" activity_date"返回时间精度或日期精度。

如果它有用,请点击以下设置模板的代码:

public function handler ( $request ) {
    $response = new stdClass();
    $response->action = $request['action'];
    $response->post_type = LG_TAX_Action()->post_type($response->action); 
    $response->meta = LG_TAX_Action()->meta ( $response->action );

    $template = FE_Template::init();
    $meta = new LG_Meta();
    $template->assign ( 'form' , $response );
    if ( isset ($request['activity_date']) ) {
        $template->assign ( 'activity_date' , $request['activity_date'] );
    }
    $named_days = new stdClass();
    $named_days->today = new DateTime('today');
    $named_days->today = $named_days->today->format('Y-m-d');
    $named_days->yesterday = new DateTime('yesterday');
    $named_days->yesterday = $named_days->yesterday->format('Y-m-d');
    $template->assign ( 'named_days' , $named_days ); 
    $template->assign ( 'meta' , $meta ); // provides the "template_exists()" method

    $response->template = $template->fetch( 'activity_forms/master.tmpl' );

    return $response;
}

1 个答案:

答案 0 :(得分:0)

以下是我认为可能导致问题的原因。

根据您在上面发布的代码,$ span似乎不是在任何地方初始化/设置的。这显然会导致未定义的索引错误。但是,智能对象可能尚未设置为忽略那些未定义的错误报告。您可以通过在实例化或setOption方法期间将值为“YES”的数组键“error_reporting”传递给smarty的构造函数来轻松完成此操作。

此外,如果您使用smarty的日期格式方法生成$ span,那么根据smarty documentation,值应为

  

unix时间戳,mysql时间戳或由月份日组成的任何字符串,可由php的strtotime解析()

希望它有所帮助!