Deprecated: __autoload() is deprecated, use spl_autoload_register() instead in /var/www/clients/client2/web3/web/wp-includes/compat.php on line 502

Deprecated: Function create_function() is deprecated in /var/www/clients/client2/web3/web/wp-includes/pomo/translations.php on line 208

Deprecated: Function create_function() is deprecated in /var/www/clients/client2/web3/web/wp-includes/pomo/translations.php on line 208

Deprecated: Function create_function() is deprecated in /var/www/clients/client2/web3/web/wp-includes/pomo/translations.php on line 208

Deprecated: Function create_function() is deprecated in /var/www/clients/client2/web3/web/wp-content/themes/latte/inc/widgets/latte-services.php on line 109

Deprecated: Function create_function() is deprecated in /var/www/clients/client2/web3/web/wp-content/themes/latte/inc/widgets/latte-skills.php on line 82

Deprecated: Function create_function() is deprecated in /var/www/clients/client2/web3/web/wp-includes/pomo/translations.php on line 208

Deprecated: Function create_function() is deprecated in /var/www/clients/client2/web3/web/wp-includes/pomo/translations.php on line 208

Deprecated: Function create_function() is deprecated in /var/www/clients/client2/web3/web/wp-includes/pomo/translations.php on line 208
tahicz, Author at Tahicz.cz
 

Tahicz.cz

Tvorba webů, svět WordPressu, php a internetu, pár triků a tipů, rad a kombinace toho všeho.

Hromadné odesílání pozvánek – WP plugin

WordPress plugin pro projek SMS Kouč. Umožňuje správci webu hromadně rozesílat emaily s pozvánkami k účasti na tréninku.

Verze pluginu: 1.0

GitLab projekt pluginu: GitLab projekt – SMS Kouč hromadné pozvánky (pokud chcete přítup do projektu kontaktujte mě přes kontaktní formulář)

Pozvánku je možné si nadefinovat dle libosti v plaintextu, vybrat si trénink a naimportovat CSV soubor s emaily.

CSV soubor může obsahovat:

  • prostý seznam emailů (1 email na řádek)
  • více hodnot (např. export databáze), emaily musí být v sloupečku nazvaném email

Po naimportování emailů dojde k rozeslání nadefinované pozvánky s unikátním odkazem k registraci. Při registraci pak stačí jen vyplnit telefon v mezinárodním formátu a uživatelské jméno, které si může uživatel zvolit.

Okamžitě bude uživateli aktivovaný daný trénink, který mu začne hned následující den. Zároveň obdrží uvítací SMS a email.

 

DramRoom – svět kolem whisky

Nový webový projekt, který se věnuje whisky DramRoom. Svět whisky je rozmanitý a bohužel u nás trochu opomíjený. Hlavním cílem webu je šířit osvětu kolem whisky, přiblížit ji široké veřejnosti a zbavit ji nelichotivého „Whisky je jen pro snoby“.

Stránky nabízí množství článků o whisky – vlastních i převzatých a možnost objednání degustačních sad.

 

Moje práce spočívala v:

  • rozchození webu
  • oživení a úpravě šablony
  • tvoření speciálních pluginů rozšiřujících woocommerce pro potřeby webu – počítání spotřební daně, speciální typy produktů, export dat pro spediční službu

Kouzla s regulárními výrazy II


Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Funkce preg_replace_callback()

K čemu se tato funkce může asi tak používat? Funkci preg_replace zná asi každý. Vezmu řetězec, najdu v něm to, co se má podle nějakého vzoru najít, a to, co jsem našel, vrátím. Jednoduché.

Tato funkce dělá něco podobného s tím rozdílem, že je schopná rovnou nalezené řetězce zpracovávat/formátovat, nahrazovat upravovat vlastnosti chodu programu.

Ano, někdo může namítnout, že toto dělá i funkce preg_replace. A já musím potvrdit, že ano. Je to asi jako cyklus WHILE a FOR. Oba se dají zaměnit, libovolně prohazovat. Přesto se používají oba.

Zpět ale k funkci preg_replace_callback. Její praktické využití je třeba, když píšete nějakou šablonu a potřebujete na základě nějakých řídicích znaků, které mají určité parametry, vkládat nějaká předzpracovaná data. Nebo na základě toho, co najdete, inicializovat nějakou třídu, v ní provést nějaké informace a na základě toho vrátit nějaký výsledek.

Nejjednodušší bude napsat přímo příklad. Tady mám k dispozici kus šablony, která obsahuje řídicí příkaz $link a obsahuje parametr src.

 

