0

我知道这个问题已经被问过好几次了,但我似乎找不到合适的解决方案来解决我的问题。

我正在使用 CodeIgniter,这是一个遵循 MVC(模型-视图-控制器)原则的 PHP 框架。

我有许多 javascript 文件,如 jQuery 和其他通用库,我需要包含在head标记中的每个页面。我还查看了直接嵌入在脚本块中的视图中的特定 javascript。

视图customerInfo.php的示例:

<script type="text/javascript">
    // some javascript here for customerInfo view
    // I MUST be able to use PHP variables in this script block ex:
    var customerName = "<?php echo $customerName; ?>";
</script>

<p class="someClass">Hello <?=$customerName?>, may the lord provide you with bananas</p>

我的网站布局如下:

<html>
<head>
    <script src="http://coolStorybro.com/jquery.js" type="text/javascript"></script>
    <script src="http://coolStorybro.com/commonStuff.js" type="text/javascript"></script>
</head>

<body>

<div class="header">some header stuff</div>

<div class="pageContent">
   <?php echo $view; ?>   // In this case, $view will hold the view customerInfo
</div>


</body>
</html>

我的目标是将我所有的 javascript 放在同一个地方,这样我就可以缩小它并最终将它放在我的页面底部以进行加载优化。

我知道我可以将视图特定的 javascript 存储在一个名为customerInfo.js的单独文件中并将其加载到head标记中,但我觉得为每个视图创建一个单独的 javascript 文件太多了,我将无法在其中使用PHP,这是我必须的。

所以我问你们,有没有解决我的问题的方法,还是我注定要让我的页面到处都是脚本块?

感谢您的时间。

编辑:

有没有办法将视图特定的javascript(所有视图)放在一个文件中,并以某种方式将其分隔在模块中,并且只加载所需视图的特定模块?

假设viewsJS.js包含所有特定于视图的javascript:

module ("customerInfo", 
    $(".someClass").html("Bla bla bla");
);

module ("invoiceInfo", 
    // Some code to be executed when the invoiceInfo module is loaded
);

一旦定义了每个模块(视图)的 javascript,就会有一种方法可以将它们加载到相应的视图中。问题是,我的视图中不能有一个脚本块来“加载”模块,所以..我一无所知。

4

1 回答 1

2

在您的文件夹中创建此文件夹结构application/views

/includes/javascript.php
/template.php

然后把你的主要代码放在template.php

<html>
<head>
  <?php echo $this->load->view('includes/javascript'); ?>
</head>

<body>

<div class="header">some header stuff</div>
...

并将所有 javascript 放在javascript.php

application/views/includes

例如:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script>

最后的输出在您的浏览器中看起来像:

<html>
<head>
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
      <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script>
</head>

<body>

<div class="header">some header stuff</div>
...

要加载特定的 javascript 文件,您可以在 javascript 视图中执行类似的操作:

<?php if (is_frontpage()) : ?>
   <script src="http://localhost/javascriptforfrontpage.js"></script>
<?php endif; ?>

<?php if (is_contact()) : ?>
   <script src="http://localhost/javscriptforcontactpage.js"></script>
<?php endif; ?>

<?php // this would be loaded everywhere ?>
<script src="http://localhost/javascripteverypage.js"></script>

仅加载客户信息 javascript:

第一次你从你的控制器发送到你的视图,$data['load_js_customer_info']例如:

public function customerInfo()
    {

        $data['load_js_customer_info'] = "Customer Info";
        $data['customer'] = $this->mdl_admin->get_customer();
        $this->load->view('template', $data);
    }

并在视图(包含所有javascript)中创建一个条件:

 <?php if ($load_js_customer_info) : ?>
   <script src="http://localhost/javscriptforcustomerinfo.js"></script>
 <?php endif; ?>

因此,如果不是来自客户信息控制器,则不会加载 javscript。

于 2013-03-18T14:57:31.663 回答