MVC模型中的外部CSS和JS文件

时间:2013-10-11 08:04:22

标签: php html css templates

所以,我正在尝试基于我自己的类似MVC的PHP模型构建一个网站。

让我们说每个视图至少由两部分组成:

让那些是'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'等)。在模型中定义页面标题将迫使我添加大量模型文件。< / p>

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

  5. -

    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,而且还可以轻松定义文档的标题和其他可能的变量......但是在乘以我之前文件,我想咨询有经验的程序员,如果它真的是正确的话。

    非常感谢并抱歉提出了一个很长的问题。非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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>

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