Pomocí tohoto řídicího znaku by se měl řetězec nahradit odkazem někam do internetu. Napřed si ukážeme, jak by takové řešení mohlo vypadat s využitím metody preg_replace

Ano, toto řešení je hezké, jednoduché a krátké. Jak ale zajistit třeba nějaké formátování, např. u obrázku, kdy budumít obrázek zadaný do šablony jen adresou. Naprosto jednoduchým mechanizmem nahradím řídicí znaky tagem img a příslušnou adresou. To není těžké.

Co když ale budu chtít do titlu (nebo altu) přidat informaci o jeho velikosti, rozměrech, nebo kdy byl nahrán. Nebo má-li ten obrázek být klikací, aby se mohl zobrazit například v nějakém lightboxu?

To už tak jednoduše nepůjde udělat pomocí funkce preg_replace, a proto si zavoláme na pomoc funkci preg_replace_callback. Původní kus šablony si trochu upravíme a přidáme si tam parametr pro zobrazování obrázku do lightboxu.

 

PHP skript, který se bude starat o vykreslování by mohl vypadat nějak takhle:

Batch – chyba AJAXu


Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Pracujete s Drupalem? Používáte jeho vlastnost BATCH? Stává se vám, že se tato chyba velmi často objevuje bez zjevné příčiny? Mně ano.

Už cca tři čtvrtě roku musím pracovat s Drupalem. Pro něj píši modul, který má pracovat v dávce se vstupními daty, nějak je „přechroustat“ a uložit jako node. Nic moc složitého.

U mě to má několik úskalí:

  1. jednotlivé dávky mají několik desítek prvků
  2. dávek je několik set
  3. průměrné zpracování jednoho prvku trvá cca 15s

Brutální data, že? Když uvážím, že to pouštím na celkem silném stroji, celkem mě mrazí po zádech a mám pochybnosti o kvalitě a výkonnosti Drupalu.

Nicméně tento článek nepíši jako kritiku na Drupal, ale protože jsem narazil na problém s batchem.

Při spuštění výše zmíněných dávek se mi v naprosto nepravidelných a náhodných cyklech objevovala tato chyba:

Bohužel se mi nepovedlo zjistit, co s tím. Nakonec mě zachránil jiný problém. Ten řešil všeobecně nefunkční batch. Spásná myšlenka toho článku byla nastavit 3 serverové hodnoty na neomezeně.

Jedná se o:

  • memory_limit = -1
  • max_input_time = -1
  • max_execution_time = 0

Jedná se o celkem mocné nastavení. Nicméně pozor! V produkčním prostředí webu není dobré mít tyto hodnoty nastavené na neomezené hodnoty.

V režimu vývoje a plnění systému daty jsou to ale neocenitelní pomocníci. Nevím přesně, jak batch funguje (podle mě se dost liší realita od toho, co má Drupal napsáno na webu). Ale jen díky tomuto nastavení běží bez pádů a problémů třeba pro 35 000 položek v kuse.

