B-r*_*rad 2 php templates twig
建立:
问题:
我的数据库中有10,000篇文章.我需要一种方法只允许在页面上显示X个故事.我知道我可以在调用模板之前限制控制器中的数字,但根据使用的模板,该数字会有所不同.我将有一个控制器来处理所有文章.我需要一种方法将数字从模板传递到控制器以限制数组.我不想删除所有10,000篇文章然后使用twig"slice"filter/func.
我知道在django你可以使用下面的.这只会加载前3个故事.
{% get_latest_stories 3 sports as story_list %}
{% for story in story_list %}
{{ story.title }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
这是我目前的文件.
调节器
<?php
$stories = news_stories::getStories("sports",5); //getStories(section,limit);
?>
<?=$twig->render("storyList.html", array('stories' => $stories))?>
Run Code Online (Sandbox Code Playgroud)
查看/模板
{% for story in story_list %}
{{ story.title }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
摘要
我想要一种方法将一个数字从模板传递给控制器,这样我就可以限制从DB返回的行数
从逻辑上讲,视图不可能将某些内容传递给控制器,因为视图正在堆栈末尾处理,而在其他所有内容之后.
但是,您可以将一个函数传递给视图.您可能希望创建一些getViewStories可以从twig模板访问的功能.由于您已在控制器中使用此功能:
<?php
$stories = news_stories::getStories("sports",5); //getStories(section,limit);
?>
<?=$twig->render("storyList.html", array('stories' => $stories))?>
Run Code Online (Sandbox Code Playgroud)
您需要做的就是改变一下,如下所示:
<?php
$function = new Twig_SimpleFunction('getViewStories', function (section, limit) {
return news_stories::getStories(section,limit);
});
$twig->addFunction($function);
?>
<?=$twig->render("storyList.html")?>
Run Code Online (Sandbox Code Playgroud)
现在,从模板内部,您可以调用此函数,如下所示:
{% set story_list = getViewStories('sports',5) %}
{% for story in story_list %}
{{ story.title }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
并更改getViewStories每个模板中的参数.
虽然您可以使用切片过滤器,但我会建议您使用它,因为它会导致不必要的长数据库调用.这是最优化的方法(我知道).
| 归档时间: |
|
| 查看次数: |
7089 次 |
| 最近记录: |