操作CodeIgniter解析的文本

时间:2013-01-14 03:08:55

标签: php codeigniter

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

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

在模型类中:

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>

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

parser->parse()代码中:

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

此时我确定您已理解此问题:substr()已应用于字符串"{post}"

我可以为您的案例考虑这些选项:

  • 执行substr()控制器端,可能是解决问题的最快解决方案
  • 删除Parser图层并使用普通的'PHP代码,这很好
  • 使用第三方über重型全功能模板引擎

答案 2 :(得分:0)

尝试使用echo代替?=

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