2

所以,我正在尝试基于我自己的类似 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 文件的问题。

问题是:包含这些文件的最佳选择是哪个(如何以及在哪里)?

以下是我的想法:

  1. 我可以在模型或控制器中定义变量$other_external_files,但并不想这样做,因为 .css 文件通常是视图的一部分,我可以在“mypage.php”中对其进行硬编码,只要它不需要留在<head>

  2. 我知道 .css 和 .js 文件可以动态包含在 JavaScript 中,但如果没有强烈需求,我想避免使用此解决方案。

  3. 我可以在相应的模型中定义所有这些变量。这里的问题是,从一开始我就一直在尝试根据内容构建模型(因此,我有通用模型(文件和类),例如“用户”、“Shop_items”等,不一定对应于每个视图文件(这意味着我基本上没有任何 mypage_model.php,只有 'items_model'、'users_model' 等)。在模型中定义页面的标题将迫使我添加大量模型文件。

  4. 我可以$other_external_files在核心 View 类中自动定义变量,如下所示:

-

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,还可以轻松定义文档的标题和其他可能的变量……但在增加我的文件之前,我想咨询有经验的程序员如果这真的是正确的方法,你就是。

非常感谢,很抱歉问了一个很长的问题。很感谢任何形式的帮助!

4

1 回答 1

3

我通常不会选择这种阵型。经验向我证明,如果我将每个视图/页面分隔为一个文件,它会更有用。对于更像模板的页面,我总是使用您的策略,当涉及到页面的不同属性(如标题)时,我会非常严格,以免混淆。例如,我从一个地方获取这些属性,例如pages.

对于 JavaScript 或 CSS 文件等资源,我将它们完全包含在每个视图中的普通页面中。我认为最好不要将它们填充到变量中$other_external_files;,而是在每个单独的视图中以不同的方式放置它们。

例如,这是我的about.php观点:

<html>
<head>
<title>About</title>
<link rel='stylesheet' href='<?php echo ABS_PATH; ?>/css/extra.css' type='text/css' />
<link rel='stylesheet' href='<?php echo ABS_PATH; ?>/css/extra2.css' type='text/css' />
<script type='text/javascript' src='<?php echo ABS_PATH; ?>/js/extra.js'></script>
</head>
<body>
</body>
</html>

这是我的contact.php观点:

<html>
<head>
<title>Contact</title>
<link rel='stylesheet' href='<?php echo ABS_PATH; ?>/css/extra3.css' type='text/css' />
<script type='text/javascript' src='<?php echo ABS_PATH; ?>/js/extra.js'></script>
<script type='text/javascript' src='<?php echo ABS_PATH; ?>/js/extra2.js'></script>
</head>
<body>
</body>
</html>

对于我非常动态的页面:

<html>
<head>
<title><?php echo $TITLE; ?></title>
<link rel='stylesheet' href='<?php echo ABS_PATH; ?>/css/extra3.css' type='text/css' />
<script type='text/javascript' src='<?php echo ABS_PATH; ?>/js/extra.js'></script>
<script type='text/javascript' src='<?php echo ABS_PATH; ?>/js/extra2.js'></script>
</head>
<body>
</body>
</html>

如果您查看我的动态页面,您会看到我将实际数据传递给它。这意味着我从控制器获取相关数据,然后将其传递。

于 2013-10-11T12:28:47.157 回答