我正在创建一系列网页的在线培训“powerpoint”。这将是非常直接的,并将页面设置为:
page1.php中 使page2.php page3.php ... page20.php
我将去旧学校并使用iframe隐藏地址栏,因为人们不应该抓住命名惯例并向前跳过。 (它不太严重,所以我想保持简单)。
我想要做的是基于他们所在的当前页面,例如page5.php创建指向page4.php和page6.html的链接。显然,无需手动编写每个页面。
如果这是一个javascript函数将是理想的,因为我不希望地址出现在浏览器信息栏中,但我也对php技巧开放。
任何想法如何做到这一点?
答案 0 :(得分:1)
使用window.location。你可以把它放在这样的函数中:
<script type='javascript'>
function goto(url) { window.location=url; }
</script>
<a href='#' onclick='goto("page3.php"); return false;'>Previous</a>
<a href='#' onclick='goto("page5.php"); return false;'>Next</a>
你甚至可以使用会话变量来隐藏它,这样你可以做这样的事情(我希望我的PHP技能仍然很好):
<?php
// At Beginning of first script
start_session();
$MAX_PAGE = 20; // Set this to the highest page number
if(!isset($_SESSION['curpage'])) {
$_SESSION['curpage'] = 1;
} else {
// __EDIT: Added page max and mins.
if($_GET['go'] == 'prev' && $_SESSION['curpage'] > 1) {
$_SESSION['curpage']--;
} else if($_GET['go'] == 'next' && $_SESSION['curpage'] < $MAX_PAGE) {
$_SESSION['curpage']++;
}
}
?>
然后将其放在您需要的页面中。
<?php
include("page$_SESSION[curpage].php");
if($_SESSION['curpage'] > 1) {
echo "<a href='page.php?go=prev' rel='prev'>Previous</a>";
}
if($_SESSION['curpage'] < $MAX_PAGE) {
echo "<a href='page.php?go=next' rel='next'>Next</a>";
}
?>
请注意,当Web Crawlers每次返回不同的页面时,它将无法做很多事情。
答案 1 :(得分:0)
var actuPage = parseInt(location.href.replace(/[^0-9]/, ''))+1;
location.href = 'page'+actuPage+'.php';
如果您的网址中没有其他号码,这应该有用。如果这样做,则必须更改replace
的模式。
代码用于下一页,将+1
更改为前一个-1
。
答案 2 :(得分:0)
对Pikrass的功能进行一点扩展,以处理第一个/最后一个场景:
function goto(url) { window.location=url; }
var curPage = parseInt(location.href.replace(/page([0-9]+)\.php/, ''))
if (curPage <= 1) {
// First page, no 'back' link
document.write('<a href="#" class="disabled">Back</a>');
} else {
var backPage = curPage-1;
document.write("<a href=\"#\" onclick=\"goto('page"+backPage+".php')\">Back</a>");
}
if (curPage >= 9) { // Replace with highest page number
// Last page, no 'next' link
document.write('<a href="#" class="disabled">Next</a>');
} else {
var nextPage = curPage+1;
document.write("<a href=\"#\" onclick=\"goto('page"+nextPage+".php')\">Back</a>");
}
如果您查看网页的来源,则不会隐藏网址,但是当按照要求将鼠标悬停在链接上时,这些网址不会显示在浏览器的状态栏中。
编辑使用Pikrass更具体的更新RegEx,以处理URL中其他位置的其他数字。谢谢Pikrass!
答案 3 :(得分:0)
这是MidnightLightning的版本,带有更好的RegExp来获取当前页面,即使您的网址中有其他数字也可以使用。
function goto(url) { window.location=url; }
var regPage = /page([0-9]+)\.php/;
var match = regPage.exec(location.href);
var curPage = parseInt(match[1]);
if (curPage <= 1) {
// First page, no 'back' link
document.write('<a href="#" class="disabled">Back</a>');
} else {
var backPage = curPage-1;
document.write("<a href=\"#\" onclick=\"goto('page"+backPage+".php')\">Back</a>");
}
if (curPage >= 9) { // Replace with highest page number
// Last page, no 'next' link
document.write('<a href="#" class="disabled">Next</a>');
} else {
var nextPage = curPage+1;
document.write("<a href=\"#\" onclick=\"goto('page"+nextPage+".php')\">Back</a>");
}
我很喜欢几个人建立答案的时候。 :)
如果可以,请按照建议选择PHP代码。它更“干净”。
答案 4 :(得分:0)
听起来您想要使用查询字符串变量,因此page.php?page=1
,page.php?page=2
,page.php?page=3
等等
答案 5 :(得分:0)
为什么不使用ajax而不是iframe?
嗯,无所谓,你标记了问题jquery所以我认为你可以找到有用的另一个链接属性'告诉'js在哪里重定向。
我的意思是:
$.(document).ready(funciton(){
//i use the live method becose.. you know, maybe in the future
//you will go with ajax ;)
//live method is avbaiable in jquery 1.3!
$("a.navigation").live('click', function(){
window.location = $(this).attr("rel");
});
});
这使您的html标记免于onclick
标记中的许多<a>
个功能。
因此,您的标记将类似于:
<a href="#" rel="page1.php">Go to page 1</a>
<a href="#" rel="page2.php">Go to page 2</a>
<!-- .. and so on.. -->
或者,如果您仍想隐藏真实的网址,您可以这样做:
<a href="#" rel="1">Go to page 1</a>
<a href="#" rel="2">Go to page 2</a>
<!-- .. and so on.. -->
使用此js(可能未嵌入到页面源中?)
$.(document).ready(funciton(){
$("a.navigation").live('click', function(){
window.location = 'page' + $(this).attr("rel") + '.php';
});
});
但如果您打算使用js链接,那么您永远无法完全隐藏页面网址。
你可以使用php隐藏它们,并且使用一个哈希的字符串,但我不知道它是否值得游戏。
其他建议使用正则表达式来计算页码和页面链接;我将通过PHP打印链接:将让您更好地控制全局行为(我们不知道您有多少页面,如果它们与数据库相关,即使您提供给我们的信息也会让我认为您有所有页面[x] .php都在您的服务器上fisically)