php - 在( MVC ) 中,从内容文件设置页面标题

  显示原文与译文双语对照的内容
0 0

我的网站的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> 内容。 理想情况下,它将与页面内容( 3rd 加载的视图) 一起使用,但是如何将它的获取到 <title> 标签中,在第一个视图中加载?

我已经阅读过,让JavaScript设置标题是不好的,因为它与搜索引擎机器人不兼容。

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

时间: 原作者:

0 0

我不太明白为什么你希望在第三个视图中使用标记而不是你所编译的HTML文档的head ( 。你加载的第一个视图) 。 为什么不有类似的东西?


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

$this->load->view('head', $data);

原作者:
0 0

Logicaly你的<title> 标签应该在 <head> 标签中,在你的'头部'视图中有它是有意义的。 因此,你传递给head视图的$data array 应该包含一个用于标记的元素。 从你的脚本我了解到,你正在为所有 4个视图传递相同的$data array? NOT 很好,因为你可能最终会传递在一个视图中使用的元素,但另外四个视图中的NOT 。 我建议为每个视图创建一个不同的array 。

原作者:
0 0

如何编写 helper 函数?

helperhelpers/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()

原作者:
0 0

我已经想到了解决我的问题的方法,我从 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'] 。 然后,按照链接上的其他布局方法,我将能够解决我的问题。

原作者:
0 0

我已经用我的风格解决了这个问题。 可能不是完美的,但它解决了我的maximumpurpose 。

我创建一个名为 getMyPageTitle()的helper 函数。

然后我写下了网页标题的逻辑。

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


 <?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>

我认为这解决了。

原作者:
...