(1)在catalog.php脚本中添加到弹出文件中一个链接,其实现代码是下面代码片段中的突出强调部分。注意,这里假设在之前中所创建的代码基本之上进行添加。如果还没准备好这些代码,那么可以直接使用这一章下载的代码。
<?php
require_once 'include/url_factory.inc.php';
?>
<li><a href="<?php echo make_category_product_url("Friends' Shed",2,"PHP E-Commerce Book",42);?>">Friends' Shed:PHP E-Commerce Book</a>
</li>
</ul>
<center><a href="popup.php" target="_blank">Find more about Professional Search Engine Optimization with PHP!</a>
</center>
</body></html>
(2)加载http://seophp.example.com/catalog.html,以确保脚本加载正确并且显示了新的链接。注意,在这个例子中假设已经建立了前面所示的简单种类。
(3)在seophp文件夹中创建新文件popup.php,代码如下:
<?php
require_once 'include/popup_utils.inc.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd>
<html>
<head>
<title>Professionla Search Engine Optimization with PHP:Table of Contents</title>
</head>
<body onload="window.resizeTo(800,600);" onresize='setTimeout("window.resizeTo(800,600);",100);'>
<h1>Professional Search Engine Optimization with PHP:Table of Contents</h1>
<?php
display_navigation();
?>
<ol>
<li>You:Programmer and Search Engine Marketer</li>
<li>A Primer in Basic SEO</li>
<li>Provocative SE-Friendly URLs</li>
<li>Content Relocation and HTTP Status Codes</li>
<li>Duplicate Content</li>
</ol>
</body>
</html>
(4)在seophp/include文件夹中创建新文件popup_utils.inc.php,代码如下:
<?php
require_once 'config.inc.php';
function display_popup_navigation()
{
$disp_nav=false;
if(!isset($_SERVER['HTTP_REFERER']))
{
$disp_nav=true;
}else{
$parsed_referer=parse_url($_SERVER['HTTP_REFERER']);
$parsed_local=parse_url(SITE_DOMAIN);
$referer_host=$parsed_referer['host'];
if($referer_host != $local_host)
{
$disp_nav=true;
}
}
if($disp_nav==true)
{
echo '<a href="catalog.html">Visit our catalog page!</a>';
}
}
?>
(5)最后进入http://seophp.example.com/catalog.html,单击弹出窗口链接。没有显示任何导航。如何通过GOOGLE、YAHOO或者MSN单击而弹出网页,或者如果直接从浏览器地址进入http://seophp.example.com/popup.php,导航的链接可以显示出来。
(6)现在可以来测试在前面提到的Refcontrol Firefox插件程序。这个插件允许显示和更改REFERER信息。安装Plugin,并导航到http://seophp.example.com/catalog.html。在这个网页中,单击打开弹出窗口的链接,并且注意在状态栏显示的HTTP REFERER。可以看到当从站点内部弹出窗口时种类链接不能显示。
这里使用的代码很多,并且都非常有用。只要弹出列表放对位置,它可以在任何需要的时候很方便地将导航链接显示出来。这里使用的是模拟弹出窗口的方式,也可以用普通的JavaScript弹出页面取得同样的效果。
为了向任何弹出窗口增加导航链接,有两个步骤需要做。首先,需要将popup_utils.inc.php脚本加入弹出页面的脚本。如下即在popup.php里做的:
<?php
require_once 'include/popup_utils.inc.php';
?>
然后,需要调用定义在popup_utils.inc.php里的display_popup_navigation()函数。在希望包含导航链接的位置加入以下代码:
<?php
display_popup_navigation();
?>
这个函数的作用是验证REFERER是否来自本地区域。如果是,则不显示导航链接。如果这个REFERER来自另一个区域,则会显示出来导航链接。
这个函数首先就要被告知是否存在REFERER。如果不存在,则设置一个临时变量,取名为$display_nav,并设置为true。这个变量的默认值是false。在这个函数的最后,检查它的值,并决定是否显示这个导航链接:
function display_popup_navigation()
{
$disp_nav=false;
if(!isset($_SERVER['HTTP_REFERER']))
{
$disp_nav=true;
}
如果存在REFERER,检查主机名字的REFERER是否与主机的SITE_DOMAIN常量一致。这个常量定义在config.inc.php里。如果主机名字不一样,那么这个访问者是从外部网站到达这个弹出网页的,这时就需要使用以下代码显示导航链接:
else{
$parsed_referer=parse_url($_SERVER['HTTP_REFERER']);
$parsed_local=parse_url(SITE_DOMAIN);
$referer_host=$parsed_referer['host'];
$local_host=$parsed_local['host'];
if($referer_host != $local_host)
{
$disp_nav=true;
}
}
到最后,如果$display_nav的值是true,就使用以下代码显示导航链接:
if($disp_nav==true)
{
echo '<a href="catalog.html">Visit our catalog page!</a>';
}
}