2010-01-19 66 views
0

我正在創建一系列網頁的在線培訓「簡報」。這將是非常簡單的,並且已經設置了這樣的頁面:上一頁/上一頁使用Javascript?

page1.php中 使page2.php page3.php ... page20.php

我會去老學校,使用iframe來隱藏地址欄,因爲人們不應該能夠趕上命名約定並跳過。 (它不太嚴重,所以我想保持簡單)。

我想要做的是基於當前頁面,例如page5.php創建鏈接到page4.php和page6.html。顯然,不需要手動編寫每個頁面。

這將是理想的,如果這是一個JavaScript函數,因爲我不希望地址顯示在瀏覽器信息欄中,但我也開放給PHP技巧。

任何想法如何做到這一點?

回答

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

URL不能被隱藏,但他們沒有在瀏覽器的顯示按需要懸停在鏈接上時的狀態欄。

編輯用Pikrass'更具體的更新RegEx來處理URL中其他數字的其他數字。感謝Pikrass!

0
var actuPage = parseInt(location.href.replace(/[^0-9]/, ''))+1; 
location.href = 'page'+actuPage+'.php'; 

如果您的網址中沒有其他號碼,這應該有效。如果你這樣做,你必須改變replace的模式。 該代碼用於下一頁,將前一個+1更改爲-1

+0

不要忘記爲第一頁/結束頁面添加額外的邏輯,以防止鏈接顯示爲'page0.php'或者page-1.php '。 – MidnightLightning 2010-01-19 19:42:21

+0

替換不能使用數字,我只能使用文本。通過改變模式,你的意思是什麼? – wesbos 2010-01-19 20:43:11

+0

哦,我的網址中有一個數字,那麼有沒有辦法使用page#.php? – wesbos 2010-01-19 21:06:06

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

注意,網絡爬蟲將不能夠做很多與此不過,當它返回不同的頁面每次。

+0

+1,但僅限於php解決方案。這是唯一能夠「隱藏」頁碼的。他也是這樣要求的。 – cgp 2010-01-19 19:47:40

+0

好主意!可以很好地向PHP腳本添加一個'if($ _ GET ['go'] =='home')$ _SESSION ['curpage'] = 1;'和適當的鏈接,以防萬一您的會話變量混亂不知何故。 – MidnightLightning 2010-01-19 19:52:38

+0

@altCognito OP僅詢問當鏈接懸停時狀態欄中沒有顯示該URL,而不是該URL未顯示在源代碼中。 – MidnightLightning 2010-01-19 19:56:51

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代碼。它更「乾淨」。

0

聽起來像是你要使用的查詢字符串變量,所以page.php?page=1page.php?page=2page.php?page=3

0

你爲什麼不使用iframe的AJAX呢?

嗯,沒關係,你標記了問題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標記從<a>標籤許多onclick功能免費。

所以,您的標記將查找類似:

<a href="#" rel="page1.php">Go to page 1</a> 
<a href="#" rel="page2.php">Go to page 2</a> 
<!-- .. and so on.. --> 

或者,如果你仍然想隱藏真實的URL,你可以這樣做:

<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'; 
    }); 
}); 

但是你永遠無法完全隱藏頁面的URL,如果你是pl anning使用js鏈接。

你可以用php和隱藏的字符串來隱藏它們,但是我不知道它是否值得遊戲。

其他建議用正則表達式的方式來計算頁碼和頁面的鏈接;我將通過PHP打印鏈接:將讓你更好地控制全局行爲(我們不知道你有多少頁,如果它們的數字與數據庫相關,即使你給我們的信息會讓我覺得你有所有的頁面[x] .php在您的服務器上都是fisically)