diff --git a/README.md b/README.md new file mode 100644 index 0000000..9814081 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Download [Hugo](https://github.com/gohugoio/hugo/releases/tag/v0.119.0). diff --git a/content/posts/2023/gnome-terminal-title.md b/content/posts/2023/gnome-terminal-title.md new file mode 100644 index 0000000..6dca5da --- /dev/null +++ b/content/posts/2023/gnome-terminal-title.md @@ -0,0 +1,24 @@ +--- +title: "π₯οΈ ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Π² Gnome Terminal" +date: 2023-10-08T22:33:04+03:00 +draft: false +tags: [linux, tips] +--- + +Π **Gnome Terminal 3.14** ΡΠ΄Π°Π»ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π²ΠΊΠ»Π°Π΄ΠΊΠΈ. + +Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠ½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π· ESCAPE ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. + +ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: + +```sh +printf "\e]2;YOUR TITLE GOES HERE\a" +``` + +ΠΈΠ»ΠΈ Π² Bash + +```sh +echo -ne "\033]0;YOUR TITLE GOES HERE\007" +``` + +Π Π°Π±ΠΎΡΠ°ΡΡ ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± Π±ΡΠ΄Π΅Ρ ΠΈ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°Ρ . diff --git a/content/posts/2023/php/lightweight-template-engine-php/index.md b/content/posts/2023/php/lightweight-template-engine-php/index.md new file mode 100644 index 0000000..e375502 --- /dev/null +++ b/content/posts/2023/php/lightweight-template-engine-php/index.md @@ -0,0 +1,230 @@ +--- +title: "π ΠΡΠΎΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΠ° Π½Π° PHP" +date: 2023-10-05T06:12:03+03:00 +draft: false +tags: [php, tutorial] +--- + +![](splash.png) + +> ΠΠ΅ΡΠ΅Π²ΠΎΠ΄: https://codeshack.io/lightweight-template-engine-php/ + +ΠΠ»Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΡΠ³ΠΊΠΈΠΌ, Π³ΠΈΠ±ΠΊΠΈΠΌ, Π±ΡΡΡΡΡΠΌ +ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ. ΠΠ½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½Ρ Π² ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ PHP ΠΊΠΎΠ΄. + +ΠΠΈΠΆΠ΅ Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Ρ ΠΏΠΎΠ»Π½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΎΠ³ΠΎ, +ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΠ°. + +# ΠΠ°ΡΠ΅ΠΌ ΠΌΠ½Π΅ Π½ΡΠΆΠ΅Π½ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ? + +The template engine keeps your design code away from your application code, +this reason alone is good practice and follows many design patterns. +Using a template engine is entirely up to you, if you prefer +to keep your code clean and tidy then using a template engine is ideal. + +If you're working with the MVC pattern then it is a good idea +to use a template engine. + +# ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ + +Create a new file and name it `Template.php` and add: +Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» `Template.php` ΠΈ Π²ΡΡΠ°Π²ΡΡΠ΅ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄: + +```php +' . PHP_EOL . $code); + } + return $cached_file; + } + + static function clearCache() { + foreach(glob(self::$cache_path . '*') as $file) { + unlink($file); + } + } + + static function compileCode($code) { + $code = self::compileBlock($code); + $code = self::compileYield($code); + $code = self::compileEscapedEchos($code); + $code = self::compileEchos($code); + $code = self::compilePHP($code); + return $code; + } + + static function includeFiles($file) { + $code = file_get_contents($file); + preg_match_all('/{% ?(extends|include) ?\'?(.*?)\'? ?%}/i', $code, $matches, PREG_SET_ORDER); + foreach ($matches as $value) { + $code = str_replace($value[0], self::includeFiles($value[2]), $code); + } + $code = preg_replace('/{% ?(extends|include) ?\'?(.*?)\'? ?%}/i', '', $code); + return $code; + } + + static function compilePHP($code) { + return preg_replace('~\{%\s*(.+?)\s*\%}~is', '', $code); + } + + static function compileEchos($code) { + return preg_replace('~\{{\s*(.+?)\s*\}}~is', '', $code); + } + + static function compileEscapedEchos($code) { + return preg_replace('~\{{{\s*(.+?)\s*\}}}~is', '', $code); + } + + static function compileBlock($code) { + preg_match_all('/{% ?block ?(.*?) ?%}(.*?){% ?endblock ?%}/is', $code, $matches, PREG_SET_ORDER); + foreach ($matches as $value) { + if (!array_key_exists($value[1], self::$blocks)) self::$blocks[$value[1]] = ''; + if (strpos($value[2], '@parent') === false) { + self::$blocks[$value[1]] = $value[2]; + } else { + self::$blocks[$value[1]] = str_replace('@parent', self::$blocks[$value[1]], $value[2]); + } + $code = str_replace($value[0], '', $code); + } + return $code; + } + + static function compileYield($code) { + foreach(self::$blocks as $block => $value) { + $code = preg_replace('/{% ?yield ?' . $block . ' ?%}/', $value, $code); + } + $code = preg_replace('/{% ?yield ?(.*?) ?%}/i', '', $code); + return $code; + } + +} +?> +``` + +ΠΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ Π³ΠΎΡΠΎΠ², Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, +ΠΎΠ±Π½ΠΎΠ²ΠΈΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ `$cache_enabled` ΠΈ `$cache_path variables`. + +# ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ + +Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» `index.php` ΠΈ Π²ΡΡΠ°Π²ΡΡΠ΅ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄: + +```php + +``` + +Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ HTML ΡΠ°ΠΉΠ» `layout.html` ΠΈ Π²ΡΡΠ°Π²ΡΡΠ΅ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄: + +```html + + +
+Welcome to the home page!
+{% endblock %} +``` + +Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ°ΠΉΠ» `index.php` ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. + +ΠΠΎ ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² Π½Π°ΡΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²? +ΠΡΠΎΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π° Π² `index.php` ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: + +```php +Template::view('about.html', [ + 'title' => 'Home Page', + 'colors' => ['red','blue','green'] +]); +``` + +Π ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: + +```html +{% extends layout.html %} + +{% block title %}{{ $title }}{% endblock %} + +{% block content %} +Welcome to the home page, list of colors:
+Extends content block!
+{% endblock %} +``` + +ΠΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²: + +```text +{% include forms.html %} +``` + +Π§ΡΠΎΠ±Ρ ΠΎΡΠΈΡΡΠΈΡΡ ΠΊΠ΅Ρ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² ΠΊΠ°ΡΠΎΠ°Π»ΠΎΠ³Π΅ `$cache_path` +ΠΈΠ»ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ `Template::clearCache();`` + +# ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ + +Π¨Π°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ . +ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ Π΄ΠΈΠ·Π°ΠΉΠ½-ΠΊΠΎΠ΄ ΠΎΡ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. + +ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π² ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ . + + + +**ΠΠ²ΡΠΎΡ:** David Adams | **MIT License** diff --git a/content/posts/2023/php/lightweight-template-engine-php/splash.png b/content/posts/2023/php/lightweight-template-engine-php/splash.png new file mode 100644 index 0000000..05afd33 Binary files /dev/null and b/content/posts/2023/php/lightweight-template-engine-php/splash.png differ