<?php
$cnew->addText("input1", "Jméno 1")->addRule(
    function ($item, $arg){
         return $item->value == "ano";
    }
    , 'Číslo musí být dělitelné %d.', 8);
                                 
                                 
                        <?php
	public function handleTime()
	{
		$this['time'][1]->invalidateControl();
		$this['time-2']->invalidateControl();
	}
// LATTE
		{control time-1}
		{control time-2}
                                 
                                 
                        <?php
declare(strict_types = 1);
namespace Fp\Presenters;
use Fp\Template\TemplateHelpers;
use Nette\Application\UI\Presenter;
use Nette\Application\Helpers;
use Nette\Http\Url;
use Nette\Utils\Strings;
abstract class BasePresenter extends Presenter
{
	/** @var string */
	public $appDir;
	/** @var string */
	public $wwwDir;
	/** @var bool */
	public $productionMode;
	/** @var string */
	public $googleAnalyticsAccount;
	/** @var string */
	public $disqusShortname;
	/** @var string */
	public $twitterHandle;
	/** @var string */
	public $gplusAccountId;
	/** @var string */
	public $facebookUsername;
	/** @var string */
	public $facebookProfileId;
	/** @var string */
	public $githubRepository;
	/** @var \Fp\FaviconsLoader @inject */
	public $faviconsLoader;
	protected function startup()
	{
		parent::startup();
		if ($this->appDir === null) {
			throw new \Exception('%appDir% was not provided');
		}
	}
	protected function beforeRender()
	{
		parent::beforeRender();
		$this->template->wwwDir = $this->wwwDir;
		$this->template->productionMode = $this->productionMode;
		$this->template->faviconMetas = $this->faviconsLoader->getMetadata();
		$this->template->googleAnalyticsAccount = $this->googleAnalyticsAccount;
		$this->template->disqusShortname = $this->disqusShortname;
		$this->template->twitterHandle = $this->twitterHandle;
		$this->template->gplusAccountId = $this->gplusAccountId;
		$this->template->facebookUsername = $this->facebookUsername;
		$this->template->facebookProfileId = $this->facebookProfileId;
		$this->template->githubRepository = $this->githubRepository;
		$this->template->now = new \DateTimeImmutable();
		$canonicalUrlQuery = $this->getHttpRequest()->getUrl()->getQueryParameters();
		foreach ($canonicalUrlQuery as $queryParameter => $_) {
			if (Strings::startsWith($queryParameter, 'utm_')) {
				unset($canonicalUrlQuery[$queryParameter]);
			}
		}
		$this->template->canonicalUrl = (new Url($this->getHttpRequest()->getUrl()))->setQuery($canonicalUrlQuery);
	}
	protected function createTemplate()
	{
		/** @var \Nette\Bridges\ApplicationLatte\Template $template */
		$template = parent::createTemplate();
		$template->getLatte()->addFilter('filectime', 'filectime');
		$template->getLatte()->addFilter('timeAgo', TemplateHelpers::class . '::timeAgoInWords');
		return $template;
	}
	/**
	 * Formats layout template file names.
	 *
	 * @return string[]
	 */
	public function formatLayoutTemplateFiles(): array
	{
		if (is_string($this->layout) && preg_match('#/|\\\\#', $this->layout)) {
			return [$this->layout];
		}
		return [
			sprintf('%s/templates/@%s.latte', $this->appDir, $this->layout ?: 'layout'),
		];
	}
	/**
	 * Formats view template file names.
	 *
	 * @return string[]
	 */
	public function formatTemplateFiles(): array
	{
		list(, $presenter) = Helpers::splitName($this->getName());
		return [
			sprintf('%s/templates/%s/%s.latte', $this->appDir, $presenter, $this->view),
		];
	}
}
                                 
                                 
                        <?php
namespace Nette\Application\Responses;
use Nette;
/**
 * CSV download response.
 * Under New BSD license.
 *
 * @property-read string $name
 * @property-read string $contentType
 * @package Nette\Application\Responses
 */
