我正在开发一个拥有许多静态页面的网站。所以我只为动态页面创建了控制器(这可能是错误的做法)。将所有其他静态文件保存在根文件夹中。现在我想使用base_url()函数从codeigniter的静态页面位于根文件夹。但我不确定我是否在做好的练习。所以**请给我一个解决方案来管理许多静态页面的编码器。* *
您可以创建一个名为Static_page的控制器,将所有静态页面请求发送到该控制器
静态控制器class Static_Page extends CI_Controller{
function index(){
$page = $this->uri->segment(1,'default_static_page');
if (!file_exists(APPPATH."views/{$page}.php"))
{
show_404();
}
$this->load->view($page);
}
}
将所有静态页面保存为与uri名称相同的视图,例如,如果调用http://your-site.com/about-us,视图将是about-us.php, http://your-site.com/contact,视图将是contact.php
这并不像将文件路径包含到所需的helper/库那么简单。如果我们使用URL Helper作为示例,您将注意到在文件的顶部,这一行:
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
这意味着如果没有定义BASEPATH
,您将无法访问该文件。假设在根目录中有一个静态页面,称为my_static_page.php
。您可以定义BASEPATH
并包含该文件,如下所示:
define('BASEPATH',true);
require_once 'system/helpers/url_helper.php';
这将允许您访问脚本,但这并不一定意味着所有的函数都可以工作。例如,anchor
函数可以工作,但base_url
不能。某些函数可能具有某些依赖关系,需要CodeIgniter的其他组件的功能。
通过直接访问项目根目录下的文件,您可以有效地绕过CodeIgniter的index.php
文件。该文件将确保所有必需的路径都已设置,基类已实例化,全局函数可用等。CodeIgniter的加载函数($this->load->helper('url');
)也不会在此场景中使用,它将加载/提供对CI实例的访问,您可以在base_url
函数中看到这一点:
function base_url($uri = '')
{
$CI =& get_instance();
return $CI->config->base_url($uri);
}
简而言之,要确保所有CodeIgniter的功能对根目录中的其他文件可用,需要花费相当多的时间和精力。它还否定了框架提供的许多有用特性,以及鼓励使用的MVC设计模式。我建议将静态页面加载为视图,使用控制器-您可能会发现CodeIgniter用户指南中的这个教程特别有用。