我对在另一个控制器/视图中包含控制器/视图感到困惑。我正在做以下事情并得到有趣的渲染问题:
//CONTROLLER About
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Pages extends CI_Controller {
public function about(){ //the standalone about page
$data['about_inner'] = $this->about_inner();
$this->load->view('pages/about',$data);
}
public function about_inner(){ //this is separate so it can be loaded by the landing page without the html shell around it
$this->load->model('about_model');
$data['about'] = $this->about_model->get_content();
$this->load->view('pages/about-inner',$data);
}
}
//view about.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<div class="container about" data-page="about">
<div class="scroll-container about">
<?=$about_inner; ?>
</div>
</div>
</body>
</html>
我得到的问题是$ about_inner最终不会在“滚动容器”内部加载 - 它会在其他所有内容之前加载和渲染,如屏幕截图所示。
在about视图中加载about_inner视图及其所有相关数据的最佳方法是什么?我需要所有内容($this->about_model->get_content())
来自about_inner,因为它也可以通过ajax由其他页面加载。
解
public function about(){ //the standalone about page
$data['nav'] = $this->load->view('templates/nav', NULL, TRUE);
$data['about_inner'] = $this->about_inner(true);
$this->load->view('pages/about',$data);
}
public function about_inner($print =false){ //this is separate so it can be loaded by the landing page without the html shell around it
$this->load->model('about_model');
$data['about'] = $this->about_model->get_content();
return $this->load->view('pages/about-inner',$data, $print);
}
//HTML
//view about:
<div class="container about" data-page="about">
<?=$nav; ?>
<div class="scroll-container about">
<?=$about_inner; ?>
</div>
</div>
答案 0 :(得分:3)
您只需告诉about_inner
函数返回数据而不打印数据。这是function view($template, $data, $return);
$this->load->view('pages/about-inner',$data, true);
如果你需要做或者,只需设置一个布尔标志作为函数的参数
function about_inner($print = false){
...
$this->load->view('pages/about-inner', $data, $print);
}
然后,当您调用该函数时,您只需将true
传递给该函数,以使其返回HTML而不是打印HTML。
$this->about_inner(true)
答案 1 :(得分:0)
如果您的JS文件夹在root中,则必须使用base_url()
函数对其进行定义。因此,请更正get_content
方法
实施例
<script src ="<?php echo base_url() ?>path/to/your/folder/aaa.js" .....
我认为您可以保留一个控制器方法并删除一个。(您可以保留about
并删除about_inner
)