【发布时间】:2013-10-11 08:04:22
【问题描述】:
所以,我正在尝试基于我自己的类似 MVC 的 PHP 模型构建一个网站。
假设每个视图至少包含 2 个部分:
让他们成为'template.php'和'mypage.php'(第二部分取决于具体的页面,第一部分是常见的)。
template.php 有以下代码(简化版):
<html>
<title>Sometitle</title>
<link rel='stylesheet' href='/css/gen.css' type='text/css' />
<script type='text/javascript' src='/js/gen.js'></script>
<?php echo $other_external_files; ?>
</head>
<body>
<div class="some_header_and other stuff">...</div>
<div class="workfield">
<?php include_once mypage.php; ?>
</div>
</body>
</html>
“mypage.php”(以及其他一些页面)有一些特定的 .css 和 .js 文件应该包含在内的问题。
问题是:包含这些文件的最佳选择是什么(如何以及在何处)?
以下是我的想法:
我可以在模型或控制器中定义变量
$other_external_files,但我不想这样做,因为 .css 文件通常是视图的一部分,我可以在 'mypage.php 中对其进行硬编码',只要它不需要留在<head>。我知道 .css 和 .js 文件可以动态包含在 JavaScript 中,但如果没有强烈需求,我想避免使用此解决方案。
我可以在相应的模型中定义所有这些变量。这里的问题是,从一开始我就一直在尝试根据内容构建模型(因此,我有通用模型(文件和类),例如“用户”、“Shop_items”等,不一定对应于每个视图文件(这意味着我基本上没有任何 mypage_model.php,只有 'items_model'、'users_model' 等)。在模型中定义页面的标题将迫使我添加大量模型文件。
我可以在核心 View 类中自动定义变量
$other_external_files,如下所示:
-
function __construct($action){
$this->action = $action.'.php';
$this->css_file = 'css/'.$action.'.css';
}
function generate($view_lvl, $data = null){
$other_external_files = $this->css_file;
require_once $action;
}
但是,这种方法似乎是有限的,因为可能存在这样一种情况,即我想包含几个名称完全不同的文件。
我个人现在选择的是第 3 个。, 因为它不仅允许附加 css 和 js,还可以轻松定义文档的标题和其他可能的变量......但在乘以我之前文件,如果真的是正确的方法,我想咨询一下你是有经验的程序员。
非常感谢,很抱歉提出一个很长的问题。非常感谢任何帮助!
【问题讨论】:
-
我会将文件存储在数据库中的每页基础上,并根据您所在的页面包含它们。即让 css 包含 js 包含等...并循环遍历需要包含的文件,并对每个页面执行此操作。这样每个页面可以在每个页面的基础上包含不同/多个 js 或 css。
-
那么,您建议在数据库中存储类似对 page_id=>corresponding_external_files 的内容?好吧,还有很长的路要走.. 但是如果我有内联 css/js,那么我可以简单地将它写在 view.html 文件中......在你的情况下,我开始依赖 DB 来完成这样一个基本任务。
-
哦,每次我必须启动一个新的 .css 文件时,我都应该将它添加到具有相应路径和 id 的数据库中?好像有点烦或者这是一种普遍的做法?您的方法还意味着 我必须连接到 db 并在完全静态的 html 页面上进行查询,比如带有外部 .css 的错误页面?
-
您可以在模板中将常用的 css 和 js 文件静态化,而在 db 中只保留额外的文件。如果您不喜欢这个想法,请不要这样做,只是一个建议。