2011-05-05 49 views
0

我正在使用JsHelper編寫JS鏈接來使用Ajax來加載頁面。像這樣:是否有CakePHP組件/插件爲ajax頁面進行永久鏈接?

<?= $this->Js->link($item['Series']['title'], array(
    'controller' => 'series', 
    'action' => 'view', 
    $item['Series']['id'] 
), array('update' => '#menu-items')); ?> 

這工作正常,但現在我想添加它,以便您可以鏈接到這些頁面。因此,例如,當您點擊鏈接時,它會將您重定向到example.com/#!/series/2。然後,您也可以轉到此網址,並將正確的頁面加載到#menu-items div中。

這是我必須從頭開始寫的東西,還是有一個CakePHP幫手或插件可用,會爲我做?我曾經有過這樣的經歷,但從來沒有使用過CakePHP,也不確定從哪裏開始。

感謝,

回答

1

我在現在解決它自己了個去,因爲我計算過,因爲沒有響應,那麼這樣的事情是不是已經專爲CakePHP的。

因此,首先的JavaScript:

var hash = ''; 
window.setInterval(function() { 
    if(hash != location.hash) { 
     hash = location.hash; 

     if(hash.indexOf('#!/') != -1) { 
      var url = hash.substr(2); 

      $('#my-div').load(url); 
     } 
    } 
}, 300); 

這樣做是什麼檢查,看看是否location.hash發生了變化,如果有,那麼它會檢查,看它是否與#!/開始。 (I.e #!/:controller/:action/:id是我正在尋找的散列)。然後它只是調用jQuery加載函數來加載該控制器和操作。

然後,我不得不修改我的鏈接,使用HtmlHelper中的url方法。

<? 
$hashUrl = $this->Html->url(array(
    'controller' => 'categories', 
    'action' => 'view', 
    $category['Category']['id'] 
)); 

echo $this->Html->link($category['Category']['title'], '#!' . $hashUrl); 
?> 

這爲控制器和操作的字符串,然後將其附加到#!link方法。這樣做可能看起來很長(你可能會寫一個自定義助手來使它成爲一行),但它可以讓你稍後改變config/routes.php中的URL。你最終得到這樣一個url:#!/categories/view/2

最後,你需要確保在你的控制器中你有這個在你使用的每個方法的末尾。

$this->render('view', 'ajax'); 

我並不是想象這是一個完美的解決方案,但它在目前做得非常好。也打開改進建議。

相關問題