Nepřeklresluje se mi snippet

vanaveno
Člen | 144
+
0
-

Ahojte, nevím kde dělám chybu. Vytvořil jsem si košík do kterého vkládám produkty a chci to překreslovat to šabloně Ajaxově. V @layout.latte má includovaný kód košíku.

<?php
{snippet modal}

  <div class="show">{include '../../Front/templates/Cart/default.latte'}</div>

{/snippet}

    public function handleRemoveItem(int $key): void
    {
        $this->cartManager->removeItem($key);
        $this->template->items = $this->cartManager->getItems();

        $this->template->totalQuantity = $this->cartManager->totalQuantity;
        $this->template->totalPrice = $this->cartManager->totalPrice;
        $this->template->currency = $this->cartManager->currency;
        $this->redrawControl("modal");
    }
?>

Tohle mi funguje, ale nefunguje mi to, když je to přímo v šabloně presenteru cart.latte, tam už se mi to nepřekresluje.
Stejný způsobem jsem chtěl překreslit vkládání produktů do košíku, po kliknutí tlačítka Do košíku.

<?php
    public function handleAddToCart(int $productId): void
    {
        $product = $this->productManager->getProducts()->get($productId);
        $media = $this->mediaManager->getMediaProduct()->where('productId', $productId)->fetch();
        $price = $this->priceManager->getPrices()->where('productId', $productId)->fetch();
        //$category = $this->blogManager->getPostCategory()->where('postId', $key)->fetch();

        $item = new CartItem;
        $item->productId = $productId;
        $item->name = $product->name;
        $item->itemId = $product->itemId;
        $item->quantity = 1;
        $item->pricePerPiece = $this->priceManager->setPriceVat(
            $price->price,
            $price->vat,
            $price->rem,
            $price->autor
        );
        $item->image = $media->file;
        //$item->catId = $category->catId;
        $item->price = $item->quantity * $item->pricePerPiece;
        $currency = $this->priceManager->getPrices()->where('productId', $productId)->fetch();
        $item->currency = $currency->currency;

        $this->cartManager->addItem($item->productId, $item);

        $this->redrawControl("products");
    }

//Šablona products.latte
                        {snippet products}
                        <div n:foreach="$products as $id => $product">
						.....
						{/snippet}
?>

To mám ještě něco vložit do presenteru renderProducts() ??? nebo to překrseluje jen icludované šablony nebo kde je chyba. V první případě jsem testoval jestli je to ajax tak mi to psalo že true a v druhém případě false.
Díky za případnou pomoc

David Matějka
Moderator | 6445
+
0
-

V první případě jsem testoval jestli je to ajax tak mi to psalo že true a v druhém případě false.

takze se to ani ajaxove nevola? tzn provede se normalni neajax pozadavek?

vanaveno
Člen | 144
+
0
-

David Matějka napsal(a):

V první případě jsem testoval jestli je to ajax tak mi to psalo že true a v druhém případě false.

takze se to ani ajaxove nevola? tzn provede se normalni neajax pozadavek?

Tak zjistil jsem že mi se mi to v té šabloně presenetru košíku ajaxově přepisuje. Ale když vkládám produkt do košíku tak se mi to překreslí standardně neajaxově.

<?php
    public function handleAddToCart(int $productId): void
    {
        $product = $this->productManager->getProducts()->get($productId);
        $media = $this->mediaManager->getMediaProduct()->where('productId', $productId)->fetch();
        $price = $this->priceManager->getPrices()->where('productId', $productId)->fetch();
        //$category = $this->blogManager->getPostCategory()->where('postId', $key)->fetch();

        $item = new CartItem;
        $item->productId = $productId;
        $item->name = $product->name;
        $item->itemId = $product->itemId;
        $item->quantity = 1;
        $item->pricePerPiece = $this->priceManager->setPriceVat(
            $price->price,
            $price->vat,
            $price->rem,
            $price->autor
        );
        $item->image = $media->file;
        //$item->catId = $category->catId;
        $item->price = $item->quantity * $item->pricePerPiece;
        $currency = $this->priceManager->getPrices()->where('productId', $productId)->fetch();
        $item->currency = $currency->currency;

        $this->cartManager->addItem($item->productId, $item);

        $this->redrawControl("products");
    }

//Šablona products.latte
                        {snippet products}
                        <div n:foreach="$products as $id => $product">
						.....
						{/snippet}
?>

Tady je něco špatně, laděnka mi hlásí isAjax() false

vanaveno
Člen | 144
+
0
-

Ahoj, konečně jsem se k tomu dostal, vyřešil jsem to tak a teď nevím jestli je to správně.
Celý blok jsem dal
{snippetArea wrapper}
{block content}

nejaky kod
{snippet modal}
zde se to ajaxově změní
{/snippet}

{/block}
{/snippetArea}
Funguje mi to u handle signálů, ale když to chci použít u tohohle kodu

<?php
    protected function createComponentCartForm()
    {
        $form = new Form;

        $counts = $form->addContainer('quantities');
        foreach ($this->cartManager->getItems() as $id => $item) {
            $counts->addText('item_'.$id)->setDefaultValue($item->quantity)
                    ->setRequired('Musíte zadat množství')
                    ->addRule(Form::MIN, 'Minimální množství je %d.', 0);
        }

        $form->addSubmit('submit', 'Objednat')->onClick[] = [$this, 'submitCartForm'];
        $form->addSubmit('recalculate', 'Přepočítat')->onClick[] = [$this, 'recalculateCartForm'];

        return $form;
    }


    public function recalculateCartForm(\Nette\Forms\Controls\SubmitButton $button)
    {
        $this->cartManager->recalculateQuantities($button->form->values->quantities);


        $this->redrawControl('wrapper');
        $this->redrawControl("modal");
        bdump($this->isAjax());
    }

//zde je button který na to míří
<button n:name=recalculate >Přepočítat</button>
?>

Překreslí se to klasicky, ne ajaxově. Ten ajax funguje jen u handle signálů?
Díky za odpověď