Skip to content

Instantly share code, notes, and snippets.

@Kedrigern
Last active December 18, 2015 22:58
Show Gist options
  • Save Kedrigern/5857851 to your computer and use it in GitHub Desktop.
Save Kedrigern/5857851 to your computer and use it in GitHub Desktop.
Just gist...
<?php
class Column extends \Nette\Object
{
/**
* @var string
*/
public $name;
/**
* @var array
*/
public $onClick;
/**
* @param $name
*/
public function __construct($name)
{
$this->name = $name;
$this->onClick[] = function(ListComponent $lc, array $params) {
echo("<p>Handle z třídy column, ID: ".$params['id']."</p>\n");
};
}
/**
* @param ListComponent $lc
* @param array $params
*/
public function Click(ListComponent $lc, $params)
{
$this->onClick($lc, $params);
}
}
{block content}
{* default config *}
{control list}
{* config in presenter *}
{control list2}
<?php
/**
* Homepage presenter.
*/
class HomepagePresenter extends BasePresenter
{
/**
* @param ListComponent $lc
* @param array $params
*/
public function handlePresenter(ListComponent $lc, array $params)
{
echo("<p>Handle z presenteru</p>\n");
}
/**
* @return ListComponent
*/
protected function createComponentList()
{
return new ListComponent($this, 'list');
}
/**
* Alternative configuration replace default
* @return ListComponent
*/
protected function createComponentList2()
{
$list = new ListComponent($this, 'list2');
$cols['jedna'] = new Column('jedna');
$cols['jedna']->onClick[] = $list->handleGeneric;
$cols['jedna']->onClick[] = $this->handlePresenter;
$cols['jedna']->onClick[] = function(ListComponent $lc, array $params) {
echo("<p>Handle z anonymní funkce</p>\n");
die();
};
$cols['dva'] = new Column('dva');
$list->cols = $cols;
return $list;
}
}
<p>
{foreach $cols as $c}
{$c->name}<a n:href="default! $c->name, $iterator->counter">link s id {$iterator->counter}</a>
{/foreach}
</p>
<?php
class ListComponent extends \Nette\Application\UI\Control
{
/**
* @var array|column[]
*/
public $cols;
/**
* @param Nette\ComponentModel\IContainer $parent
* @param null $name
*/
public function __construct($parent, $name)
{
parent::__construct($parent, $name);
$this->config();
}
/**
* Configure handles
*/
public function config()
{
$this->cols['jedna'] = new Column('jedna');
$this->cols['jedna']->onClick[] = $this->handleGeneric;
$this->cols['jedna']->onClick[] = $this->presenter->handlePresenter;
$this->cols['jedna']->onClick[] = function(ListComponent $lc, array $params) {
echo("<p>Handle z anonymní funkce</p>\n");
die();
};
$this->cols['dva'] = new Column('dva');
}
/**
* Render
*/
public function render()
{
$this->template->cols = $this->cols;
$this->template->setFile(__DIR__ . '/ListComponent.latte');
$this->template->render();
}
/**
* @param string $name
* @param int $id
*/
public function handleDefault($name, $id)
{
$col = $this->cols[$name];
$params = array('id' => $id);
$col->Click($this, $params);
}
/**
* @param ListComponent $lc
* @param array $params
*/
public function handleGeneric(ListComponent $lc, array $params)
{
echo("<p>Handle z list component</p>\n");
}
}

Output

Po kliknutí na první handle:

Handle z třídy column, ID: 1

Handle z list component

Handle z presenteru

Handle z anonymní funkce
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment