-1

我正在使用 CodeIgniter 中的模板解析器类为视图 (MVC) 提供设计人员友好的外观。我有一系列要显示的帖子,但在首页上,我只想显示帖子的一部分(前 200 个字符),然后是...“阅读更多”链接。

它正在输出帖子,但似乎忽略了 PHP substr() 函数,因为文本是全长的。

在模型类内部:

function __construct()
{
    parent::__construct();
    $this->load->library('parser'); 
    $this->load->model('MPosts');
}

function index() // BASE_URL
{
    $data = array("article_posts" => $this->MPosts->get_posts());
    $this->parser->parse('VPosts', $data);
}

视图内部:

<body>
{article_posts}
    <h2><a href="posts/post/{postID}">{title}</a></h2>
    <p><?=substr("{post}", 0, 200);?>...</p>
    <p><a href="posts/post/{postID}">Read More</a></p>
    <hr />
{/article_posts}
</body>
4

3 回答 3

1

由于您使用 MySQL 查询来获取文章,因此您始终SUBSTRING(article_column_name,1,200)可以只获取前 200 个字符,基本上substr()

请参阅:https ://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring

于 2013-01-14T03:33:54.650 回答
1

代码内部parser->parse()

  • CI 首先通过load->view()处理器传递您的模板,就像常规视图一样(因此它在您的模板中执行 PHP 代码),
  • 然后它通过“ {pseudovar}-replacer”传递它。

在这一点上我确定你理解了问题:substr()应用于字符串"{post}"

我可以为您的情况考虑以下选项:

  • substr()控制器端,可能是解决问题的最快解决方案
  • 删除 Parser 层并使用普通的 PHP 代码,这很好
  • 使用第三方 über 重型全功能模板引擎
于 2013-01-14T03:40:30.000 回答
0

尝试echo代替?=.

人们倾向于将代码留给load控制器构造函数中的(模型)库,其中用户定义的函数将调用对模型文件中实现的用户定义函数的调用。

于 2013-01-14T03:19:43.620 回答