Jak vytvořit ve WordPressu šablonu stránky

HTMLToto je aktualizovaný článek z počátku roku 2010. V době jeho vydání ještě nebylo možné vytvářet ve WordPressu více typů obsahu a tím web dělit i jinak, než na příspěvky a stránky. Nyní to možné je, ale přesto se šablony stránek stále hodí.

Jde zkráceně o to, že si při vytváření nové stránky (nebo editování stránky starší) zvolíte, jaký soubor bude v motivu vzhledu použit.

To znamená, že stránky mohou různě vypadat a mohou mít i jiné prvky. Jak bylo naznačeno, jde jenom o vytvoření dalšího souboru v adresáři s motivem vzhledu, tedy kromě page.php (šablona klasické stránky) přidáte ještě další soubor s vlastním pojmenováním, který bude sloužit jako další šablona pro jiný typ stránek.

Jak na to

Asi nejjednodušším způsobem je vytvořit soubor, zkopírovat do něj obsah právě page.php a potom upravit dle svých představ. Můžete použít jiné styly a tím pádem jiné rozměry stránky apod. V již hotových motivech vzhledu je často tento systém použit pro šablonu stránky bez postranního bloku, tedy sidebar.php.

Každý soubor přitom musí mít definován svůj název hned na začátku souboru. Zápis vypadá takto:

/*

Template Name: bez menu

*/

Název bez menu potom dostanete při vytváření nebo editování stránky ve výběru pravého panelu administrace, na názvu souboru samotného přitom nezáleží.

Takto můžete např. vytvořit deset různých šablon stránek (sablona1.php, sablona2.php atd.). Při tvorbě obsahu v administraci se pak rozhodnete, jakou šablonu zrovna chcete použít.

WordPress - panel administrace

V šablonách můžete provést libovolné úpravy. Třeba použít jinou barvu pozadí, stránku udělat širší nebo naopak užší. Nezapomínejte ale, že napojení na stylopis je už v souboru header.php, takže když budete chtít použít jiné stylování, musíte ho do stylopisu zapsat a v šabloně změnit.

Bez menu

Ve stránce s názvem bez menu můžete třeba, jak název napovídá, vynechat menu, neboli navigaci webu ve formě postranní nabídky s odkazy.

Uděláte to tak, že zjistíte, jak layout webu vypadá a jak je zapsán v souboru style.css. Předpokládejme třeba, že obsahová část je od levého okraje webu odsazena pomocí zápisu CSS třeba: margin-left:200px (200px od levého okraje). Ve vzniklém prostoru o šířce 200px je potom vloženo menu.

Napřed tedy ze stránky odstraňte kód, který menu vkládá:

<?php get_sidebar(); ?>

A aby po něm nezůstalo prázdné místo, změňte název obsahové části a ve stylopisu zapište, že bude vzdálen například pouhých 5px. Tím místo vyhrazené pro postranní panel zmizí.

Tip na závěr – zobrazení seznamu článků

Může sloužit jako mapa webu, ale můžete nechat zobrazit třeba jenom posledních deset článků v jednoduchém seznamu. Používá se právě šablona stránky, do níž vložíte tento kód:


<ul>

<?php $archive_query = new WP_Query('showposts=10');

while ($archive_query->have_posts()) : $archive_query->the_post();?>

<li><a href="<?php the_permalink() ?>" rel="bookmark" title="Trvalý odkaz příspěvku <?php the_title(); ?>"><?php the_title(); ?></a></li>

<?php endwhile; ?>

</ul>

Na místo čísla 10 doplňte vlastní požadovaný počet zobrazených článků.

Add a custom argument to WordPress filter function

Sometimes we’d appreciate a possibility to add another parametr to function called as a filter callback. WordPress „prefills“ the callbacked function with it’s own, pre-defined, parameters and we often have to look for workarounds (global variables, transitions etc.). With PHP 5.3, anonymous function and closures, we don’t have to look for this anymore. Have a look on this simple snippet:

$my_var = 10; //can be just anything...
add_filter( 'the_content', function( $content ) use ($my_var){
	my_real_callback_function( $content, $my_var );
}, 10, 1 );

my_real_callback_function( $content, $my_var ){
... //do whatever you want to do with the content and you variable
}

