Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 操纵CodeIgniter解析的文本_Php_Codeigniter - Fatal编程技术网

Php 操纵CodeIgniter解析的文本

Php 操纵CodeIgniter解析的文本,php,codeigniter,Php,Codeigniter,我正在使用CodeIgniter中的模板解析器类为视图(MVC)提供一个设计师友好的外观。我有一系列的文章,我想显示,但在头版上,我只希望一篇文章的一部分显示(前200个字符),后面是一个。。。“阅读更多”链接 它正在输出帖子,但似乎忽略了PHP substr()函数,因为文本是全文 在模型类中: function __construct() { parent::__construct(); $this->load->library('parser'); $

我正在使用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>

{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发送大量数据,而是发送最小数量的数据。