Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Javascript的下一页/上一页?_Php_Javascript_Jquery - Fatal编程技术网

Php 使用Javascript的下一页/上一页?

Php 使用Javascript的下一页/上一页?,php,javascript,jquery,Php,Javascript,Jquery,我正在创建一个类似于powerpoint的在线培训系列页面。它将非常直截了当,并将页面设置为: page1.php page2.php page3.php ... page20.php 我将继续老一套,使用iframe隐藏地址栏,因为人们不应该理解命名约定而跳过。(不太严重,所以我想保持简单) 我想做的是基于它们所在的当前页面,例如page5.php创建指向page4.php和page6.html的链接。显然,无需手动编写每页代码 如果这是一个javascript函数,那就太理想了,因为我不希望

我正在创建一个类似于powerpoint的在线培训系列页面。它将非常直截了当,并将页面设置为:

page1.php page2.php page3.php ... page20.php

我将继续老一套,使用iframe隐藏地址栏,因为人们不应该理解命名约定而跳过。(不太严重,所以我想保持简单)

我想做的是基于它们所在的当前页面,例如page5.php创建指向page4.php和page6.html的链接。显然,无需手动编写每页代码

如果这是一个javascript函数,那就太理想了,因为我不希望地址显示在浏览器信息栏中,但我也对php技巧持开放态度

有什么办法吗

var actuPage = parseInt(location.href.replace(/[^0-9]/, ''))+1;
location.href = 'page'+actuPage+'.php';
如果您的URL中没有其他号码,那么这应该是可行的。如果这样做,则必须更改
replace
的模式。 代码用于下一页,将上一页的
+1
更改为
-1

使用。您可以将其放入如下函数中:

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

函数goto(url){window.location=url;}

您还可以使用会话变量来隐藏它,这样您就可以这样做(我希望我的PHP技能仍然很好):


然后把这个放在你需要的地方

<?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>";
}
?>


请注意,当网络爬虫每次返回不同的页面时,网络爬虫将无法对此进行太多处理。

对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>");
}
函数转到(url){window.location=url;}
var curPage=parseInt(location.href.replace(/page([0-9]+)\.php/,“”))
如果(curPage=9){//替换为最高页码
//最后一页,无“下一页”链接
文件。写(“”);
}否则{
var nextPage=curPage+1;
文件。填写(“”);
}
如果查看页面的源代码,URL不会隐藏,但当鼠标悬停在链接上时,它们不会根据请求显示在浏览器的状态栏中


编辑使用Pikrass“更具体的一个”更新正则表达式,以处理URL中其他地方的其他数字。谢谢皮克拉斯

这是MidnightLightning的版本,它使用了更好的RegExp来获取当前页面,即使URL中有其他数字也可以使用

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>");
}
函数转到(url){window.location=url;}
var regPage=/page([0-9]+)\.php/;
var match=regPage.exec(location.href);
var curPage=parseInt(匹配[1]);
如果(curPage=9){//替换为最高页码
//最后一页,无“下一页”链接
文件。写(“”);
}否则{
var nextPage=curPage+1;
文件。填写(“”);
}
我喜欢由几个人组成的答案。:)


如果可以,请按照建议选择PHP代码。它更“干净”

听起来像是要使用查询字符串变量,所以
page.php?page=1
page.php?page=2
page.php?page=3
等等,为什么不使用ajax而不是iframe呢

好吧,没关系,您标记了问题jquery,因此我认为您可以使用另一个link属性“告诉”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 href="#" rel="page1.php">Go to page 1</a>
<a href="#" rel="page2.php">Go to page 2</a>
<!-- .. and so on.. -->
但是,如果您计划使用js链接,则永远无法完全隐藏页面URL

你可以用php和哈希字符串隐藏它们,但我不知道这是否值得


其他人建议使用regexp方法来计算页码和页面链接;我将通过PHP打印链接:这将让你更好地控制全局行为(我们不知道你有多少页,如果它们是与数据库相关的,即使你给我们的信息也会让我认为你的服务器上有所有的页面[x].PHP)

别忘了为第一页/最后一页添加额外的逻辑,为了防止链接显示到
page0.php
page-1.php
。替换不适用于数字,我只能使用文本。更改模式是什么意思?哦,我的URL中确实有一个数字,所以有没有一种方法可以使用page#.php?+1,但仅适用于php解决方案。这是其中唯一一个“隐藏”页码的。他也这么要求的。好主意!如果($\u GET['go']='home')$\u SESSION['curpage']=1,则最好在PHP脚本中添加一个
和适当的链接,以防您的会话变量被搞砸。@altCognito OP只要求URL在悬停在链接上方时不显示在状态栏中,而不是URL不显示在源代码中。我也希望+1,但我没有投票权,所以必须用此评论来支持它。如果不允许Web爬虫查看整个内容是一个问题,那么您可以检测爬虫并在一个页面中为其提供整个演示内容。这样,从搜索引擎发送的用户将到达您演示文稿的开头。当同一页面在同一会话中多次打开时,会发生冲突。而是使用带有基于请求的隐藏参数的POST表单。
<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.. -->
$.(document).ready(funciton(){
    $("a.navigation").live('click', function(){
        window.location = 'page' + $(this).attr("rel") + '.php';
    });
});