codeigniter
  • smarty
  • fetch
  • 2013-03-13 63 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文档以获得更深入的细节,但这正是我以前所做的。 :)

    相关问题