组件化模板

传统来说,应用程序使用模板编程都按这样的方式: 先在PHP程序中,将需要的变量都获取到 (可能还会通过数据库获取), 然后实例化Smarty对象,调用assign()来赋值变量,并且display()。 好的,我们来看看模板上显示股票的例子吧。 我们会在程序中收集到股票的数据,然后将数据变量赋值到模板,并且显示模板。 现在,如果你可以在模板简单地获取到任意来源的股票数据,不需要担心在前端获取这些数据,不是更好吗?

你可以编写一个自定义扩展,来获取内容并且赋值到模板的变量。


Example 21.7. 组件化模板

function.loadticker.php - 文件在 [$plugins 目录_]($122.md)

  1. <?php
  2.  
  3. // setup our function for fetching stock data
  4. function fetch_ticker($symbol)
  5. {
  6. // put logic here that fetches $ticker_info
  7. // from some ticker resource
  8. return $ticker_info;
  9. }
  10.  
  11. function smarty_function_load_ticker($params, $smarty)
  12. {
  13. // call the function
  14. $ticker_info = fetch_ticker($params['symbol']);
  15.  
  16. // assign template variable
  17. $smarty->assign($params['assign'], $ticker_info);
  18. }
  19. ?>
  20.  

index.tpl

  1. {load_ticker symbol='SMARTY' assign='ticker'}
  2.  
  3. Stock Name: {$ticker.name} Stock Price: {$ticker.price}
  4.  

参见 {include_php}, {include}{php}.

原文: https://www.smarty.net/docs/zh_CN/tips.componentized.templates.tpl