2012-11-12 150 views
0

我最近将我的拼写/解析PHP代码移动到Codeigniter。它使用卷曲SimpleHtmlDom类来检索从稍后由模型功能的若干其他库处理对象的URL数据。Codeigniter:加载视图逐步

多次要求外部站点和API所以原来的PHP脚本了长达20秒加载完整的页面,但是OK因为PHP被分成若干块,而进程降低运行页面已经呈现HTML,用户可以读取HTML,而其余数据正在处理和显示。

切换到Codeigniter的问题是直到完全执行Controller脚本时,才会呈现HTML,即使数据进程被拆分为块并由单独的视图加载。

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class HomePage extends CI_Controller { 

public function index() 
{ 
    $this->load->library('simple_html_dom'); 
    $this->load->library('library1'); 
    $this->load->library('library2'); 
    $this->load->library('library3'); 

    $this->load->model('HomePage_model'); 
    $this->load->view('templates/header'); 

    $targeturl = 'http://www.example.com'; 

     $variable1 = library1::method1($targeturl); 
     $variable2 = $this->HomePage_model->method2($targeturl); 
     $data1 = array('variable1' => $variable1, 'variable2' => $variable2); 

    $this->load->view('first_set_of_data', $data1); 

     $variable3 = library2::method2($targeturl); 
     $variable4 = $this->HomePage_model->method3($targeturl); 
     $data2 = array('variable3' => $variable3, 'variable4' => $variable4); 

    $this->load->view('second_set_of_data', $data2); 

     $curlinfo = $this->HomePage_model->cURLmethod($targeturl); 
     $data3 = array('curlinfo' => $curlinfo); 

    $this->load->view('third_set_of_data', $data3); 

    $this->load->view('sidebar'); 
    $this->load->view('templates/footer'); 
    } 
} 

/* End of file homepage.php */ 
/* Location: ./application/controllers/homepage.php */ 

我并不想因此它的运行速度更快,优化我的代码,它已经多次修订......我想要做的就是负载意见逐步对应于每个数据视图已准备就绪,而其他视图的数据正在处理中。

+3

在codeigniter或任何框架中执行此操作的最佳方法是使用** ajax **方法在加载页面后加载额外的数据。 – amd

+0

感谢@Ahmad的帮助。我是新来的Ajax,你可以发展它如何实现或链接到一篇文章,我可以开始学习? – emman

回答

1

听起来像一个不合理的解决方案的问题。我想你会被迫砍掉所有视图,以便在另一个视图内不会调用视图,并根据请求加载每个相关的视图。

所以不是views/index.php有:

<html> 
<body> 
<? $this->load->view('content') ?> 
</body> 
</html> 

你必须view/index_start.php

<html> 
<body> 

view/index_end.php

</body> 
</html> 

他们之间,加载每个请求后独立意见。从控制器加载所有视图。再次,这个设计是而不是推荐。

echo $this->load->view('file', array(), TRUE) 
+0

感谢您的帮助,罗宾。然而,这正是我已经尝试过的......控制器当前在中间加载了视图('模板/页眉')和视图('模板/页脚')并且仍然不会逐渐显示它们。 – emman

+1

你确定你正在加载它们吗?如果您在2个视图之间拨打沉重的电话,会发生什么情况?也可以尝试运行'echo $ this-> load-> view('file',array(),TRUE)'。它可能会解决它。 –

+0

谢谢! echo'$ this-> load-> view('file',array(),TRUE)'解决了这个问题。无论如何,我会尝试实现像@Ahmad建议的ajax解决方案。 – emman