我正在开发一个包含许多静态页面的网站。所以我只为动态页面创建了控制器(这可能是错误的做法)。将所有其他静态文件保存在根文件夹中。现在我想将 codeigniter 中的 base_url() 函数用于位于根文件夹中的静态页面。但我不确定我是否做得很好。所以**请给我一个解决方案来管理codeigniter中的许多静态页面。**
2 回答
您可以创建一个名为 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
它并不像只包含您想要的帮助程序/库的文件路径那么简单。如果我们使用 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 用户指南中的本教程特别有用。