我正在使用带有codeigniter后端的HTML5样板。我实际上是codeigniter的新手。 我创建了一个名为home.php的控制器,它定义了索引中的html5视图,并有一些其他的方法/操作,称为页面和目录。
编辑更新了问题,因为它不太清楚 / EDIT
我可以从codeigniter加载我的数据。我有一个从控制器调用这些数据的URL:/index.php/home/page/xxx(其中xxx是我每页的内容)。在我的/index.php/home/index控制器中是我加载的主要(也是唯一的)模板视图。当用户点击菜单(这是唯一的静态块)时,我会做以下事情:
现在问题是当我从/index.php/home/index
执行此操作时如果我是从页面网址(例如:/index.php/home/page/100)执行此操作,则正确仅呈现内容(因为这是控制器所做的) 。我想做什么 是当用户点击该网址时(例如他从谷歌发现它),过程将是:
所以我的问题是从另一个可以用来获取数据的url触发渲染和加载。我试图这样做是因为我不想在页面上重新加载,如果是这种情况,那么我会为我所拥有的每种页面类型制作一个静态的视图。
下面提到的一种方法是使用SESSION来检查视图是否已加载,以便我重新加载它。是否有更多的codeigniter-y方式来做到这一点?
答案 0 :(得分:0)
这是加载视图部分的一个小例子。
首先创建你的主页并加载它,你似乎已经拍了下来。
在主视图中,在jQuery中使用如下内容:
$("#eleID").load(
'<?= site_url('yourController/yourLoadFunc'); ?>', // url to your load function in controller
function(responseText, textStatus, XMLHttpReques) { // function to execute when load is complete
// responseText is your view, OR json data if not a view recieved
// however, for loading a view partial, you don't need the json data here
// as you know, you can insert data in a view via the CI load view call
// so simply make an html page of what you want your sub-view to be
// complete with vars for data, and when your controller for this jQuery call
// returns the view, insert the data as normal makeing
// $this->load->view('yourSubView', $dataArray);
// the last line of the function this load call refers too
}
);
如果其中任何一个没有意义让我知道,我将尝试帮助纠正它直到它
答案 1 :(得分:0)
为了提供您要求的方法,我仍然会使用会话方法。如果未设置会话属性,请在内容块的任一侧加载外部视图元素:
//main controller index method
public function index($var1)
{
//do the stuff you need to prepare your page
//load session library if not autoloaded
$this->load->library('session');
//get the current session value
$isLoaded = $this->session->userdata('is_loaded');
//set a new session value
$this->session->userdata('is_loaded','some_value');
//display header for new users only
if($isLoaded === false) $this->load->view('above_content_view');
$this->load->view('requested_content_view');
//display footer for new users only
if(isLoaded === false) $this->load->view('below_content_view');
}
仅当会话变量为false
时才会传递整个页面,如果未设置该值,则会返回CI。我认为这比仅从SEO角度提供HTML框架更可取。
答案 2 :(得分:0)
我认为最好的方法是在浏览器中使用hashchange事件。 您必须将您的网址设为
/index.php/home/#!page-100
#!
用于google ajax抓取工具将其视为不同的网页。
并且您需要在页面加载时触发hashchange事件。
这样当任何人从任何地方点击你的URL时,将执行来自家庭控制器的索引方法。 在页面加载时,您使用JS检查是否有任何哈希更改。并且您对主控制器的页面方法发出AJAX请求以获取指定散列的内容。
你可以在这里找到这个插件 http://benalman.com/projects/jquery-hashchange-plugin/
插件本身会进入浏览器历史记录。