Php 操纵CodeIgniter解析的文本
我正在使用CodeIgniter中的模板解析器类为视图(MVC)提供一个设计师友好的外观。我有一系列的文章,我想显示,但在头版上,我只希望一篇文章的一部分显示(前200个字符),后面是一个。。。“阅读更多”链接 它正在输出帖子,但似乎忽略了PHP substr()函数,因为文本是全文 在模型类中:Php 操纵CodeIgniter解析的文本,php,codeigniter,Php,Codeigniter,我正在使用CodeIgniter中的模板解析器类为视图(MVC)提供一个设计师友好的外观。我有一系列的文章,我想显示,但在头版上,我只希望一篇文章的一部分显示(前200个字符),后面是一个。。。“阅读更多”链接 它正在输出帖子,但似乎忽略了PHP substr()函数,因为文本是全文 在模型类中: function __construct() { parent::__construct(); $this->load->library('parser'); $
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>
{article_posts}
{/article_posts}
尝试echo
而不是?=
人们倾向于将代码留在控制器构造函数中的
加载(模型)库中,用户定义的函数将调用在模型文件中实现的用户定义函数。因为您使用MySQL查询来获取文章,所以您始终可以使用子字符串(article\u column\u name,1200)
只抓取前200个字符,基本上substr()
请参阅:在解析器->parse()中代码:
- CI首先通过
load->view()
处理器传递模板,就像常规视图一样(因此它在模板中执行PHP代码)
- 然后它将其传递给“
{pseudovar}
-replace”
此时,我确信您理解了问题:substr()
应用于字符串“{post}”
我可以为您的案例想出以下选择:
- 执行
substr()
控制器端,这可能是解决问题的最快解决方案
- 删除解析器层并使用普通的ol'PHP代码,这非常好
- 使用第三方强大的全功能模板引擎
您需要在您的模型的索引()中获取文章的substr()
。然后只需执行{post}…
您是指控制器的索引()吗?谢谢我本想避免这种情况,但看起来我可能不得不这样做。你能不能把你的句子改成“文本是全文的”,因为输出实际上是“{post}”?也不行。我怀疑PHP是在CodeIgniter解析之前运行的。因此substr(“{post}”,0200)只会产生“{post}”。就像你的想法一样,这是非常深思熟虑的。酷!有趣的方法。与传输整个数据并在PHP端截断数据相比,您是否有任何性能方面的反馈?很好,谢谢:)我不得不列出所有列,而不是典型的“选择*自…”,这有点烦人。但绝对是迄今为止最优雅的解决方案。Nvm:)“选择*,子字符串(post,1200)作为post…”刚刚发现我仍然可以使用*。谢谢大家。使用MySQL应该会更快,因为数据在传递到PHP之前会被截断。因此,它不必向PHP发送大量数据,而是发送最小数量的数据。