0

私はこの質問が何度か聞かれたことを知っていますが、私の問題に対する適切な解決策を見つけることができないようです。

私は、MVC(Model-View-Controller)の原則に従うPHPフレームワークであるCodeIgniterを使用しています。

私は、 headタグに含まれるすべてのページに必要なjQueryやその他の汎用ライブラリのような多くのjavascriptファイルを持っています。また、スクリプトブロックのビューに直接埋め込まれているビュー固有の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; ?>

そのため、顧客情報コントローラーからのものでない場合、javascript は読み込まれません。

于 2013-03-18T14:57:31.663 に答える