我的codeigniter header.php中的动态标题


Dynamic Titles in my codeigniter header.php

我在控制器中为每个页面加载了一个header.php。然而,我希望每个页面都有动态标题。我的想法是在加载时将$title变量传递到视图中:

//Home Controller
function index()
{
    $data['title'] = "Dynamic Title";
    $this->load->view('header', $data);
    $this->load->view('layouts/home');
    $this->load->view('footer');
}

然后在我的header.php 中检查$title变量

<title>
    <?php if ($title)
        { 
            echo $title; 
        }
    else
        { 
            echo 'Default Title'; 
        }
    endif; ?>       
</title>

然而,这不起作用,我得到了一个空白页。我认为这是我对header.php的语法,但我不明白为什么。

正确的if语法

您在if-statement上的语法有点错误。您可以使用以下任一项:

if (condition) {
  // do a
} else {
  // do b
}

if (condition) :
  // do a
else : 
  // do b
endif;

你似乎把后者的结尾换成了前者。

在标题中使用三元运算符

一旦你做出了改变,你的标题就可以像一样轻松地打印出来

<title><?php echo isset($title) ? $title : 'Default Title' ; ?></title>

备选视图加载

加载视图的另一种方法是使用单个模板文件:

$data['title'] = 'Foo Bar';
$data['content'] = 'indexPage';
$this->load->view('template', $data);

这将加载template.php文件作为视图。在这个文件中,你加载你的后续部分:

<?php $this->load->view("_header"); ?>
<?php $this->load->view($content); ?>
<?php $this->load->view("_footer"); ?>

这绝对不是必要的,但它可以帮助您在控制器中保持简洁。

我会尝试在视图中对$title进行var转储,看看它是否被传递了。

此外,您不需要"endif;",因为您要用最后一个大括号结束if语句。