2015-03-25 49 views
0

我想實現頁面的分頁功能。我有自定義的帖子類型,我已經循環並收集了此頁面的所有帖子。我顯示第一篇文章並隱藏其餘部分,並且我有下一個/上一個按鈕,它們將顯示下一篇文章並隱藏當前文章。它似乎在工作,但是我無法查看所有帖子 - 只有其中2個。點擊給變量另一個值

這裏是我的代碼:

<?php 
      $currProj = 1; 
      $countposts = 3; 
      ?> 
       <?php if ($countposts>1) { 
        $prevID = $currProj - 1; 

        if ($prevID <= 0) { 
         $prevID = $countposts; 
        ?> 
         <a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a> 
        <?php } else { 
        ?> 
         <a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a> 
        <?php 
        //$currProj = $prevID; 
        } 

        echo $currProj; //This outputs 3 where it should be 1 
        $nextID = $currProj + 1; 

        if ($nextID > $countposts) { 
         $nextID = 1; 

        ?> 
         <a class="btn-next" id="nextlink" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $nextID; ?>')" onclick="<?php $currProj=$nextID; ?>"> Next > </a> 
        <?php } else { 

        ?> 
         <a class="btn-next" id="nextlink" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $nextID; ?>')" onclick="<?php $currProj=$nextID; ?>"> Next > </a> 
        <?php 
        //$currProj = $nextID; 
        } 

       } ?> 

JavaScript函數工作正常,這個問題似乎是$ currProj變量。我認爲問題在於標記中的onClick屬性 - 是否有更好的方法讓onClick事件給我的變量賦予不同的值?或者檢查這個鏈接是否被點擊的方法,然後給currProj prevID/nextID的值?

我一直堅持這一段時間了,我似乎沒有得到任何地方。任何幫助將不勝感激。

+1

'onclick =「<?php $ currProj = $ prevID;?>」'你想比較嗎?或者你只是分配?在任何一種情況下,你都需要放入'echo':'onclick =「<?php echo $ currProj = $ prevID;?>」' – NaijaProgrammer 2015-03-25 11:48:29

回答

0

上面的代碼似乎混淆了服務器端發生的事情和客戶端發生的事情。任何包裹在<?php ... ?>將要在服務器上執行,然後發送到客戶端的HTML - 例如,該行:

<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a> 

最終會被髮送到客戶端與所有的PHP的解釋:

<a class="btn-previous" href="javascript:showProject(1,3)" onclick=""> < Previous </a> 

這裏的關鍵事情是這樣的你重新運行PHP當你點擊 - 客戶端是完全不可知的PHP永遠不必一直存在。每次單擊「上一個」按鈕時,其href屬性仍爲javascript:showProject(1,3)

你有兩個選擇;也就是說,您可以回到服務器,並在您單擊下一個/上一個按鈕時重新呈現頁面,方法是將這些變量作爲參數添加到您的頁面中,例如從URL獲取當前項目並鏈接如下:

$currProj = ($_REQUEST['currProj'] ? $_REQUEST['currProj'] : 1); 
... 
<a class="btn-previous" href="<?php echo '[your_url_here]?currProj=' . $prevID ?>"> 

但是,它看起來像你有興趣做到這一點,而無需再次ping服務器。在這種情況下,你需要在javascript中存儲,引用和更新這些變量。有可能有一千種方法來做到這一點;在關閉到你彷彿想要做的是讓你的showProject功能不接受參數,而是弄清楚它需要根據當前項目的價值做了什麼,有點像

var currProj = <?php echo $currProj; ?>; // this initializes the JS variable currProj from whatever it is in PHP when the server sends the page contents 
var countposts = <?php echo $countposts; ?>; // initialize this too 
var showPrevProject = function showPrevProject() { 
    // hide the current project using jQuery; assumes the DOM element you want to hide is given ID #project-[currProj] 
    $('#project-' + currProj).hide(); 

    // Update the current project variable in JS; scope should update globally 
    currProj = currProj - 1; 
    if (currProj === 0) { currProj = countposts; } 

    // Now show that element 
    $('#project-' + currProj).show(); 
} 

然後在你的鏈接,您可以根據需要使用showNextProjectshowPrevProject

但是,更一般的情況是,將您的javascript作爲單獨的文件並註冊事件處理程序來處理這類事情可能會更好。我還建議檢查jQuery,這是一個功能強大的庫,它極大地簡化了對DOM元素的訪問和操作。

+0

嗨!很抱歉,遲到的回覆 - 我不得不把這個項目擱置一段時間,但我現在回來了。 非常感謝您的幫助!你說的話和邏輯對我來說很有意義,但是我似乎在執行它時遇到了麻煩。我確信我只是忽略了一些愚蠢的東西。 我使用了上面給出的代碼,但它給出了一個錯誤 「SyntaxError:expected expression,got';' var currProj =;「 所以它似乎沒有通過$ currProj變量。 其次,我不知道如何在我的鏈接中傳遞這些「showPrevProject」/「showNextProject」變量。 – Sunshingun 2015-04-08 13:12:55

+0

@ annie-d要傳遞javascript函數,請在您的定位標記中使用'onclick =「showNextProject()」'(例如,請參閱https://jsfiddle.net/h19w79zj/)。對於'currProj'問題,是在JS中運行賦值的時候在PHP中定義的變量('var currProj = <?php echo $ currProj;?>;')? – 2015-04-08 18:04:11

0

如何創建HTML隱藏輸入來存儲這些值?

<input type="hidden" value="<?php echo $currProj ?>" id="currProj"> 

所以你可以訪問它並在客戶端用javascript或jQuery修改它。如果你想要一個解決方案服務器端,你可以用ajax和POST或GET請求來完成。

也許這不是你正在尋找的(修改php的屬性),我誤解了你。讓我知道如果這是你的情況。

相關問題