České uvozovky v článku


Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Po dlouhé době jsem musel řešit zajímavý problém v regulárním výraze – jak nahradit anglické uvozovky českými. Klasická česká uvozovka je pomocí html entit zapsaná takto: „ a “ a jedná se o znaky „ a “. Většina lidí ale používá anglické uvozovky, tedy “ (").

Musím říct, správně prohodit tyto uvozovky v html dokumentu není zase tak jednoduché. Html značky totiž mohou obsahovat atributy a ty se standardně píší s „. Jak na to tedy? Rychlá a celkem účinná metoda jak je prohodit je použití regulárního výrazu. Lépe řečeno dvou výrazů.

První výraz najde text mimo tagy a druhý najde uvozovky. Pak už stačí správně text upravit a máme vyhráno.

Je zde využitá funkce preg_replace_callback, která umožňuje vytvoření vlastních pravidel při nahrazování dat pomocí regulárních výrazů.

Animace pomocí jQuery


Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Každý, kdo se aspoň trochu zabývá uživatelským rozhraním webových aplikací, to zná. Potřebuje pro svého klienta udělat něco, co se bude schovávat a zase ukazovat pomocí jQuery a její/ho funkce $.animate.

Dost často ale taky člověk narazí na problém, že se daný element animuje tak nějak divně. Většina toho, co by od toho člověk čekal, funguje, až na podivnou maličkost, která se snad ani nedá popsat. V mnoha případech ten daný kód vypadá nějak takhle:

Toto může a nemusí zlobit. V případě, že bude zapotřebí dělat nějaké postupné schovávátko, třeba omezené výškou. Např. na prvních 500px výšky stránky nic nedělej, na dalších animuj průhlednost na 0.5 a od 1000px výšky dál animuj průhlednost do 0, nastane problém, že se bude animace vykreslovat později, než je potřeba. A ke všemu ještě v různou dobu.

Zakopaný pes je v tom, že při každém zavolání události scroll se animace spustí znovu, takže se jednotlivé animace o element přetahují a dělají v tom vývojáři „bordel“.

Tomu se dá předejít zamknutím elementu pomocí jednoduchého zámku, který nabízí přímo funkce $.animate. Zámek může vypadat například takhle:

Kouzla s regulárními výrazy


Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Co to regulární výraz je?

Ve zkratce se dá říct, že regulární výraz (anglicky regular expression, regexp) je řetězec znaků (taková maska, vzor), která popisuje, jak má vypadat struktura určitých dat. Často se s takovým regulárním výrazem potkáte i v běžném životě. Typicky je to vzor pro zápis data (například do formuláře na internetu) – YYYY/MM/DD. Tento tvar říká, že datum máte zapsat jako rok/měsíc/den. Y zde zastupuje první písmeno anglického slova year – rok a čtyři Y po sobě znamená, že se má letopočet zapsat v jeho čtyřciferné podobě, například 2014. Obdobně je to pak pro písmena M (z anglického month – měsíc) a D (z anglického day – den).

Regulární výrazy jsou mocní pomocníci ve světě programování a práce s daty. Mají jednoduchou syntaxi zápisu a i ve velkých a složitých řetězcích znaků jsou velmi efektivní.

Syntaxe regexpů

Syntaxe je, jak už jsem psal, velmi jednoduchá. Posuďte sami:

  • ^ – začátek řetězce
  • $ – konec řetězce
  • . – libovolný znak včetně \n bez /
  • [] – výčet znaků
  • [^] – negativní výčet znaků
  • – rozsah znaků
  • () – podvýraz
  • | – logické NEBO
  • ? – žádné nebo jedno opakování
  • * – libovolné opakování
  • + – jedno nebo více opakování
  • {min,max} – opakování od–do
  • {3} – přesný počet opakování

Jak vidíte, zápis regexpů je opravdu jednoduchý. Je dobré vědět, že takto zapsané výrazy jsou strašně líné. Tzn., že pokud hledáte řetězec, který je ohraničený závorkami a v prohledávaném textu je jich několik, vezmou vždy jen první shodu. Takže ne text mezi první otvírací závorkou a poslední.

Co se vlastně dá s regulárními řetězci dělat?

Vlastně cokoliv, na co si člověk vzpomene a co jde dělat s řetězcem znaků – hledat, nahrazovat, dělit, přehazovat. Na většinu těchto činností existují v php funkce.

Právě kouzly s těmito funkcemi se zde budu zabývat. Nastudovat v dokumentaci php, jak se s regulárními výrazy pracuje, není těžké, ale občas není tak jednoduché odhalit některá kouzla a triky, které vám ulehčí život.

Funkce preg_match()

Funkce preg_match slouží primárně pro hledání shodných řetězců (případně podřetězců) znaků. Je to velmi užitečná funkce, pokud potřebujete ověřit třeba správnost zadaného e-mailu nebo potřebujete rozlišit několik typů různých nebo podobných souborů ve složce.

Zápis funkce vypadá asi takto:

Toto je běžné chování funkce preg_match a není na tom nic divného. Zajímavé věci se budou dít, když před hledaný řetězec přidáme ?P<text> a celý takto vzniklý řetězec uzavřeme do závorek.

Co se stane? Funkce preg_match vrátí výsledek jako směs asociativního pole a indexovaného. Viz ukázka níže.

Každý, kdo má aspoň trochu fantazie a chce si trochu ušetřit práci do budoucna, tuto možnost ocení. Parsování velice podobných dat není nic neobvyklého v programátorské praxi a pamatovat si, že na pozici 0 je tato hodnota a na pozici 1 je jiná, ale podobná té první, je dost složité. A pokud k takto vytvořenému kódu sednete po půl roce, už si ani nevzpomenete na charakteristiku těchto dat.

Když si ale člověk hezky pojmenuje klíče v asociativním poli, bude po půl roce aspoň tušit, jaká data, s jakým významem, jakým tvarem a typem se vlastně v této proměnné objevují.