2

我的 CodeIgniter 网站的控制器设置如下:

$this->load->view('head', $data); // Contains <head> stuff
$this->load->view('header', $data); // Nav and sidebars
$this->load->view($this->uri->segment(1), $data); // Main page content
$this->load->view('footer', $data); // Footer

我的问题是关于在哪里存储<title>标签的内容。理想情况下,它将与页面内容(第 3 个加载的视图)一起使用,但是您如何将其放入<title>已在第一个视图中加载的标签中?

我读过让 JavaScript 设置标题很糟糕,因为它与搜索引擎机器人不兼容。

我还阅读了一个建议,该建议说有一个包含所有页面的大视图文件

4

8 回答 8

2

对于更改页面标题,这是更好的方法。在您的配置文件中添加此参数:

$config['pageTitle'] = 'Book Store';

在模板页面中:

<title><?=$this->config->config["pageTitle"]?></title>

在您喜欢的任何页面中更改此配置:

$this->config->config["pageTitle"] = $detail[0]['Title'];

每次您都可以轻松更改标题。

于 2017-10-07T16:11:43.760 回答
1

我不太明白为什么要在加载的第三个视图中而不是在编译的 HTML 文档的头部(加载的第一个视图)中添加标签。为什么没有类似的东西:

$data['title'] = 'my page title';

$this->load->view('head', $data);
于 2012-07-07T17:17:03.753 回答
1

我想了一个办法来解决我的问题,我从http://joshhighland.com/blog/2008/11/09/how-i-do-layouts-and-views-in-codeigniter/得到了这个想法。如果您查看该页面,您会在第一个代码摘录的底部附近看到这样的一行:

$layout_data['content_body'] = $this->load->view('home/homePage', $body_data, true);

这会将视图作为字符串加载到该变量中。然后,我将对该字符串运行一个函数来提取我想要的标题(我会将其存储在 HTML 注释中)并将其放入$layout_data['pageTitle']. 然后,按照链接上的其余布局方法,我将能够解决我的问题。

于 2012-07-09T00:24:25.920 回答
0

从逻辑上讲,您的<title>标签应该在<head>标签内,并且将它放在您的“头部”视图中是有意义的。因此,您传递给 head 视图的 $data 数组应该包含一个标签元素。从您的脚本中,我了解到您正在为所有 4 个视图传递相同的 $data 数组?不是很好的做法,因为您最终可能会传递在一个视图中使用的元素,但不会在其他四个视图中传递。我建议为每个视图形成一个不同的数组。

于 2012-07-07T17:11:10.197 回答
0

写一个辅助函数怎么样?

帮手 helpers/header_helper.php

function set_title($title) {
    $ci &= get_instance();
    $ci->header_title = $title;
}

function get_title() {
    $ci &= get_instance();
    return $ci->header_title;
}

您可能希望将其设置为自动加载config/autoload.php

然后在您的视图中您可以调用该函数get_title(),在您的控制器中您可以调用set_title().

于 2012-07-07T20:32:37.150 回答
0

我以我的风格解决了这个问题。也许它不是完美的,但它解决了我的最大目的。

我创建了一个名为 getMyPageTitle() 的辅助函数。

在那里我写下了页面标题的逻辑。

逻辑的基本部分是我在配置文件中假设了一个默认标题。

            <?php
            function getMyPageTitle(){

                $title = '';
                $ci = &get_instance();

                $default_title = 'My Site';// you can load it from a config file,and that is better option
                // get the view name
                $view = $this->uri->segment(2);
                // check if controller set a page tile
                /* If you want to set a page title for a particular page then always 
                 * named that variable 'pageTitle' as $data['pageTitle'] = 'My page title | For this page'
                 */

                global $pageTitle;

                if($pageTitle){// the controller sets the page title
                    $title = $pageTitle;
                }elseif($view !== ''){//you can include your view name in the page title,,and the view name is not blanks
                    $title = $default_title.' | '. $view;
                }/**
                  * You can write several else if , before or after this or
                  * can change the total logic as you want
                  */
                 else{
                    $title = $default_title;
                }

                return $title;
            }
            ?>

在视图中使用这个

<title><?= getMyPageTitle()?></title>

我认为这解决了目的。

于 2014-09-19T11:42:15.847 回答
0

试试这个

-> 在模板中设置 TITLE 标签

    <title>
        <?php if (!empty($page_title)) echo $page_title;?>
    </title>

-> 设置 $data['page_title'] = 'title name'

public function index()
    {
        $data['page_title'] = 'List'; 
        $this->load->view('head', $data); // Contains <head> stuff
        $this->load->view('header', $data); // Nav and sidebars
        $this->load->view($this->uri->segment(1), $data); // Main page content
        $this->load->view('footer', $data); // Footer
    }
于 2019-12-04T11:22:41.053 回答
0

在 Codeignitor 控制器中

public function index()
{
    $data['title'] = 'Website &mdash; Welcome To Website';
    $this->load->view('header', $data);
    $this->load->view('index');
    $this->load->view('footer');
}

public function about()
{
    $data['title'] = 'Coachify &mdash; About Us';
    $this->load->view('header', $data);
    $this->load->view('about');
    $this->load->view('footer');
}

view/header.php

<title><?= $title; ?></title>
于 2021-08-07T07:55:57.423 回答