2011-08-02 8 views
2

phpを初めて使っているので、これがどのように達成されたのか本当に知りたいです。ヘッダーとフッターは常にページ上に表示され、内容は唯一のものです。ヘッダーやフッターを変更したい場合は、各ページで変更する必要はありません。Php - ページからヘッダー/フッターの抽出を行う適切な方法は何ですか?

1. include(...) 

いくつかのフォーラムを読んだ後、ほとんどの人はこれをお勧めしません。これをテンプレートエンジンを使用して解決しました。

2. Template Engines 

私はこれが答えになると思っていましたが、見た目が良く、マスクされたPHPコードでした。私は、テンプレートエンジンが最初の問題をどのように解決できるか見てみました。テンプレートの継承。だから、継承のあるSmartyテンプレートエンジンを使用した後、私はそれが素晴らしいと思って完璧に働き、親テンプレートにコードを抽出するのが非常に簡単でした。

しかし、別の問題が発生しました。 smartyを使って独自の小さなフレームワークをコーディングした後、私はCodeIgniterを試してアプリケーションを作りたがっていました。彼らが使用するテンプレートエンジンはかなり基本的なものであり、推奨されていません。私はテンプレートの継承を使用することができないことを知った後、ヘッダーとフッターの問題について、私は解決策を探しました、私は継承を達成するために使用できるライブラリを見つけましたが、私が必要とする機能

今、私は立ち往生して何をすべきかわかりません。あなたはPHPのページからヘッダとフッタを分けるために何を使用しますか?私はおそらくあまりにも多くを書いたが、私はこれを行う適切な方法を知りたい。前もって感謝します。 header.phpので

答えて

1

あなただけの、そのために異なるビューを使用し、CodeIgniterのを使用している場合...

class Content extends CI_Controller { 

    function index() 
    { 
    $data['title'] = 'This is page one'; 
    $this->load->view('header', $data); 
    $this->load->view('page_one'); 
    $this->load->view('footer'); 
    } 

    function page_two() 
    { 
    $data['title'] = 'This is page two'; 
    $this->load->view('header', $data); 
    $this->load->view('page_two'); 
    $this->load->view('footer'); 
    } 
    //and so on.. 
} 

あなただけの$タイトルエコー。あなたがページ1またはページ2にいる場合は、それが違うことがわかります。とにかく、この例で行ったようなメソッドの代わりに、ページごとにコントローラを使用するべきでしょう。あまりコードを書くことなく可能性を示していました。

また、ビューをビュー内にロードできます。後者はビューをメインビューに渡します。 header.phpので

$data['page']['title'] = 'Page one'; 
$data['foot']['whatever'] = 'Whatever you want'; 
$this->load->view('page_one', $data); 

page_one.php

<?php $this->load->view('header', $page); ?> 

    <!-- html and php stuff for this page only --> 

    <?php $this->load->view('footer', $foot); ?> 

:上記の例を使用して

<title><?php echo $title; ?></title> 

footer.phpで:

<p><?php echo $whatever; ?></p> 

header.phpのとフッター.phpは別々の 'ブロックあなたが望む場所にロードできるファイルは2つだけです。あなたがそれをよく見れば、include()とほとんど同じです。これは実際にはテンプレートエンジンではありませんが、テンプレートエンジンは「あまりにも多く」、他のプログラマー以外の人がレイアウトを邪魔している場合には便利です。あなたが達成したいのは、ページパーツの分離だけであれば、必要に応じて組み立てることができるブロックに各ページを分割することは、Smartyやその他のテンプレートエンジンを実装するのが簡単になるでしょう。

+0

これは( 'header.phpの')を含めたものと同じです。 include( 'footer.php');ページタイトル、余分なヘッドリソース、異なるブロックを指定することはできません。 Ect ... – user622469

+0

はい、できます。私は答えを更新します –

+0

_ "各ページをあなたが組み立てることができるブロックに分割する" _ - ブロックは '$ this-> load-> view( '...');'ページごとに異なるヘッドリソースをどのように読み込むのですか? – user622469

0

多分このtemplate library for Codeigniterを使用できます。これはデフォルトのテンプレートエンジンよりも若干優れており、実際にはeasy to useです。テンプレートごとにデフォルトの「領域」を設定することができます。

0

Code Igniter - how would you structure this site?

<?php 

class MY_Controller extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 
    } 

    public function loadView($view) { 
     $this->load->view('header'); 
     $this->load->view($view); 
     $this->load->view('footer'); 
    } 
} 

、あなたは、ヘッダーやフッターにデータをロードする必要がある場合:

$data["title"] = 'About us'; 
$this->load->view('header', $data); 
関連する問題