If you’d appreciate a tip for removing filter with anonymous function, checkout my another post.

Add a custom argument to WordPress filter function

Sometimes we’d appreciate a possibility to add another parametr to function called as a filter callback. WordPress „prefills“ the callbacked function with it’s own, pre-defined, parameters and we often have to look for workarounds (global variables, transitions etc.). With PHP 5.3, anonymous function and closures, we don’t have to look for this anymore. Have a look on this simple snippet:

$my_var = 10; //can be just anything...
add_filter( 'the_content', function( $content ) use ($my_var){
	my_real_callback_function( $content, $my_var );
}, 10, 1 );

my_real_callback_function( $content, $my_var ){
... //do whatever you want to do with the content and you variable
}

If you’d appreciate a tip for removing filter with anonymous function, checkout my another post.

WordPress remove filter with anonymous function / object

PHP 5.3 introduced anonymous functions and those can passed as an argument to WordPress add_filter function

add_filter( 'the_content', function( $content ){ 
	return trim( $content ); 
}, 10 );

This is super helpful as we don’t have to create new functions for such simple filtering as trimming of the content is. Plus this approach gives us an option to add custom arguments/parameters to a WordPress filter (checkout my another article on this topic).

A problem might arise when we need to remove such filter. How do we do that? WordPress is storing all filters in a global associative array. And does it store with unique filter_id generated by a _wp_filter_build_unique_id function.

This function is called from inside of add_filter and remove_filter function and it’s output stay constant for same input ( tag, function, priority ). So we can take advantage of this function and create our remove_filter_by_unique_id function. It’s derived from original remove_filter function, just with one line left (commented out in this example):

function remove_filter_by_unique_id( $tag, $function_to_remove, $priority = 10 ) {
	//$function_to_remove = _wp_filter_build_unique_id($tag, $function_to_remove, $priority);
	$r = isset($GLOBALS['wp_filter'][$tag][$priority][$function_to_remove]);
	if ( true === $r) {
		unset($GLOBALS['wp_filter'][$tag][$priority][$function_to_remove]);
		if ( empty($GLOBALS['wp_filter'][$tag][$priority]) ){
			unset($GLOBALS['wp_filter'][$tag][$priority]);
		}
		unset($GLOBALS['merged_filters'][$tag]);
	}	
	return $r;
}

We can use that function in this way:

$filter_id = _wp_filter_build_unique_id( 'the_content', function( $content ){
	return trim( $content );
}, 10  );
add_filter( 'the_content', function( $content ){
	return trim( $content );
}, 10 );
the_content();
remove_filter_by_unique_id( 'the_content', $filter_id, 10 );

But wait, we have still have to copy the anonymous function itself twice. This is not good. Let’s create our own add_filter function returning unique_filter_id for us. Again, simple, it’s just about updating a single line:

function add_annonymous_function_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
	global $wp_filter, $merged_filters;
	$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
	$wp_filter[$tag][$priority][$idx] = array('function' => $function_to_add, 'accepted_args' => $accepted_args);
	unset( $merged_filters[ $tag ] );
	//return true; -- we've replaced this line by the following one
	return $idx;
}

So the final usage will look like this:

$filter_id = add_annonymous_function_filter( 'the_content', function( $content ){
	return trim( $content );
}, 10 );
the_content();
remove_filter_by_unique_id( 'the_content', $filter_id, 10 );

This example is really simple, we could use get_the_content() instead of the_content() function and trim the output just before echoing it, but keep in mind, that this is just an example of anonymous function in WordPress filters.

 

WordPress remove filter with anonymous function / object

PHP 5.3 introduced anonymous functions and those can passed as an argument to WordPress add_filter function

add_filter( 'the_content', function( $content ){ 
	return trim( $content ); 
}, 10 );

This is super helpful as we don’t have to create new functions for such simple filtering as trimming of the content is. Plus this approach gives us an option to add custom arguments/parameters to a WordPress filter (checkout my another article on this topic).

A problem might arise when we need to remove such filter. How do we do that? WordPress is storing all filters in a global associative array. And does it store with unique filter_id generated by a _wp_filter_build_unique_id function.

This function is called from inside of add_filter and remove_filter function and it’s output stay constant for same input ( tag, function, priority ). So we can take advantage of this function and create our remove_filter_by_unique_id function. It’s derived from original remove_filter function, just with one line left (commented out in this example):