class CsvResponse extends Nette\Object implements Nette\Application\IResponse
{
	/** @var array */
	private $data;
	/** @var string */
	private $name;
	/** @var bool */
	public $addHeading;
	/** @var string */
	public $glue;
	/** @var string */
	private $charset;
	/** @var string */
	private $contentType;
	/**
	 * @param array[]|\Traversable $data
	 * @param string $name
	 * @param bool $addHeading
	 * @param string $glue
	 * @param string $charset
	 * @param string $contentType
	 * @throws \InvalidArgumentException
	 */
	public function __construct($data, $name = NULL, $addHeading = TRUE, $glue = ';', $charset = 'utf-8', $contentType = NULL)
	{
		if (is_array($data)) {
			if (count($data) && !is_array(reset($data))) {
				$invalid = TRUE;
			}
		} elseif (!$data instanceof \Traversable) {
			$invalid = TRUE;
		}
		if (isset($invalid)) {
			throw new \InvalidArgumentException(__CLASS__.": data must be array of arrays or instance of Traversable.");
		}
		if (empty($glue) || preg_match('/^[\n\r]+$/s', $glue) || $glue === '"') {
			throw new \InvalidArgumentException(__CLASS__.": glue cannot be an empty or reserved character.");
		}
		$this->data = $data;
		$this->name = $name;
		$this->addHeading = $addHeading;
		$this->glue = $glue;
		$this->charset = $charset;
		$this->contentType = $contentType ? $contentType : 'text/csv';
	}
	/**
	 * Returns the file name.
	 * @return string
	 */
	final public function getName()
	{
		return $this->name;
	}
	/**
	 * Returns the MIME content type of a downloaded content.
	 * @return string
	 */
	final public function getContentType()
	{
		return $this->contentType;
	}
	/**
	 * Sends response to output.
	 * @param Nette\Http\IRequest $httpRequest
	 * @param Nette\Http\IResponse $httpResponse
	 */
	public function send(Nette\Http\IRequest $httpRequest, Nette\Http\IResponse $httpResponse)
	{
		$httpResponse->setContentType($this->contentType, $this->charset);
		if (empty($this->name)) {
			$httpResponse->setHeader('Content-Disposition', 'attachment');
		} else {
			$httpResponse->setHeader('Content-Disposition', 'attachment; filename="' . $this->name . '"');
		}
		$data = $this->formatCsv();
		$httpResponse->setHeader('Content-Length', strlen($data));
		print $data;
	}
	protected function formatCsv()
	{
		if (empty($this->data)) {
			return '';
		}
		$csv = array();
		if (!is_array($this->data)) {
			$this->data = iterator_to_array($this->data);
		}
		$firstRow = reset($this->data);
		if ($this->addHeading) {
			if (!is_array($firstRow)) {
				$firstRow = iterator_to_array($firstRow);
			}
			$labels = array();
			foreach (array_keys($firstRow) as $key) {
				$labels[] = ucfirst(str_replace(array("_", '"'), array(' ', '""'), $key));
			}
			$csv[] = '"'.join('"'.$this->glue.'"', $labels).'"';
		}
		foreach ($this->data as $row) {
			if (!is_array($row)) {
				$row = iterator_to_array($row);
			}
			foreach ($row as &$value) {
				$value = str_replace(array('"'), array('""'), $value);
			}
			$csv[] = '"'.join('"'.$this->glue.'"', $row).'"';
		}
		return join("\r\n", $csv);
	}
}
                                 
                                 
                        $input = $form->addInput('text');
$input->setDisabled(true); // nejdřív vypnout editaci
$input->setOmitted(false); // potom vypnout neodesílání
                                 
                                 
                        class RowWrapper extends Nette\Object
{
    protected $row;
    protected $data;
    public function __construct(Nette\Database\Table\ActiveRow $row)
    {
        $this->row = $row;
    }
    public function &__get($key)
    {
        if(isset($this->data[$key]) {
            $value = $this->data[$key];
        }
        $value = $this->row->$key;
        return $value;
    }
    public function __set($key, $value)
    {
        $this->data[$key] = $value;
    }
    //pripadne jeste related a ref
}
                                 
                                 
                        {form $form}
<ul class=error n:if="$form->ownErrors">
	<li n:foreach="$form->ownErrors as $error">{$error}</li>
</ul>
<table>
<tr n:foreach="$form->controls as $input" n:class="$input->required ? required">
	<th>{label $input /}</th>
	<td>{input $input} <span class=error n:ifcontent>{$input->error}</span></td>
</tr>
</table>
{/form}
                                 
                                 
                        		$this->user->login(new Nette\Security\Identity($row["id"], array(), $row));
		$this->redirectUrl($this->link('@homepage'));
                                 
                                 
                        {foreach $form[gender]->items as $key => $label}
    <label n:name="gender:$key"><input n:name="gender:$key"> {$label}</label>
{/foreach}