Ajax odkazy, načítání stránek

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
motorcb
Člen | 552
+
0
-

Zdravím.
Chtěl bych odkazy v menu načítat do snippetu Ajaxem a měnit URL.
Jak na to? Chtěl bych použít: nette.ajax.js
@layout.latte:

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8">
   <title>{block title|striptags|upper}Nette Application Skeleton{/block}</title>
</head>
<body>
        <ul id="menu">
            <li><a href="{link Homepage:default}" class="ajax">1</a></li>
            <li><a href="{link Homepage:two}" class="ajax">2</a></li>
            <li><a href="{link Homepage:three}" class="ajax">3</a></li>
        </ul>

        {snippet content}
            <div id="content">
                {include content}
            <div>
        {/snippet}

	{block scripts}
	<script src="{$basePath}/js/jquery.js"></script>
	<script src="{$basePath}/js/netteForms.js"></script>
	<script src="{$basePath}/js/main.js"></script>
	<script src="{$basePath}/js/nette.ajax.js"></script>
	<script src="{$basePath}/js/ajax.js"></script>
	{/block}
</body>
</html>

Při kliku na položku v menu se posílá ajaxový požadavek. Jenže jak požadavek dostat do {snippet content} a změnit URL?

Děkuji za rady

greeny
Člen | 405
+
0
-

Ahoj, přečti si https://doc.nette.org/…ication/ajax#…, tam je to celkem hezky popsaný ;)
Změnit url umožňuje history.nette.ajax.js

motorcb
Člen | 552
+
0
-

greeny:

Díky, ale z https://doc.nette.org/…ication/ajax#… nevyčtu jak odkazu řeknu do jakeho snippetu se má nastavit jeho dokaz.

Když kliknu na <a href=„{link Homepage:two}“ class=„ajax“>2</a> tak bych potřeboval obsah z odkazu nastavit do:

{snippet content}
    <div id="content">
        {include content}
    <div>
{/snippet}
sKopheK
Člen | 207
+
0
-

Nejsem si jistý, co přesně myslíš tím „obsah z odkazu“, ale předpokládám, že se bavíme o obsahu stránky.

public function renderTwo()
{
	...
	if ($this->isAjax())
	{
		$this->redrawControl('content');
	}
}
motorcb
Člen | 552
+
0
-

sKopheK:

Díky, to vypada funkčně, ale bohužel nefunguje :-(
@layout.latte:

...
        {snippet content}
            <div id="content">
                {include content}
            <div>
        {/snippet}
...
public function renderThree()
{
    if ($this->isAjax())
    {
        echo "AJAX";
        $this->redrawControl('content');
    }
    else
    {
        echo "neni AJAX";
    }
}

Na pozadí se posílá požadavek: /homepage/three
V jeho response:

AJAX    <h1>Congratulations! 3</h1>

{"state":[]}

ale snippet content se nepřekreslí :-(

ajax.js:

$( function() {
    $.nette.init();
    // And you fly...
    alert("I'm flying");
} );

V consoli zadny problem nevidim

sKopheK
Člen | 207
+
0
-

V presenteru nic nevypisuj, všechno až v šabloně konkrétní akce, kde to zavřeš do bloku s názvem content.

motorcb
Člen | 552
+
0
-

@sKopheK:
Ano, tak to mám:
three.latte

{block content}
    <h1>Congratulations! 3</h1>
{/block}

Jsen jsem si v presenteru vypisoval zda se mi opravdu zavolá AJAXový požadavek.
Ikdyž odeberu echo z presenteru, tak stále nefunguje :-(

Editoval motorcb (3. 4. 2014 14:04)

sKopheK
Člen | 207
+
0
-

To jsem přehlédl, omlouvám se. Zkus si pohrát s těma snippetama – třeba je zkusit dát až do té šablony. Žádnou chybu tam taky nevidím.

jiri.pudil
Nette Blogger | 1029
+
0
-

Zkus ten snippet pojmenovat jinak než vkládaný blok. Snippety i bloky jsou interně zpracovávané stejnou metodou, možná se ti nějak přebíjejí.

motorcb
Člen | 552
+
0
-

Díky moc. Problém byl v názvu snippetu. Díky moc. Máte u mne pivo