function remove_filter_by_unique_id( $tag, $function_to_remove, $priority = 10 ) {
	//$function_to_remove = _wp_filter_build_unique_id($tag, $function_to_remove, $priority);
	$r = isset($GLOBALS['wp_filter'][$tag][$priority][$function_to_remove]);
	if ( true === $r) {
		unset($GLOBALS['wp_filter'][$tag][$priority][$function_to_remove]);
		if ( empty($GLOBALS['wp_filter'][$tag][$priority]) ){
			unset($GLOBALS['wp_filter'][$tag][$priority]);
		}
		unset($GLOBALS['merged_filters'][$tag]);
	}	
	return $r;
}

We can use that function in this way:

$filter_id = _wp_filter_build_unique_id( 'the_content', function( $content ){
	return trim( $content );
}, 10  );
add_filter( 'the_content', function( $content ){
	return trim( $content );
}, 10 );
the_content();
remove_filter_by_unique_id( 'the_content', $filter_id, 10 );

But wait, we have still have to copy the anonymous function itself twice. This is not good. Let’s create our own add_filter function returning unique_filter_id for us. Again, simple, it’s just about updating a single line:

function add_annonymous_function_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
	global $wp_filter, $merged_filters;
	$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
	$wp_filter[$tag][$priority][$idx] = array('function' => $function_to_add, 'accepted_args' => $accepted_args);
	unset( $merged_filters[ $tag ] );
	//return true; -- we've replaced this line by the following one
	return $idx;
}

So the final usage will look like this:

$filter_id = add_annonymous_function_filter( 'the_content', function( $content ){
	return trim( $content );
}, 10 );
the_content();
remove_filter_by_unique_id( 'the_content', $filter_id, 10 );

This example is really simple, we could use get_the_content() instead of the_content() function and trim the output just before echoing it, but keep in mind, that this is just an example of anonymous function in WordPress filters.

 

Úprava more linku – odkazu na pokračování článku (read-more)

Pokračování článkuVe WordPressu se úvod článku (perex) odděluje od jeho pokračování značkou <!–more–>.

WordPress pak automaticky na toto místo vloží odkaz, nejčastěji česky přeložený jako „pokračovat ve čtení“, „číst celý článek“, „číst dál“, „přečíst celý článek“ apod.

Toto počeštění můžete provést sami, stejně jako úpravy vzhledu tohoto odkazu a chování při rozkliknutí článku. Pokud chcete, aby se čtenář dostal na celý článek od začátku a ne na pokračování, pomůže vám plugin Custom More Link Complete.

Úpravy samotného odkazu ve zdrojovém kódu

Upravit odkaz na pokračování článku je možné v šablonách motivu vzhledu, tedy všude tam, kde se tento odkaz nachází.

<?php the_content('Pokračuj ve čtení &raquo;'); ?>

