codeigniter
  • smarty
  • fetch
  • 2013-03-13 64 views 0 likes 
    0

    模板讀取到主模板從一個地方這是一個有點難以解釋什麼是我約的問題,但我要去嘗試:)笨 - Smarty的 - 如何笨

    在定製項目中我使用Smarty,我有一個index.php文件,其中放置了網址處理和內容的所有基本設置。

    例如:

    // Get information for the "about us" page 
    
    if($_GET['qs']=='about_us'){ 
        $data['text'] = 'Lorem Ipsum...'; 
        $data['other_stuff'] = 'dolor sit amet'; 
    
        // Required template file 
        $data['tpl_Name'] = 'about.tpl'; 
    } 
    

    在這個文件我有一點的代碼,獲取正確的模板結束其發送到master_site模板的底部。

    例如:

    if (isset($data['tpl_Name'])){ 
        $this->smarty->assign('content', $this->smarty->fetch($data['tpl_Name'])); 
        $this->smarty->view('master_site.tpl'); 
    } 
    

    在master_site.tpl我可以用{$內容}訪問about.tpl 此{$內容}變量將每一頁改變,因爲在index.php是通過在我的應用程序中請求頁面將所有數據發送到的頁面。

    問題:在CodeIgniter中是否有一個文件可用於每個頁面,所以我可以創建類似上面的東西?現在我必須在我的控制器的每個函數中使用這段代碼(第二個例子),而且效率不高。

    當然,我必須在每個函數中設置$ data ['tpl_Name'],但那沒問題。

    謝謝。

    +0

    您是否考慮過擴展核心控制器? – 2013-03-13 22:16:05

    +0

    我會這樣做的方式是將所有頁面信息移出到CSV文件(即sitemap.csv)。然後以constructor函數的數組形式加載csv文件。然後,您可以將所有頁面請求路由到一個方法,根據uri動態設置模板(就像您已經這樣做),還可以以同樣的方式從sitemap.csv數組請求頁面信息。 – Jeemusu 2013-03-14 02:35:07

    回答

    1

    將模板庫集成到CodeIgniter中有很多方法,其中很大一部分取決於您想如何將模板綁定在一起。以下內容可能適合你,或者只是指出你朝着正確的方向。這不是模板的唯一Smarty/CI解決方案,但它是我熟悉的。

    I wrote some code to integrate Smarty into CI。它允許你使用加載視圖的標準方式 - $this->load->view('view', $data) - 但你可以在文件中使用Smarty的語法。

    我處理「主」模板的方式是通過Smarty的{extends}template inheritance docs)。我加載的各個視圖都擴展了主模板或其他導致其中一個的層次結構。

    main_template.php:

    <html> 
    <head> 
        <meta> 
        <meta> 
        <title>{$title|default:"Default Title"}</title> 
    </head> 
    <body> 
    
    <header> 
        <h1>My Website</h1> 
    </header> 
    
    <nav> 
        <ul> 
         <li>Page Link</li> 
         <li>Page Link</li> 
         <li>Page Link</li> 
         <li>Page Link</li> 
        </ul> 
    </nav> 
    
    <section class="main-content"> 
    
    {block name=content}{/block} 
    
    </section> 
    
    <footer> 
        &copy; 2013 Me! 
    </footer> 
    
    </body> 
    </html> 
    

    page.php文件:

    {extends "main_template.php"} 
    
    {block "content"} 
    
    <h2>My Content Page</h2> 
    
    <p>Lorem ipsum and stuff...</p> 
    
    {/block} 
    

    $title變量將被添加到像普通視圖的數據,你會加載頁面用標準語法:

    $data['title'] = 'My page'; 
    
    $this->load->view('page', $data); 
    

    我會讓你調查Smarty文檔以獲得更深入的細節,但這正是我以前所做的。 :)

    相關問題