Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关于创建codeigniter应用程序以服务自定义微站点的建议_Php_Templates_Design Patterns_Codeigniter - Fatal编程技术网

Php 关于创建codeigniter应用程序以服务自定义微站点的建议

Php 关于创建codeigniter应用程序以服务自定义微站点的建议,php,templates,design-patterns,codeigniter,Php,Templates,Design Patterns,Codeigniter,我正在构建一个codeigniter应用程序,它将服务于定制的微站点。基本上,每个微站点都是七个不同视图的集合,所有视图都由一个控制器的方法加载。要“主题化”每个microsite,将有不同的文件夹,其中包含这些视图文件的不同版本(及其关联的css、js和图像文件),控制器将根据每个microsite记录的数据库中存储的信息知道要加载哪个视图文件夹 这种方法的问题是当一个微型站点需要一个与所有其他微型站点不同的自定义页面时。因为它们都由一个控制器控制,所以我们遇到了一个限制,即所有的微站点都需要

我正在构建一个codeigniter应用程序,它将服务于定制的微站点。基本上,每个微站点都是七个不同视图的集合,所有视图都由一个控制器的方法加载。要“主题化”每个microsite,将有不同的文件夹,其中包含这些视图文件的不同版本(及其关联的css、js和图像文件),控制器将根据每个microsite记录的数据库中存储的信息知道要加载哪个视图文件夹

这种方法的问题是当一个微型站点需要一个与所有其他微型站点不同的自定义页面时。因为它们都由一个控制器控制,所以我们遇到了一个限制,即所有的微站点都需要支持这个页面

为了进一步解释我指的是什么,想象一下这些URL:

http://www.fakewebsite.com/index.php/microsite/index/david_site
http://www.fakewebsite.com/index.php/microsite/index/frank_site
在这两个链接中,控制器都是“微型站点”,方法是“索引” “index”知道根据其第一个参数返回哪个模板,在上面的示例中,该参数是“david_site”或“frank_site”。

您可以为该控制器设置一个默认的“主题”吗,它可以容纳大多数微站点,然后如果您需要在顶部创建自定义主题,您可以更改它吗

就这样


http://www.fakewebsite.com/microsite/david_site/
我不能说使用Codeigniter是否可以做到这一点,但我认为是这样的:

那你现在有什么问题?控制器中的代码太多了?将代码从控制器移动到模型中。这样代码就更容易重复使用,而且你可以在每个微型站点上都有小型控制器,并且可以共享fat模型

到目前为止听起来不是很好,对吧?每个站点仍然有一个控制器。好吧,让每个微站点的控制器从一个基本控制器扩展。所以所有代码仍然在一个地方,但对于某些控制器方法,它们可以在每个站点的基础上扩展基本控制器


因此,前端控制器将为每个站点提供与主题相同的正确控制器类-如果我正确理解您的问题。

根据我的理解,您询问的是如何为特定的“微站点”加载不同的视图文件,但您对所有这些站点使用相同的控制器和代码库

在视图目录中,为默认主题设置一个目录,然后为每个要自定义的“微型站点”创建另一个包含唯一文件的目录,然后在加载文件时,首先检查唯一文件是否存在

假设默认文件位于
视图的根目录中的草率示例:

// I assume we know which site we're loading
$theme = 'david_site';

// Whatever the current view's name should be
$view = 'page3';

// Path to our custom file if it exists
$custom = APPPATH.'views/'.$theme.'/'.$view;

// Does a custom view exist?
if (file_exists($custom))
{
    $view_file = $theme.'/'.$view;
}
else
{
    // Use the default
    $view_file = $view;
}
$this->load->view($view_file);
据我所知,在CI中没有什么比查看文件更有效的了,所以我们只使用了普通的老文件路径

当然,为此编写一个函数是值得的,但希望这能有所帮助。您甚至可以将其应用于加载库、模型等,甚至可以扩展Loader类以自动完成(可能是过度使用)


CI2已经有了这个功能的一个版本,虽然这个用法不是它的本意,但它基本上就是这样做的。

谢谢@Wesley Murch,基本上我正在尝试构建一个后端系统,可以创建某种类型的微型站点,并能够自定义每个站点的主题。你的问题是什么?我看到你提出的唯一问题是“我们遇到了一个限制,即所有的微站点都需要支持这个页面”,你能更清楚地解释一下你的意思吗?如果有什么事给你带来麻烦,那是什么?