【问题标题】:Building a CMS to For Website为网站构建 CMS
【发布时间】:2011-08-14 16:26:49
【问题描述】:

我的主站点 kansasoutlawwrestling.com 将使用 Codeigniter,然后我还为自己创建了一个 CMS,它是一个单独的实体,位于 kansasoutlawwrestling.com/kowmanager。

我的 CMS 将使用不同的 CSS、javascript 和图像文件,所以我想知道我是否应该只安装两个不同的 CI。我试着查看PyroCMS,但是文件夹太多了,我在理解它的文件结构时遇到了问题。正确的设置是什么?

【问题讨论】:

  • 处理这个问题的最佳方法可能是找出 pyroCMS 或其他现成的产品。如果您不了解 CI 应用程序的文件结构,您将如何编写?
  • 你可以有 sam CI .. 和不同的主题..check thiss -> codeigniter.com/forums/viewthread/94904
  • @ceejayoz 不是我不懂CI,只是我在其他目录中看到了很多重复的文件夹,只是觉得对我来说还不够简单而已。
  • @riky 如果是这种情况,那么我应该在哪里安装 CI?从我所看到的情况来看,它并没有澄清这种威胁。

标签: php codeigniter content-management-system


【解决方案1】:

Codeigniter 的基本结构是你的根文件夹中有 2 个文件夹和 1 个文件:

root/application/
root/system/
root/index.php

现在,显然,您可能还有更多文件和文件夹,但这些是每个 Codeigniter 应用程序运行的基础。

这些都有什么作用?首先,每个页面请求都从 index.php 开始。此页面设置了一些配置和一些常量,然后将统治权交给 Codeigniter。

“Codeigniter”位于何处?那将是 system 文件夹。您或其他任何人都不应触摸此文件夹。与您的应用相关的所有内容都存储在 application 文件夹中。这包括你所有的配置、你的控制器、你的模型、你的视图,甚至你的库扩展(尽管你可以在这个文件夹之外存储其他东西,比如 images/css/js/fonts 等)。

所以,正确的开店方式是:

root/application/
root/system/
root/index.php

root/kowmanager/application
root/kowmanager/index.php

但是,您必须通知您的 kowmanager 的 index.php system 文件夹不在同一目录中。因此,在 index.php(kowmanager 内部)中,大约在第 25 行,您应该会看到:

$system_path = "system";

只需将其更改为:

$system_path = "../system";

你就完成了。

现在您的两个应用(您的主站点和您的 CMS)将共享相同的 Codeigniter 基础。当需要更新 CI 时,您将在主 system 文件夹中执行一次...

【讨论】:

  • 惊人的反应。明白了。所以 kowmanager 不应该再是控制器,它应该是我根目录的子目录,对吗?
  • 没错。按照我向您展示的方式设置 CI 安装后,在您开始将任何自己的代码放入其中之前,2 个 application 文件夹将完全相同。它们都有一长串文件和文件夹,然后您将分别用于您的应用程序。
  • 伟大的 cmets 约瑟夫。在你的帮助下,我明白了一点。
  • 我会在几分钟后回来重新发布进度。
  • 按照 Joseph 的说法,全部重新安装并正确安装。
【解决方案2】:

我已经完成了几个 Codeigniter CMS 并采取了两条路线:

  • 集成(共享应用程序文件和资产)
  • 单独安装(仅共享系统文件,如果有)

起初我喜欢集成方法的便利性:当我需要自定义库或图标文件用于前端和后端时,无需重复即可使用。从那以后我改变了主意。

经过 4 年左右的研究,我现在的看法是,拥有集成 CMS 的好处是短暂的。

  • 90% 的代码位于后端,因此您最终会得到大量仅用于管理的帮助程序、库等。
  • 您需要调整的任何共享资源最终都可能在一方面工作得很好,但会破坏另一方面,或者过度杀伤/无用。
  • 当模型充满了仅用于后端的代码时,它们往往会变得臃肿而无法在前端使用。
  • 共享模板、js 和 css 文件几乎无法正常工作。控制面板可能不需要在 IE{insert version here} 中工作,但您的前端应该。
  • 它对任一端的更新和升级都很粗略,除非您确切知道需要更新哪些内容和不应该触及哪些内容,以及您可能在哪些地方对特定网站的前端进行了不应更改的自定义。
  • 当您的管理员和普通用户不在同一个存储桶中时,身份验证逻辑会容易得多
  • 单独安装更容易设置,并且可以“附加”到现有站点,而不必集成。

我的建议:单独安装。

【讨论】:

  • 感谢韦斯利的反馈。我决定使用单独的安装,因为它们是两个完全不同的实体,具有不同的 css/js/images 文件,什么不是。唯一将它们联系在一起的是 CMS 正在使用表单和数据库(例如内容页面、单个页面模板和其他此类内容)为主站点创建内容。
  • 发布后,我想到了单独安装更容易的几个原因,尤其是配置文件。例如,您可能希望为前端打开全局 xss 过滤(无法禁用),但在后端使用它会过滤掉您需要的内容,例如脚本标签。任何其他配置文件通常都需要“管理员”版本,因此不得不不断覆盖默认配置是一件很痛苦的事情。它真的只会导致更多的膨胀。
  • @Wesley:我一直在思考要不要在后端开启XSS。就像你说的,我们可能不需要它。然而,在未来的某个地方,我的客户可能会尝试从一些谁知道哪个服务生成一些 html,然后将其粘贴进去。他们不了解 HTML,很容易被欺骗将 XSS HTML 复制到系统中。你建议我做什么?
  • @Joeseph:在需要时在输出而不是输入上显式运行过滤器。全局过滤器对于新手来说是一种故障保护。
  • +1 我更喜欢单次安装,但两次安装肯定更容易。
【解决方案3】:

如果我是你,我可能不会走单独的应用程序路径。如果您正在共享诸如呈现页面或登录用户的代码之类的内容,那么您将在两次安装中重复它。显然,两个单独的安装只需要一个您共享的系统文件夹,因为系统没有任何变化。如果是我,我可能会在你的config/routes.php 文件中设置一个路由。

类似于以下内容(假设您的控制器文件夹中名为“kowmanager”的文件夹中有一个名为“kowmanager”的控制器):

// This would redirect all calls to kansasoutlawwrestling.com/kowmanager 
// to the kowmanager controller.  

$route['kowmanager'] = "kowmanager/kowmanager";

// Redirects all kowmanager/method requests to the kowmanager folder
// and a particular controller

$route['kowmanager/(:any)'] = "kowmanager/$1";

// Redirects all kowmanager/method requests to the kowmanager folder and a
// particular controller and method inside controller.

$route['kowmanager/(:any)/(:any)'] = "kowmanager/$1/$2";

可能不是最佳选择,但这意味着您不会重复相同的代码两次,而且您实际上已经在一个应用程序中创建了两个应用程序。还有许多其他方法可以做到这一点,包括在您的 .htaccess 文件中进行一些重写。

如果您想要更简单的选项,请进行单独安装并注意代码重复。坚持 DRY(不要重复自己)方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多