2012-11-06 15 views
0

全部,如何使用視圖按鈕來調整控制器中的foreach?

我正在建立一個使用MVC模式的小型PHP站點。在我的Controller內部,我有一系列我想發送到View頁面的文章。但是,我希望文章在視圖中一次顯示一個,並且只有在用戶單擊某個按鈕時纔會更改爲下一個文章。一個按鈕只允許用戶看到下一篇文章,其他按鈕允許用戶「評級」或背書文章(該信息被髮送回控制器)轉到下一篇文章。

我該怎麼做?這些按鈕位於一個表單中,並且每個都有Javascript功能。代碼的簡化版本看起來就像是:

在控制器:

<?php 
    $array=array(10,11,12,13,14,15,16); 
    $_SESSION['next']=true; 
    foreach($array as $a){ 
    if($_SESSION['next']){ 
     $_SESSION['next']=false; 
     $view=$a; 
    } 
    } 
?> 

在View:

<script type="text/javascript"> 
    function doOne(){} 
    function doTwo(){} 
</script> 
<form class="ReviewArticles" method='POST' accept-charset="UTF-8" action='index.php?action=reviewArticles'> 
<p> 
    <textarea rows="4" cols="60" name='article' id='article' WRAP=SOFT> 
    <?php 
     echo $view; 
    ?> 
    </textarea> 
</p>  
<p> 
    <button type="button" name='showNext1' id='showNext1' onclick="doOne()" >Show next 1</button> 
    <button type="button" name='showNext2' id='showNext2' onclick="doTwo()" >Show next 2</button> 
</p> 
</form> 

我需要發送回Controller一些信息加載下一個項目在數組中。我還需要發送一些與用戶「贊同」該文章有關的其他數據,並且我希望這些數據一起發生(只有一個按鈕)。

+1

MVC並不代表「我的代碼」。你沒有模型圖層,「視圖」只是一個模板。 –

+0

是的,這是一個簡化版本,因爲再現整個事物真的沒有意義,這很重要。 – JDelage

+0

不,它不是。你寫的是http://codeangel.org/articles/simple-php-template-engine.html的變體,就像沒有發現過程序編程範例的人所做的那樣。 –

回答

2

我會說你有兩個選擇:

1)通過Ajax請求拉條信息,並顯示在用戶希望移動到下一篇文章。這是我認爲最好的方式,因爲它可以保證用戶擁有最新的文章版本。

2)加載時將文章信息存儲在頁面中。即將數據寫入JavaScript數組,隱藏的html元素或任何您喜歡的方法。當用戶點擊按鈕時,使用存儲在頁面上的數據加載文章。

這是否回答你的問題?

+0

我認爲AJAX是答案。我正在跳躍尋找其他方式.... :-) – JDelage

+0

爲什麼? AJAX是狗屎!每個網站幾乎都使用它,包括這個。您認爲如何在無需刷新頁面的情況下加載內容? – thatidiotguy

+0

好的:-)我不想使用AJAX,因爲我不太熟悉它。我知道錯誤的態度。讓我們以相反的方式來做:「很酷,這會讓我有機會刷新我的AJAX,Yoohoo!」。 – JDelage

1

這不是你想要在服務器端(即在PHP中)做的事情。減慢你的foreach循環只會降低瀏覽器中整個頁面的傳輸速度。您也無法「等待」用戶操作來繼續執行PHP。

如果你想獲得更高級和不想要的東西,你的答案在於JavaScript(即隱藏/顯示基於用戶操作的內容區域),或者甚至是AJAX(基於用戶操作,加載新內​​容到頁面)預先下載所有內容。

+0

我不確定我想將整個內容加載到瀏覽器的內存 - 這可能是很多東西。另外,無論如何,我需要在每篇文章後面都做一些服務器端的事情,因爲用戶可以爲文章簽署/評級。我不希望冒險將這些信息存儲在瀏覽器中,並冒着失去它的風險。 – JDelage

相關問題