Snippet + ajax vyhledávání

5 years ago

Filip023
Member | 13
+
0
-

Zdravím,
mám problém s rozběhnutí mého prvního snippetu. Chtěl jsem vyřešit s jeho pomocí vyhledávání + následné překreslení nabídky, ale z nějakého důvodu se mi nabídky nepřekreslí a zůstanou vždy ty co jsem měl na začátku. Nevíte, kde by mohl být problém?
OfferPresenter.php

<?php
use Nette\Application\UI\Form,
    Nette,
      Model;

class OfferPresenter extends BasePresenter
{
    private $offer;

protected function startup()
  {
    parent::startup();

    $this->offer = $this->context->offer;
  }

public function renderIndex()
{
    $this->template->offers = $this->offer->findAll()->order('created DESC');
}

public function handleSearch($term)
  {
    $this->template->offers = $this->offer->find(7);
    $this->redrawControl();
  }

}
?>

šablona

<?php
{block content}

  <div class="content" id="offer">
    <h2>Nabídka</h2>

    <div id="search_form">
      {form searchForm}
        {control $form errors}

        {label text /}
        {input text}

        {label category_id /}
        {input category_id}

        {input search}
      {/form}
    </div>
    {dump count($offers)}
    <div class="left">
      {if count($offers) > 0}
        {snippet results}
          {foreach $offers as $offer}
            // telo pro zobrazeni nabidek
          {/foreach}
        {/snippet}
      {else}
        <p>Aktuálně je naše nabídka prázdná!</p>
      {/if}
    </div>

  </div>
<script>
jQuery(window).ready(function() {
  $('#frm-searchForm-text').on('change input', function () {
    var value = $(this).val();
    if (value.length >= 2) {
        $.nette.ajax({
            'url': '?do=search',
            'data': {
                term: value
            }
        });
    }
  });
});
</script>
{/block}
?>

Na počátku se mi vykreslí nabídky s ID 6 a 7, po napsání textu by se měla zobrazit jen 7, ale zůstanou obě.

5 years ago

sKopheK
Member | 207
+
0
-

Určitě bych snippet zapsal minimálně takto, protože do budoucna budeš zobrazovat podle hledaného výrazu:

<div class="left">
{snippet results}
    {if count($offers) > 0}
            {foreach $offers as $offer}
                // telo pro zobrazeni nabidek
            {/foreach}
    {else}
    <p>Aktuálně je naše nabídka prázdná!</p>
    {/if}
{/snippet}
</div>

a dále bych překresloval jen požadovanou část stránky:

$this->redrawControl('results');

P.S.: Jsi v anglickém fóru.

Last edited by sKopheK (2014-03-26 09:09)

5 years ago

akadlec
Member | 1322
+
0
-

@sKophek: In your code is unnecessary html. It should be reduced like this:

<div n:snippet="results" class="left">
    {if count($offers) > 0}
            {foreach $offers as $offer}
                // telo pro zobrazeni nabidek
            {/foreach}
    {else}
    <p>Aktuálně je naše nabídka prázdná!</p>
    {/if}
</div>

PS: You are on EN version of this page…