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}
$router[] = new Route('<slug .+>', array(
null => Route::FILTER_IN => function($params) {
// nacist z databaze podle $params['slug'];
if (nenalezeno) {
return null;
}
unset($params['slug']);
$params['module'] = '...';
$params['presenter'] = '...';
$params['action'] = '...';
$params['id'] = '...';
$params['...'] = '...';
return $params;
},
null => Route::FILTER_OUT => function($params) {
// nacist $slug z db prodle $params['module'], $params['presenter'], $params['action'], ...
if (nenalezeno) {
return null;
}
unset($params['module'], $params['presenter'], ...);
$params['slug'] = $slug;
return $params;
},
));
require_once('./Nette/loader.php');
define(HESLO_MIN_ZNAKU,6);
define(URL_ADRESA_OBCHODNICH_PODMINEK,'http://www.example.com/');
function loginValidator($item){
return dibi::query('SELECT [id] FROM [zakaznici] WHERE [nick]=%s LIMIT 1',$item->getValue())->count() == 0 ? true : false;
}
$form = new Form('registracni_formular');
$form->setMethod('post');
$form->getElementPrototype()->id = 'registrace';
$form->getElementPrototype()->class = 'formular';
$form->addGroup('Přihlašovací údaje');
$form->addText('nick','Login:',25)
->addRule(Form::FILLED, 'Login nebyl vyplněn')
->addRule('loginValidator', 'Tento login již existuje');
$form->addPassword('heslo','Heslo:',25)
->addRule(Form::FILLED, 'Heslo nebylo vyplněno')
->addRule(Form::MIN_LENGTH, 'Heslo je příliš krátké', HESLO_MIN_ZNAKU)
->setOption('description','Heslo musí mít minimálně '.HESLO_MIN_ZNAKU.' znaků');
$form->addPassword('heslo2','Zopakujte heslo:',25)
->addRule(Form::FILLED, 'Heslo nebylo vyplněno')
->addRule(Form::EQUAL, 'Hesla se neshodují',$form['heslo']);
$form->addGroup('Povinné údaje');
$form->addText('email', 'Email:',35)
->addRule(Form::FILLED, 'Email nebyl vyplněn')
->addRule(Form::EMAIL, 'Zadaný email není platným emailem')
->emptyValue = '@';
$typ_osoby = array(
'1' => 'Fyzická osoba',
'2' => 'Právnická osoba',
);
$form->addRadioList('typ', 'Typ:', $typ_osoby)->addRule(Form::FILLED, 'Vyberte typ registrovaného subjektu')->addCondition(Form::EQUAL, 2)->toggle('povinneUdajePravnicka');
$form->addText('jmeno','Jméno:',35)->addRule(Form::FILLED, 'Zadejte jméno');
$form->addText('prijmeni','Příjmení:',35)->addRule(Form::FILLED, 'Zadejte příjmení');
$form->addText('ulice','Ulice:',35)->addRule(Form::FILLED, 'Zadejte ulici');
$form->addText('mesto','Město:',35)->addRule(Form::FILLED, 'Zadejte město');
$form->addText('psc','PSČ:',35)->addRule(Form::FILLED, 'Zadejte PSČ');
$souhlasLabel = Html::el()->setHtml('Souhlasím s <a href="'.URL_ADRESA_OBCHODNICH_PODMINEK.'" target="_blank">obchodními</a> podmínkami.');
$form->addCheckbox('souhlas', $souhlasLabel)->addRule(Form::FILLED, 'Pro pokračování je nutné souhlasit s podmínkami.');
$form->addGroup('Povinné údaje právnické osoby')->setOption('container', Html::el('fieldset')->id('povinneUdajePravnicka'));
$form->addText('firma','Firma:',35)->addConditionOn($form['typ'], Form::EQUAL, 2)->addRule(Form::FILLED,'Zadejte firmu');
$form->addText('ico','IČO:',35)->addConditionOn($form['typ'], Form::EQUAL, 2)->addRule(Form::FILLED,'Zadejte IČO');
$form->addText('dic','DIČ:',35)->addConditionOn($form['typ'], Form::EQUAL, 2)->addRule(Form::FILLED,'Zadejte DIČ');
$form->addGroup('Nepovinné údaje')->setOption('container', Html::el('fieldset')->id('nepovinneUdaje'));
$form->addText('telefon','Telefon:',35);
$form->addText('mobil','Mobil:',35);
$form->addText('fax','Fax:',35);
$form->setCurrentGroup(NULL);
$form->addSubmit('ok','Registrovat se')->getControlPrototype()->class = 'submit';
$form->addProtection('Vypršela platnost formuláře.');
if ($form->isSubmitted() and $form->isValid()) {
$values = $form->getValues();
unset($values['heslo2']);
unset($values['souhlas']);
$ok = dibi::query('INSERT INTO [zakaznici] %v',$values);
//..... nasleduje redirect
} else {
$defaults = array('typ'=>1);
$form->setDefaults($defaults);
}
{var $parent = 0}
{var $level = 0}
{block menu}
{if isset($gbookTree[$parent])}
{foreach $gbookTree[$parent] as $id => $row}
{var $initials = explode(" ", $row['name'], 2)}
{var $indent = 0}
{if $level == 1}
{var $indent = 0}
{elseif $level > 1}
{var $indent = 100}
{/if}
{* discussion item *}
<div class="blog-discussion__item blog-discussion__item--last" style="margin-left: {$indent}px" id="cmt-{$id}">
<div class="blog-discussion__image">
{if $level > 1}
<img src="/assets/gfx/gbook-reaction.jpg" alt="" />
{/if}
<div class="blog-discussion__circle{if $level > 0} blog-discussion__circle--small{/if}">{$initials[0]|truncate:1,''} {ifset $initials[1]}{$initials[1]|truncate:1,''}{/ifset}</div>
</div>
<div class="blog-discussion__content">
<div class="blog-discussion__name">
{$row['name']}
</div>
<div class="blog-discussion__date">
{$row['create_date']|date:'j.n.Y'}
</div>
<div class="blog-discussion__text">
<p>{$row['msg']}</p>
<p><a href="" data-text="{_}Reagujete na uživatele{/_}: {$row[name]}" class="blog-answer">{_}answer{/_}</a></p>
</div>
</div>
{ifset $gbookTree[$id]}
{include #menu, parent => $id, level => $level + 1 }
{/ifset}
</div>
{/foreach}
{/if}
{/block}
{** Bootstrapové vykreslení paginatoru *}
{default $maxOdkazu = 15}
{default $postupnychStranek = 4}
{var $min = $paginator->getBase()}
{var $max = $paginator->getPageCount()}
{var $pocet = ($max - $min)}
{var $aktStrana = $paginator->getPage()}
{var $doplnkovychStran = $maxOdkazu - 2 - ($postupnychStranek*2) + 1}
{var $volnychMist = $maxOdkazu - $doplnkovychStran}
{var $doplnkovyKrok = ceil(($max - $min) / $volnychMist)}
<ul class="pagination">
{* odkaz na předchozí stranu, když jsem na první straně tak odkazuje na sebe *}
<li n:class="$paginator->isFirst()?disabled"><a n:href="this, page => $paginator->isFirst()?$aktStrana:($aktStrana-1)">«</a></li>
{if (($max-$min)<=$maxOdkazu)} {* Dají se odkazy vykreslit postupně? *}
{for $p = $min;$p<=$max;$p++}
<li n:class="($aktStrana == $p)? active">
<a n:href="this, page => $p">{$p}</a>
</li>
{/for}
{else}
{for $p = $min;$p<=$max;$p++}
{var $prvniAPosledni = ($p == $min || $p == $max)}
{var $nejblizsiRozsah = ($p > ($aktStrana - $postupnychStranek) && $p < ($aktStrana + $postupnychStranek))}
{var $doplnek = (($p % $doplnkovyKrok) == 0)}
{if $prvniAPosledni || $nejblizsiRozsah || $doplnek}
<li n:class="($aktStrana == $p)? active">
<a n:href="this, page => $p">{$p}</a>
</li>
{/if}
{/for}
{/if}
{* odkaz na následující stranu, když jsem na poslední straně tak odkazuje na sebe *}
<li n:class="$paginator->isLast()?disabled"><a n:href="this, page => $paginator->isLast()?$aktStrana:($aktStrana+1)">»</a></li>
</ul>
public function createTemplate($class = NULL)
{
$template = parent::createTemplate($class);
$template->addFilter('streakBar', function($s, $maxBar = 5, $paramId){
if ($paramId == 1470)
{
$streakBar = \Nette\Utils\Html::el('div')->addClass('streak-bar');
$off = $maxBar - $s;
$on = $s;
for ($i = 1; $i <= $on; $i++)
{
$onBar = \Nette\Utils\Html::el('div')->addClass('bar on');
$streakBar->add($onBar);
}
for ($i = 1; $i <= $off; $i++)
{
$offBar = \Nette\Utils\Html::el('div')->addClass('bar off');
$streakBar->add($offBar);
}
return $streakBar->addTitle($on . '/' . $maxBar);
}
return $s;
});
return $template;
}
<?php
$mpdf = new \mPDF('utf-8','A4','','',12,12,2,2,10,10, 'P');
$mpdf->useOnlyCoreFonts = true;
$mpdf->SetDisplayMode('fullpage');
$this->template->setFile(INDEX_DIR . '/app/FrontModule/templates/ConfigIt/pdf.latte');
$mpdf->WriteHTML((string) $this->template);
$mpdf->Output($name, 'd');
$this->terminate();
(function($, undefined) {
$.nette.ext('spinner', {
init: function () {
spinner = $('<div></div>', { id: "ajax-spinner" });
spinner.appendTo("body");
},
before: function (xhr, settings) {
$("#ajax-spinner").css({
visibility: "visible",
left: settings.nette.e.pageX,
top: settings.nette.e.pageY
});
},
complete: function () {
$("#ajax-spinner").css({
visibility: "hidden"
});
}
});
})(jQuery);