Nepřeklresluje se mi snippet
- vanaveno
- Člen | 144
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
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
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
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ěď