Dynamické snippety – filtrace pomocí selectu

netusipt
Člen | 5
+
0
-

Ahoj, mám stánku s nabídkami a chtěl bych je AJAXem filtrovat podle kategorie. Využívám knihovnu nette.ajax.

$(function() {
    $.nette.init();
});

V šabloně vytvářím select, který plním kategoriemi.

<select class="form-select categorySelect">
    <option selected value="0">Všechny kategorie</option>
    {foreach $categories as $category}
        <option value="{$category->id}">{$category->name}</option>
    {/foreach}
</select>

Na select jsem napojil AJAX.

categorySelect.onchange = function() {
    $.ajax({
        type: "POST",
        url: "?do=filterCategory",
        dataType: "json",
        data: {
            category: categorySelect.value
        }
    });
}

V presenteru request zpracuje metoda handleFilterCategory a vybere příspěvky z dané kategorie.

public function handleFilterCategory() {
    if($this->isAjax()) {
        $this->posts = $this->postManager->getAll(true, true)->where("category_id", $_POST["category"]);
        $this->redrawControl('offersContainer');
    }
}

V šabloně mám snippet offersContainer, který se z nějakého důvodu neaktualizuje.

{snippet offersContainer}
<div class="row">
{php $i = 0}
{foreach $offers as $offer}
    <div class="col-md mb-3">
        <div class="card post" style="width: 21rem;">
            <img class="image img-responsive card-img-top" src="data:image/jpeg;base64,{$offer->photo}"/>
            <div class="card-body">
                <h5 class="card-title text-1">{$offer->title}</h5>
                <h6 class="card-subtitle mb-2 text-muted text-1">{$offer->ref('users', 'user_email')->first_name} {$offer->user->last_name}</h6>
                <p class="card-text text-2">{$offer->description}</p>
                <a class="btn btn-success" n:href="Offer:detail $offer->id">Zobrazit</a>
            </div>
        </div>
    </div>
{/foreach}
</div>
{/snippet}

Díky Tracy vím, že se dotaz na server pošle, pouze se neaktualizuje snippet. Nevíte někdo co s tím? Předem děkuji za cenné rady. :)

MajklNajt
Člen | 494
+
0
-

predávaš si tie dáta aj do šablóny $this->template->offers = $this->post?

Editoval MajklNajt (12. 3. 2021 16:45)

David Matějka
Moderator | 6445
+
0
-

běžné volání $.ajax nette.ajax nezpracuje, musíš volat přes $.nette.ajax

netusipt
Člen | 5
+
0
-

MajklNajt napsal(a):

predávaš si tie dáta aj do šablóny $this->template->offers = $this->post?

Ano, předávám v renderu.

netusipt
Člen | 5
+
0
-

David Matějka napsal(a):

běžné volání $.ajax nette.ajax nezpracuje, musíš volat přes $.nette.ajax

Už vše funguje jak má. Díky moc!