Skip to content

Instantly share code, notes, and snippets.

@fprochazka
Created October 27, 2010 06:58
Show Gist options
  • Save fprochazka/648584 to your computer and use it in GitHub Desktop.
Save fprochazka/648584 to your computer and use it in GitHub Desktop.
Pseudokód!
<?php
namespace Kdyby\Form;
use Nette;
use Kdyby;
/**
* Description of MyControl
*
* + revizování každého kroku ->getRevisions() ->getLastRevision()
* + plnění daty ->setValues(self::MERGED|self::STEPS, $data) ->addRevision('basics', $data)
*
* @author Filip Procházka <hosiplan@kdyby.org>
*/
class MyControl extends Kdyby\Control\StepContainer
{
/** Kdyby\Control\StepContainer
*
* final public function attached($presenter)
* {
* $this->setupSteps();
* parent::attached($presenter);
* }
*/
protected function setupSteps() // abstraktní předek
{
$this->template->setFile(__DIR__ . '/proCelyControl.phtml');
$this->addStep('basics', 'Základní nastavení')
// $this['basics'] = new Kdyby\Control\Step;
// Step::attached($parent) zavolá něco jako:
// $this->parent->createStep<$this->name>($this->parent['form'])
// automaticky doplní do třídy $this
->onValidNext('Pokračovat na detaily >', $methodOrStepName, $class = $this)
// OR just nothing, bez validátoru nic neudělá
->onInvalid($methodOrStepName, $class = $this)
->addAction('draft', 'Uložit do konceptů', callback('trida::metoda'))
->onValidStep('DetailsSended', $class = $this);
// $this->steps['basic'] === $this['basics']
$this['basics']->template->setFile(__DIR__ . '/jenomProPrvkyFormulareZTohotoKroku.phtml');
$this['basics']->getButtonPrototype('draft')->class('blue');
$this->addStep('details', 'Pokročilé')
->setValidator(new MyValidator)
->onValidFinish('FormFinished', $this)
// zařadí se za $this->createStep<krok>($form)
->addControlFactory(function($form) {
$form->addSubmit('cokoliv', "Nějaká akce");
})
->setControlFactory($callback); // přepíše všechny předchozí továrny
$this->setFormValues(self::MERGED, dibi::query('SELECT * FROM ...')->fetch());
// $this->setFirstStep('basics'); // nepovinné
$this->stepsFinishedDataFormat = self::STEPS; // or self::MERGED
/**
* $this->getSteps() == array(
*
* // $this->steps['basics']->title == "Základní nastavení"
* 'basics' => Kdyby\Control\Step ,
*
* // $this->steps['details']->title == "Pokročilé"
* 'details' => Kdyby\Control\Step
* )
*
* $this->getStepsNavigation() == array(
* 'this, step => "basics"' => "Základní nastavení",
* 'this, step => "details"' => "Pokročilé"
* )
*/
}
protected function createComponentForm($name) // abstraktní předek
{
$form = new Nette\Application\AppForm($this, $name); // předá step<name|index>
$this->validate[] = callback('Validators\someClass', 'validate');
return $form;
}
/** Kdyby\Control\StepContainer
*
* public function createComponent($name)
* {
* if (is_step($name)) {
* $stepName = getStepName($name);
* $this[$stepName] = $this->createComponentForm($stepName);
* }
*
* return parent::createComponent($name);
* }
*/
protected function createStepBasics($form)
{
$form->addSelect();
}
protected function createStepDetails($form)
{
$form->addSelect();
}
public function DetailsSended($form, $StepContainer)
{
}
public function FormFinished($data)
{
$stepBasics = $data['Basics'];
$stepDetails = $data['Details'];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment