Dynamické snippety – filtrace pomocí selectu
- netusipt
- Člen | 5
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. :)
- David Matějka
- Moderator | 6445
běžné volání $.ajax
nette.ajax nezpracuje, musíš volat
přes $.nette.ajax