2017-01-05 3 views
0

私のウェブサイトは現在、異なるページを動的にロードするために.tplテンプレートファイルを使用しています。それは、ヘッダー、サイドバー(チャット)、メインコンテンツ、フッターなど、ページ全体を再度読み込みます。個々のページではなくjavascriptでメインコンテンツを動的に変更したい

私のindex.phpファイルには、メニューの「home」をクリックすると「home」というページがロードされるスイッチケースがあります。 (例)

しかし、私はそれを望んでいません。彼らはサイドバーのチャットでもあり、別のページをロードするeveytimeをリロード/リセットします。したがって、以前のすべてのメッセージはなくなります。だから私が望むのは、メインコンテンツ部分だけを変更することです。ヘッダー、サイドバー、フッターはそのまま残り、リロードしません。

私はjavascriptでやろうとしましたが、うまくいきませんでした... 誰かが私を助けてくれますか?

+1

おそらく、あなたはOを探していますut [SPA](https://en.wikipedia.org/wiki/Single-page_application) – DontVoteMeDown

+0

可能な回答が多すぎるか、この回答が長すぎます。回答セットを絞り込むか、いくつかの段落で回答できる問題を特定するための詳細を追加してください。私は一般的な問題を解決するための開発フォーラム(おそらく[Quora](http://www.quora.com/Computer-Programming))を見つけることをお勧めします。次に、特定のコーディングに関する問題がある場合は、StackOverflowに戻ってください。お手伝いします。 –

+0

あなたのページがtplsからレンダリングされたとしても、バックエンドに依頼してページ全体をリロードする必要があります。簡単な答え:iframe(ただし、しないでください)。 JavaScriptを使用して非同期にコンテンツを取得するものが必要です。本当に深刻なアプリについては、https://angularjs.org/またはこれに類するものを検討してください。しかし、これはあなたにとって過度なことかもしれません。 – AndFisher

答えて

0

(そして、はい、私は... stackoverflowの上の最後の時間を検索し、Googleが、何かを見つけることができませんでしたされています)次の命令に従ってください:

  1. を別々の.tplファイルを作成します。ヘッダー、フッター、サイドバー、およびコンテンツファイル用。
  2. メインファイルにはヘッダー、フッター、サイドバーがあり、コンテンツ用に1つのセクションがあります。 3. ajax呼び出しを使用して、.tpl(idまたはクラスを使用して)ファイルコンテンツを置き換えます。
  3. あなたのURLを関数にバインドします。以下のように

    サンプルコード:

    // sidebar.php

    <ul> 
        <li><a onclick="changePage(this)" data-page="home.tpl">Home</a></li> 
        <li><a onclick="changePage(this)" data-page="aboutus.tpl">About Us</a></li> 
        </ul> 
    

    // master.php

     <?php 
          include("header.php"); 
          include("sidebar.php"); 
          ?> 
          <section id="fileContent"> 
          </section> 
         <?php include("footer.php"); 
         ?> 
    <script href="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
        <script> 
         function changePage(obj) 
         { 
          var Filename=$(obj).data('page') 
          $.get(Filename, function(data) { 
           $("#fileContent").html(data); 
          }); 
         } 
        </script> 
    
+0

サイドバーは実際に私のウェブサイトのチャットです。だから、 'sidebar.php'にあるメニューは私のために 'header.php'になければなりません。 そして、なぜ、アンカーでは(これ)が 'changePage'の後にあるのか説明できますか?私はあなたの「master.php」に戻ってくることはないからです。 – fence

+0

jQuery 'on'デリゲートのインラインクリックハンドラを切り替えたい – AndFisher

+0

SEでクロールしたい場合は、リンクに実ページ' href'を追加することを忘れないでください。 – AndFisher

0

何がAJAXと呼ばれている必要があります(アヤックスでは、 Webアプリケーションは、exiの表示と動作を妨げずに(バックグラウンドで)非同期的にサーバにデータを送信したりサーバから取得したりすることができます。刺さページ)

uはあなたのメインのコンテンツが含まれており、バックページにHTMLコードを挿入するSmartyテンプレートをロードするPHPファイルへのリクエストを送信するにはJavascriptを必要とAJAXを使用するには:

<?php 
//some-php-file.php 
include("Smarty.class.php"); 
$smarty = new Smarty; 
$smarty->display("main_content_part.tpl"); 
?> 

 

//link on 'home' site 
<a href="#" id="ajaxHomeBtn">Home</a> 

 

//javascript(jquery) ajax request 
$('#ajaxHomeBtn').click(function(e){ 
    e.preventDefault(); 
    $.get("some-php-file.php", function(smarty_html_data) { 
    $(".main-content").html(smarty_html_data); 
    }); 
}); 
+0

AJAXは私にはかなり新しく、私はこれについて何も理解していないので、私はそれを自分で実装することはできません... – fence

+0

@fenceその簡単な心配はありません。 3番目の部分は、スマートテンプレート(メインコンテンツ部分)の内容を取得し、それをクラス 'main-content'を持つhtmlタグに挿入することです。 – b3wii

関連する問題