2013-08-31 24 views
1

我在我的网站http://jobfou.com的页面上动态设置页面标题和元描述,因为http是无状态的,就像这样。是否可以像这样在php中设置标题和元描述?

<html> 
<?php 
ob_start(); 
?> 
<title> <!--TITLE--> </title> 
<body> 
Some HTML Page Content From Database Goes Here. 

<?php 
//The PHP Code Here Gets executed on each page loads, dynamically. 
$wholePageContents = ob_get_contents(); 
$post_title = "Page 1"; 
ob_end_clean(); 
echo str_replace("<!--TITLE-->", $post_title, $wholePageContents); 
?> 

</body> 
<html> 

是否可以像这样设置页面标题和元描述,调用ob_start();在每个页面加载,有什么优点和缺点,或者我应该去使用jQuery。哪个更好,并且不消耗内存。

+3

使用自己的模板更好 – Davit

+0

执行您的PHP代码,在输出您的HTML之前收集必要的数据 - http://en.wikipedia.org/wiki/IPO_Model – CBroe

+0

Use of Own模板,Pls Dachi可以详细说明吗? –

回答

3

是否可以,部分是自以为是,部分是由于你的具体情况。当我第一次开始学习PHP之前,现在将整个输出缓存到内存中用于后期输出处理似乎很常见,但它存在增加内存消耗的主要缺陷。

对于一个小网站来说,这不会是一件大事。你不会碰到任何脚本内存限制(毕竟它是唯一的文本,你需要一个输出的负载来做到这一点),并且你可能不会有那么多的流量来释放每个请求的内存和内存指标(事实上,如果你问这个问题,你甚至可能不会监测任何指标)。

第二个问题特别针对你的例子。你要求PHP做什么,是扫描该变量中保存的全部文本,寻找特定的字符串,然后将其替换。这不是一个特别昂贵的操作,除非你的东西很少,但它不是实现你想要的最好,最理想也不可取的方法。

认为PHP很像str_replace函数。它会在输出HTML之前运行/执行。因此,您可以使用PHP将文本放入HTML中,然后发送给用户。由于我们可以做到这一点,我们可以将PHP代码放入我们的HTML中,该代码将运行,并且在大多数情况下会打印一些HTML /文本。

因此,让我们看看你的榜样......

除了插入“标签”到HTML的更换,我们可以直接把一些PHP到HTML

<?php 
$title = "My first website"; 
?> 
<html> 
<head> 
<title><?php echo $title; ?></title> 
</head> 
<body> 
Some stuff here... 
</body> 
</html> 

而且它不” t只需要在HTML内部有一个简单的回声(不要忘记标签,因此PHP解释器知道它需要做某些事情)。我们可以做一些更看中我们的标题标签...

<html> 
<head> 
<title> 

<?php 
if($_SERVER['PHP_SELF'] == 'index.php') { 
    echo 'My Website :: Homepage'; 
} else { 
    $pagename = array_shift(explode('.', $_SERVER['PHP_SELF'])); 
    echo 'My Website :: '.$pagename; 
} 
?> 
</title> 
</head> 
<body> 
Some stuff here... 
</body> 
</html> 

这里有一个不同的方式,你可以做使用功能。让我们创建一个名为template_functions.php的文件。

function header($title = 'Some default title', $meta_kw = '', $meta_descr = '') 
{ 
?> 
<html> 
<head> 
<title><?php echo $title; ?></title> 
<meta name="keywords" content="<?php echo $meta_kw; ?>" /> 
<meta name="description" content="<?php echo $meta_descr; ?>" /> 
</head> 
<body> 
<?php 
} 

function footer() { 
?> 
<div id="copyright">Copyright MyWebsite <?php echo date("Y"); ?></div> 
</body> 
</html> 
<?php 
} 

现在我们有一点可重用的代码,所以如果我们想改变的主头(即新增Facebook JavaScript来每一页),我们可以做到这一点,而无需编辑每一个脚本。所以,现在我们可以创建一个index.php这样的:

<?php 
require_once("template_functions.php"); 

header("My Homepage", "Some keywords", "Some description"); 
?> 
Enter site content here 
<?php 
footer(); 
?> 

contact.php页面这样

<?php 
require_once("template_functions.php"); 

header("Contact US", "Some keywords", "Some description"); 
?> 
Enter Your contact info, social network info, a map or a contact form here if you want! 
<?php 
footer(); 
?> 

这样应该可以告诉你必须开始与HTML混合PHP,甚至有功能的好处它允许你重新使用一些代码。模板化可以变得复杂得多,但我不想打击你的想法。从小开始......

为了最终确定我很长的答案,让我们以不同的方式解决这个问题。在HTML中使用标签并处理它们是错误的吗?答案是NO。你必须决定什么适合你和你的情况。有时候这是不可避免的,有时候这只是一种更好的做事方式。然而,当你确实需要这样的事情时,你通常会发现它的文本规模小得多(例如用户评论的bbcode解析器,或者替换保存在某个txt文件中的电子邮件内容中的标签)。

希望这个答案可以帮助你!任何问题我们在这里帮助

+1

很好的答案@Lee。我们可能需要有一个粘性链接,因为它是网站上的常见问题。 –

+0

我在为它使用MVC的思路,然后在所有像这样的文件上实现它。谢谢李。 –

+1

MVC是一个比我发布的结构复杂得多的结构。如果你真的想走这条路,那么对你有好处(我个人从来没有真正进入MVC框架,因为我不需要它们)。但是我会说“不要跑步,然后才能走路”。如果这篇文章以任何方式启发你,当你开始进入MVC架构时,你可能会迷失在代码,问题和复杂性的海洋中。最后,这是你的决定,只是准备一个陡峭的学习曲线。 – Lee

相关问题