操作CodeIgniter分析文本

问题描述:

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

它正在输出帖子,但似乎忽略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> 
+1

您需要为您的模型获取'index()'中文章的'substr()'。然后,只需执行'

{post} ...

' –
+0

您是否指控制器的index()?谢谢。我希望避免这种情况,但看起来我可能不得不这样做。 – Glyph

+0

你能否改变你的句子“文字全长”,因为输出实际上是“{post}”? –

由于您使用的是MySQL查询,以获取文章,你可以随时使用SUBSTRING(article_column_name,1,200)只抢到了前200个字符,基本上substr()

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

+0

有趣的方法。与传输整个数据并截断PHP端相比,您是否有任何性能方面的反馈? –

+0

工作,谢谢:)这是一种讨厌的,我不得不列出所有列,而不是典型的“选择*从...”。但绝对是目前为止最优雅的解决方案。 – Glyph

+0

Nvm :)“SELECT *,SUBSTRING(post,1,200)as post .....”只是想通了,我仍然可以使用*。多谢你们。 – Glyph

尝试echo,而不是?=

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

+0

也不起作用。我怀疑在CodeIgniter解析之前PHP正在运行。因此substr(“{post}”,0,200)只会导致“{post}”。 – Glyph

+0

就像你的想法非常有想法。凉! –

里面的parser->parse()代码:

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

在这一点上,我敢肯定,你明白的问题:substr()应用到字符串"{post}"

我能想到的这些选项对你的情况:

  • substr()控制器 - 方面,可能是解决您的问题的最快解决方案
  • 删除解析器层并使用普通ol'PHP代码,这是很好的
  • 使用第三方超重全功能模板引擎