Nákupní košík výpis produktů a počtem kusů

Ivan Hradil
Člen | 2
+
0
-

Ahojte,
jsem začátečník v php a s Nette pracuji chvíli nicméně něco jsem už v něm udělal. Postupně pokračuji dál a řeším složitější úkoly. Stále mi však některé věci nejsou jasné. Nyní řeším nákupní košík.

V prezenteru ProductsPresenter.php mám pro přidání zboží do košíku tohle

<?php
protected function createComponentShopForm(): Multiplier
{
    return new Multiplier(function ($id) {
        $form = new Nette\Application\UI\Form;
        $form->addText('count', 'Počet zboží:')
            ->addRule($form::FILLED)
            ->addRule($form::INTEGER);
        $form->addHidden('id', $id);
        $form->addSubmit('send', 'Přidat do košíku');
        $form->onSuccess[] = [$this, 'shopFormSucceeded'];
        return $form;
    });
}

public function shopFormSucceeded(Form $form, $values)
{
    $postId = $this->getParameter('id');
    $section = $this->session->getSection('cart');
    $section->setExpiration(0, $postId);
    $section->$postId = $values->count; //  přidat počet kusů

    $this->redirect('Cart:default');
} ?>

Zboží se přess session předá a v prezenteru CartPresenter.php vypíše takhle.

<?php
public function renderDefault()
    {
    	$section = $this->session->getSection('cart');

        $item = array();
        foreach ($section as $key => $quantity) {
            $item[] = $key;
        }
        $this->template->posts = $this->postsManager->getPosts()->where('id', $item);

    }

?>

V session se mi přidává id=>pocet kusů podel id vyhledám produkty z databáze, ale ještě nechápu jak k jednotlivým produktům v košíkům přiřadím těch počet kusů co jsem předal v session. Mohli byste mi prosím někdo poradit , jak no to jít.

Předem děkuji
Ivan

Editoval Ivan Hradil (14. 11. 2019 10:38)

KristianSubweb
Člen | 144
+
-2
-

Ahoj kukni si tento prispevok tam riešia https://forum.nette.org/…ozmerne-pole

Ešte taká malá rada. Ten formulár by si si mohol odpratať do model vrstvy časom sa bude obsah tvojich presenterov zvačšovať a budeš sa v tom tahšie orietovať. Taktiež aj to spracovanie toho formu by som tiež riešil v tej modelovej vrstve. Vytvoril si napríklad CardFormFactory.php v nej si vytvor napríklad getForm() kde budeš mať obsah tej funkcii v prezentery createComponentShopForm.

A potom by som si vytvoril triedu shopFormSucceeded kde to spracuješ.

Takto nejak: CardFormFactory.php

class CardFormFactory {

public function getForm(){

$form = new Nette\Application\UI\Form;
        $form->addText('count', 'Počet zboží:')
            ->addRule($form::FILLED)
            ->addRule($form::INTEGER);
        return $form;

}

public function createCardFormFactory($id){

	$form = $this->getForm();

	$form->addHidden('id', $id);
    $form->addSubmit('send', 'Přidat do košíku');
    $form->onSuccess[] = [$this, 'shopFormSucceeded'];

	return $form;
}

public function shopFormSucceeded(Form $form){

	$data

}

}

Presenter:

protected function createComponentShopForm(): Multiplier
{
    return new Multiplier(function ($id) {
        return $this->cardFormFactory->createCardFormFactory($id);
    });
}

:)

Ivan Hradil
Člen | 2
+
0
-

KristianSubweb napsal(a):

Ahoj kukni si tento prispevok tam riešia https://forum.nette.org/…ozmerne-pole

Ešte taká malá rada. Ten formulár by si si mohol odpratať do model vrstvy časom sa bude obsah tvojich presenterov zvačšovať a budeš sa v tom tahšie orietovať. Taktiež aj to spracovanie toho formu by som tiež riešil v tej modelovej vrstve. Vytvoril si napríklad CardFormFactory.php v nej si vytvor napríklad getForm() kde budeš mať obsah tej funkcii v prezentery createComponentShopForm.

A potom by som si vytvoril triedu shopFormSucceeded kde to spracuješ.

Takto nejak: CardFormFactory.php

class CardFormFactory {

public function getForm(){

$form = new Nette\Application\UI\Form;
        $form->addText('count', 'Počet zboží:')
            ->addRule($form::FILLED)
            ->addRule($form::INTEGER);
        return $form;

}

public function createCardFormFactory($id){

	$form = $this->getForm();

	$form->addHidden('id', $id);
    $form->addSubmit('send', 'Přidat do košíku');
    $form->onSuccess[] = [$this, 'shopFormSucceeded'];

	return $form;
}

public function shopFormSucceeded(Form $form){

	$data

}

}

Presenter:

protected function createComponentShopForm(): Multiplier
{
    return new Multiplier(function ($id) {
        return $this->cardFormFactory->createCardFormFactory($id);
    });
}

:)

Díky za radu, co se týče modelu, to mám v plánu, ale zatím to řeším v prezenteru. Až to vyřeším, tak to nějak předělám.