Zde můžete provést pevné počeštění ve své šabloně, kterou nehodláte nechávat aktualizovat někým jiným (pokud to chcete dělat, zkuste Child Themes.

Úpravy vzhledu odkazu (style.css)

More link má WordPressem přiřazenou třídu more-link. Pokud ji ve svém stylopisu (souboru style.css) nemáte, můžete ji doplnit:

Příklad:

.more-link {
display: block;
float: right;
margin: 0 10px 0 0;
text-decoration: underline;
color: #dd0a0a;
font-size: 0.9em;
font-weight: normal;
}

Změna obsahu more linku s pluginem

Pokud chcete upravit obsah odkazu, můžete ho přes administraci editovat pomocí pluginu Custom More Link Complete.

Po instalaci a aktivaci je konfigurace v sekci Nastavení, kde najdete kód odkazu.

<a href="%permalink%" title="%linktext% &laquo;%title%&raquo;">
%linktext% &laquo;%title%&raquo;
</a>

Odkaz je poskládán z těchto značek:

  • %permalink% – trvalý odkaz na celý článek
  • %anchor% – odkaz na kotvu v článku (pokud chcete čtenáře posouvat za perex)
  • %class% – výchozí třída stylu (viz výše)
  • %linktext% – text odkazu nastavený v souboru šablony (viz výše, můžete samozřejmě upravit zde v pluginu podle svého)
  • %title% – název článku

Jednotlivé značky nemusíte použít a doplnit vlastním textem dle libosti.

Další nastavení pluginu

Custom More Link Complete - další nastavení

Custom More Link Complete – další nastavení

Pomocí Custom More Link Complete lze nastavit limit délky pro titulek článku (značka %title%). V odkazu se tedy nemusí opakovat celý nadpis, můžete použít jeho část a přidat několik teček.

WordPress má dva typy zobrazení perexu článků a kromě funkce content můžete používat i funkci excerpt.

Tedy místo

<?php the_content('Pokračuj ve čtení &raquo;'); ?>

toto:

<?php the_excerpt(); ?>

Excerpt zobrazuje ve výchozím nastavení prvních 55 slov článku a odkaz na pokračování. Poslední volbou v nastavení pluginu ovlivníte, jestli bude nastavení more linku použito i na tento odkaz u funkce excerpt.

Více o pluginu najdete na WordPress.org – Custom More Link Complete

WordPress plugin: odesílání kontaktních formulářů do databáze

MySQL logoExistují pluginy, které odesílají vyplněné kontaktní a jiné formuláře (například Contact Form 7) z webových stránek na zadanou e-mailovou adresu.

Plugin Contact Form DB umí informace z formulářů uložit do databáze WordPressu a všechna data zobrazit v administraci nebo dokonce na webu.

Hodí se to třeba v případě, že potřebujete na databázi napojit ještě jiný systém a v něm například zpracovávat požadavky zákazníků, objednávky apod. Může ale stejně dobře posloužit i jako záloha a archiv zpráv odeslaných z webu.

Plugin Contact Form DB umí ukládat data z formulářů odeslaných pluginy:

  • JetPack Contact Form plugin
  • Contact Form 7 (CF7) plugin
  • Fast Secure Contact Form (FSCF) plugin

Contact Form DBV administraci se po instalaci a aktivaci pluginu objeví ovládání samostatně na panelu vlevo.

Nastavit se pak dá například kdo má k informacím z formulářů přístup nebo z jakých formulářů se mají data do databáze ukládat.

Část nastavení Contact Form DB

Část nastavení Contact Form DB

Data uložená v databázi se dají zobrazit na webu

Data uložená v databázi se dají zpětně zobrazit na webu pomocí tzv zkratek. Některé jsou předdefinované, jiné si můžete vytvořit sami a pomocí shortcode ( [kod] ) je pak vložit do stránky nebo příspěvku.

Při vytvoření zkratky je možné určit, komu se obsah zobrazí.

Nastavení zobrazení na webu

Nastavení zobrazení na webu

Plugin Contact Form DB ke stažení

Stahujte klasicky přes instalaci pluginů v administraci WordPressu vyhledáním pluginu podle názvu.

Nebo na WordPress.org:
http://wordpress.org/plugins/contact-form-7-to-database-extension/

Pluginy použité na Netzinu (WordPress)

Logo WordPressNetzin běžel původně na Drupalu, 19.7.2011 jsem ho přesunul na WordPress a v tomto článku najdete seznam pluginů, které jsem zde použil.

I s popisem jejich funkce snad někomu poslouží jako inspirace pro vylepšení vlastního webu.

Protože se doba mění, aktualizováno 23.8.2013.

V úvodu představím nejprve pluginy, které jsou nyní neaktivní, ale mám je připravené jako dobré funkce pro budoucí vylepšení, které chci na Netzinu dělat. Druhá část o něco níže bude o pluginech, které jsou v tuto chvíli aktivní a poslední část o pluginech, které jsem během času shledal jako neužitečné.

Zatím neaktivní pluginy

Některé mám v záloze proto, že se mohou prostě v určitých případech hodit.

WP-DownloadManager

Měření počtu stažení souboru, vytvoření databáze souborů ke stažení a další vychytávky.

http://wordpress.org/extend/plugins/wp-downloadmanager/

Dean’s Permalinks Migration

V případě změny struktury trvalých odkazů přesměruje staré adresy na nové. Užitečná věc, kterou mám na WordPressu vždy, kdyby byla náhodou potřeba.

V adresáři puginů již nedostupný, v případě potřeby stahujte zde na Netzinu.

Ajax Newsletter

Automatické rozesílání nových článků na registrované e-mailové adresy. Uživatel se může kdykoli sám z odběru odhlásit.

http://code.google.com/p/wp-ajax-newsletter/

External Links

Označí externí odkazy. Použít lze takovou tu šipečku, jak je občas na některých webech vidět. Zatím nemám jasno v tom, jestli to čtenářům skutečně k něčemu je, tak jsem to zatím neaktivoval.

http://wordpress.org/extend/plugins/sem-external-links/

Aktivní pluginy na Netzinu

Aktivní pluginy zajišťují běžný chod a až na pár výjimek je považuji za opravdu potřebné.

All in One SEO Pack

Tento poměrně známý plugin přidává možnost zadat vlastní titulek a popis každému typu obsahu. Napsal jsem o něm zvlášť článek All in One SEO Pack – seo plugin pro WordPress, kde najdete další podrobnosti.

http://wordpress.org/extend/plugins/all-in-one-seo-pack/

Breadcrumb NavXT

Tento plugin zajišťuje drobečkovou navigaci. Lze u něj libovolně nastavit výchozí stránku i používané odkazy. Jak si můžete všimnout u tohoto článku nad jeho nadpisem, jste v rubrice WordPress na Netzin.cz.

http://wordpress.org/extend/plugins/breadcrumb-navxt/

Podrobný popis v článku Drobečková navigace na WordPressu – plugin Breadcrumb NavXT

Broken Link Checker

Upozorní na nefunkční odkazy. Týká se to těch interních včetně odkazů na obrázky a také odkazů externích. Plugin tak vždy upozorní na to, když cizí odkazovaná stránka přestane existovat, jedním klikem pak můžete odkaz odstranit nebo ho upravit a neposílat dál své čtenáře na místo, kde nic nenajdou.

http://wordpress.org/extend/plugins/broken-link-checker/

Contact Form 7

Kontaktní formulář s možností definovat vlastní pole a sestavit tak téměř cokoli (dotazník, upload souborů atd.)

http://wordpress.org/extend/plugins/contact-form-7/

Google XML Sitemaps

Generuje mapu webu pro roboty vyhledávačů. Určeno primárně pro Google, ale umí ji číst i Seznam.cz.

http://wordpress.org/extend/plugins/google-sitemap-generator/

Raven’s Antispam

Antispamové opatření založené na JavaScriptu. Uživatelé, kteří mají JavaScript vypnutý, musí opisovat captchu.

http://wordpress.org/extend/plugins/ravens-antispam/

WP-PostViews

Počítání zobrazení jednotlivých stránek a příspěvků. Základní statistika.

http://wordpress.org/extend/plugins/wp-postviews/

WordPress Database Backup

Zálohování databáze. Umí vyexportovat DB na požádání, nebo zálohu posílat v určeném intervalu na e-mailovou adresu.

http://austinmatzko.com/wordpress-plugins/wp-db-backup/

WP jQuery Lightbox

Nejlepší plugin pro efekt lightboxu.

http://wordpress.org/extend/plugins/wp-jquery-lightbox/

WP-PageNavi

Vylepšené stránkování výpisů příspěvků. Týká se hlavní stránky, ale také všech kategorií, štítků, archivů atd. Je to dobrá náhrada za typické odkazy „Novější příspěvky“ a „Starší příspěvky“.

http://wordpress.org/extend/plugins/wp-pagenavi/

Custom Post Type UI

Umožní snadno přes administraci vytvářet vlastní typy obsahu, tedy kromě příspěvků a stránek lze nastavit další s vlastní URL a taxonomií.

Podrobnější popis v článku Vlastní typy obsahu – plugin Custom Post Type UI

http://wordpress.org/plugins/custom-post-type-ui/

WP Super Cache

Dobře konfigurovatelný nástroj na zrychlení načítání webu pomocí ukládání statických stránek do mezipaměti.

http://wordpress.org/extend/plugins/wp-super-cache/

Alternativou je Quick Cache.

http://wordpress.org/plugins/quick-cache/

Subscribe To Comments

Umožní návštěvníkovi webu nechat si na svou e-mailovou adresu posílat nové komentáře u konkrétního příspěvku.

http://wordpress.org/extend/plugins/subscribe-to-comments/

Sideblog WordPress Plugin

Tento plugin jsem už popisoval. Jde o funkci vyřazení určitých rubrik z přehledu na hlavní straně, vyřazení příspěvků v konkrétních rubrikách z RSS výstupu a možnost zobrazit tyto příspěvky ve widgetu, případně vložením značky na libovolné místo přímo do kódu šablony.

http://wordpress.org/extend/plugins/sideblog/

Similar Posts

Zobrazuje související příspěvky podle zadaných kritérií. Podle štítků, rubrik, autora apod.

http://rmarsh.com/plugins/similar-posts/

K fungování tohoto pluginu je potřeba dále plugin Post-Plugin Library.

Revision Control

Některá vylepšení WordPressu jsou někdy a pro někoho spíš problémem. Jednou z těchto funkcí, kterou ve skutečnosti mnoho lidi nevyužije, je ukládání revizí jednotlivých příspěvků i stránek. Znamená to, že při každém uložení obsahu je tento uložen jako zvláštní verze do databáze. Pokud revize nepotřebujete a nechcete mít databázi zbytečně objemnou, nainstalujte si vhodný plugin.

Více informací v článku Zakažte WordPressu ukládat revize

Později vypnuté pluginy

Stealth Publish

Tajné publikování. Příspěvek není po zaškrtnutí políčka zobrazen na hlavní stránce a neobjeví se ani v RSS.

http://coffee2code.com/wp-plugins/stealth-publish/

My Category Order

Slouží k organizaci seznamu rubrik ve widgetu. Pokud je nechcete vypisovat ručně, ale potřebujete některé odstranit, jinak je seřadit apod., je tento plugin tím pravým.

http://wordpress.org/extend/plugins/my-category-order/

WP-PostRatings

Možnost nechat čtenáře ohodnotit článek. Použít lze typické hvězdičky, ale třeba i plus a mínus. Každému symbolu je možné nastavit bodovou hodnotu (i zápornou) a v administraci je poté k dispozici statistika hodnocení. Na web si můžete umístit i widget s nejlépe hodnocenými příspěvky.

http://wordpress.org/extend/plugins/wp-postratings/

Tuto funkci dnes ale dobře nahrazují tlačítka sociálních sítí.

Čeština pro WordPress 3.6

Čeština pro WordPress 3.6 by měla být během několika málo hodin dostupná přímo prostřednictvím automatické aktualizace (nebo si můžete ručně stáhnout kompletní instalační balíček). Lokalizace není sice zatím zcela kompletní, ale většinou chybí pouze dlouhé řetězce nápovědy, přehled novinek a administrace sítě webů. Běžný uživatel by se tak neměl s angličtinou v administraci vůbec setkat. Lokalizované […]

Změna a přesměrování trvalých odkazů na WordPressu

OdkazNa Netzinu jsem už podruhé během týdne měnil strukturu trvalých odkazů. Obecně platí, že URL adresy obsahu (jednotlivých webových stránek na webu, nebo v tomto případě trvalých odkazů příspěvků na WordPressu) by se neměly měnit vůbec.

Ale když je to opravdu potřeba, staré adresy by měly být přesměrovány na nové, a to pokud možno navždy.

Změna trvalých odkazů není s WordPressem nic složitého. Každý si je jistě nastavil hned po instalaci v rámci úvodní konfigurace.

Nastavení trvalých odkazů - WordPress

Nastavení trvalých odkazů – WordPress

Pokud je budete chtít někdy měnit, doporučuji plugin Dean’s Permalinks Migration. Nemusíte se o nic starat, stačí ho aktivovat předtím, než opětovně zasáhnete do nastavení a trvalé odkazy změníte. Dokud bude plugin aktivní, budou existovat i stará URL.

Tedy ještě jednou postup:

  1. Aktivujte plugin Dean’s Permalinks Migration
  2. Jděte do nastavení a změňte strukturu trvalých odkazů

Pokud budete s výsledkem nespokojeni, plugin má i jednoduché nastavení.

Nastavení Dean's Permalinks Migration

Nastavení Dean’s Permalinks Migration

Dean’s Permalinks Migration není k dispozici v adresáři na WordPress.org a zmizel i obsah webu autora. Stáhnout si ho můžete přímo z Netzinu: