/ Gists / Nette

Gists - Nette

On gists

Nette request - post / files

Nette

nette-post-files.php #

<?php

$this->request // UI\Presenter

$files = $this->request->getFiles();
$post = $this->request->getPost();

On gists

Získávání a pojmenovávání služeb

Nette Nette-Neon

config2.neon #

services:
baz: Foo\Baz (pro prvni pripad)
  - Foo\Baz (pro druhy pripad)

services:
  - Foo\Bar(@baz)
  - Foo\Bar(@Foo\Baz)
  
  
  
#multiple
foo1: Foo
foo2: Foo
bar: Bar(@foo1)

On gists

Macro - ukázkové

Nette

Macro.php #

<?php

namespace App\Utils;

use Latte;

class Macros extends Latte\Macros\MacroSet
{

    public static function install(Latte\Compiler $compiler)
    {
        $set = new static($compiler);

        $set->addMacro('currency', array($set, 'macroCurrency'));

        return $set;
    }


    public function macroCurrency(Latte\MacroNode $node, Latte\PhpWriter $writer)
    {
        return $writer->write(
            'echo \App\Utils\Macros::renderMacroCurrency(%node.word)'
        );
    }


    public static function renderMacroCurrency($currency = NULL)
    {
        $currency = $currency ?: self::$currency;

        switch ($currency) {
            case 'EUR': return "€";
            default: return 'Kč';
        }
    }

}

On gists

nette - autocomplete - handle ** via JS

Nette JavaScript jQuery

nette-js-handle-autocomplete.js #

        $('#autocomplete').focus().keyup(function(event) {
                            $.getJSON("\/?do=autoComplete", {'text': $('#autocomplete').val()}, function(payload) {
                                    $('ul.autocomplete').remove();

                                    var list = $('<ul class="autocomplete"></ul>').insertAfter('#autocomplete');

                                    for (var i in payload.autoComplete) {
                                            $('<li></li>').html(payload.autoComplete[i]).appendTo(list);
                                    }
                            });
                    }); 

On gists

Nette - DI - instance - service

Nette Nette-Tricks

dic.php #

<?php

$component = $this->context->createInstance('\\App\\Components\\'. $ucname );

if($component)
					$this->context->callInjects($component);
					

// $container je systémový kontejner, např. $presenter->context
$httpRequest = $container->getService('httpRequest');

// nebo zkráceně:
$httpRequest = $container->httpRequest;

On gists

Nette - expand

Nette Nette-Tricks Helpers-Filters-Plugins

nette-expand.php #

<?php
$pathToFile = $this->context->expand("%wwwDir%/files/soubor.pdf");

On gists

Control Poll - ajax, multiplier

Nette Nette-Controls Nette-Tricks

polls.latte #

{foreach $polls as $id => $poll}
    <h2>Anketa {$poll->name}</h2>
    {control poll-$id}
{/foreach}

On gists

Nette - kontrolka - dynamicke view / pohledy

Nette Nette-Controls Nette-Tricks

control.php #

<?php

namespace App\FrontModule\Components;

use Nette\Application\UI,
	Nette,
	Nette\Mail\Message,
	Nette\Mail\SendmailMailer,
	App,
	CardBook;


interface IContactUsFormFactory
{
	/** @return ContactUsForm */
	public function create ();
}


class ContactUsForm extends UI\Control 
{
	protected $userModel;
	protected $mailer;
	protected $messageFactory;
	
	/** @persistent */
	public $view;


	public function __construct (App\Model\User $user, Nette\Mail\IMailer $mailer, App\FrontModule\Factory\MessageFactory $messageFactory)
	{
		parent::__construct();

		$this->userModel = $user;
		$this->mailer    = $mailer;
		$this->messageFactory   = $messageFactory;
	}


	public function render() 
	{
		
		if (!$this->view)
			$this->template->setFile(__DIR__ . '/../templates/components/ContactUsForm/form.latte');
		else
			$this->template->setFile(__DIR__ . '/../templates/components/ContactUsForm/'.$this->view.'.latte');
		
		$this->template->render();
	}


	public function createComponentForm()
	{
		$form = new UI\Form;

		$form->addText("name", "Vaše jméno")
			 ->addRule($form::FILLED, "Vyplňte prosím jméno");

		
		$form->addText("email", "E-mail")
			 ->addRule($form::FILLED, "Vyplňte prosím email")
			 ->addRule($form::EMAIL, "Email není ve správném formátu");
		
		$form->addTextArea("message", "Vaše zpráva")
		     ->addRule($form::FILLED, "Vyplňte prosím Váš dotaz");

		$form->addSubmit("send", "Odeslat");

		$form->onSuccess[] = array($this, 'submitted');

		return $form;
	}


	public function submitted($form)
	{

		$values = $form->getValues();
	
	    $template = $this->createTemplate();
	    $template->setFile(__DIR__ . '/../templates/emails/contactus.latte');
		$template->title  = 'Napište nám';
		$template->values = $values;
	

		$mail = $this->messageFactory->create();
	

		//$mail = new Message;
		$mail->setFrom($values->email)
		     ->addTo(CardBook\Settings::ADMIN_EMAIL)
		     ->setSubject('Cardbook - napište nám')
		     ->setHtmlBody($template);
		
		$this->mailer->send($mail);


		// $mailer = new SendmailMailer;  1)

		// $mailer = new Nette\Mail\SmtpMailer(array(  2)
		// 		'host'     => 'smtp.savana.cz',
		// 		'username' => 'podpora@cardbook.cz',
		// 		'password' => 'uL$g4GHl6AR'
		// ));
		// $mailer->send($mail);

		// 3)
		// 
		
		//  arguments: [..., ..., %foo%, %bar%] #ano, opravdu dvojtecky

		// nebo:
		// arguments: [foo: %foo%, bar: %bar%]

		// nebo:
		// arguments: [2: %foo%, 3: %bar%]
 
		
        if ($this->presenter->isAjax()) 
        {
           	$this->view = 'save';
    		$this->redrawControl('contactUsForm');
     
        }
        else
        {
        	$this->redirect("this", array('view' => 'save'));
        }
		
	}


}

On gists

Image pipe for #nettefw templates

Nette Nette-Tricks

config.neon #

nette:
	latte:
		macros: [Img\ImgMacro]

services:
	imageStorage: Img\ImageStorage(%tempDir%)
	imagePipe: Img\ImagePipe(%wwwDir%)

On gists

Nette modální okno

Nette

edit.latte #

{block title}Editovat xyz{/block}

{block content}
<p class="buttons">
    <a class="btn btn-primary" n:href="default">
        <i class="fa fa-chevron-left"></i>
    </a>
</p>

{block modal}
    {control manageForm}
{/block}