2012-12-28 29 views
0

我有一個聰明的模板,一直工作適合我一段時間,但由於原因我不明白其中一個變量,我「分配」的模板是$ activity_date和當我發送時間信息與我的日期信息,它有一些令人驚訝的效果(即,「2012年12月27日」通過時,它工作,但在「2012-12-27 00:00:00」在通過Smarty模板條件停止工作

這可能使一些更有意義,如果這些問題實際上都涉及到某種與此變量模板相互作用的,但它並不顯得相反,最終的效果是,條件語句,如:。

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; 
} 
+0

我對Smarty不熟悉,但會'if(isset($ span))'或'if(!empty($ span))'工作嗎?只是在黑暗中拍攝... –

+1

是的,我曾試圖做到這一點(又名,PHP方式),但在我之前見過的Smarty示例中,總是建議按照我在代碼中的方式執行此操作。也就是說,還是值得一試,讓我們看看它是如何發展的。 – ken

+1

它確實似乎改善了這種情況。我要去睡覺,看看早晨是否變得更清晰。 – ken

回答

0

以下是我認爲可能會造成問題。

從上面發佈的代碼中,$ span看起來並不是init/set的任何地方。這顯然會導致未定義的索引錯誤。但也許smarty對象沒有被設置爲忽略那些未定義的錯誤報告。在實例化或setOption方法中,通過將值爲「YES」的數組鍵「error_reporting」傳遞給smarty的構造函數,可以輕鬆地完成此操作。

此外,如果你使用的是Smarty的日期格式方法來生成$跨度,然後根據smarty documentation,值應該是

unix timestamps, mysql timestamps or any string made up of month day year, parsable by php's strtotime()

希望它能幫助!

+0

$ span由調用模板設置,但在某些情況下,它沒有設置,這就是爲什麼我有它的條件邏輯。這就是說,儘管一個簡單的{if($ span)}用於正常工作以測試變量是否被設置,但在某些情況下似乎是有些氣質的,所以雖然我喜歡它的緊湊風格,但代碼{if(isset($ span) )}更健壯。 – ken