From 7e72df06183a164e2013f01d7ab9a1bec28e82fc Mon Sep 17 00:00:00 2001 From: David Grudl Date: Thu, 31 Aug 2023 11:48:21 +0200 Subject: [PATCH 1/7] typo --- latte/bg/develop.texy | 5 +---- latte/cs/develop.texy | 5 +---- latte/de/develop.texy | 5 +---- latte/el/develop.texy | 5 +---- latte/en/develop.texy | 5 +---- latte/es/develop.texy | 5 +---- latte/fr/develop.texy | 5 +---- latte/hu/develop.texy | 5 +---- latte/it/develop.texy | 5 +---- latte/ja/develop.texy | 5 +---- latte/pl/develop.texy | 5 +---- latte/pt/develop.texy | 5 +---- latte/ro/develop.texy | 5 +---- latte/ru/develop.texy | 5 +---- latte/sl/develop.texy | 5 +---- latte/tr/develop.texy | 5 +---- latte/uk/develop.texy | 5 +---- 17 files changed, 17 insertions(+), 68 deletions(-) diff --git a/latte/bg/develop.texy b/latte/bg/develop.texy index 7df07dc698..e947567ea5 100644 --- a/latte/bg/develop.texy +++ b/latte/bg/develop.texy @@ -274,11 +274,8 @@ vendor/bin/latte-lint // въведете действителния път до файла autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// регистрира отделни разширения тук +// добавете отделни разширения тук $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/cs/develop.texy b/latte/cs/develop.texy index f8b863be1b..32e43894a7 100644 --- a/latte/cs/develop.texy +++ b/latte/cs/develop.texy @@ -274,11 +274,8 @@ Pokud používáte vlastní značky, vytvořte si také vlastní verzi Linteru, // zadejte skutečnou cestu k soubor autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// tady zaregistruje jednotlivá rozšíření +// tady přidejte jednotlivá rozšíření $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/de/develop.texy b/latte/de/develop.texy index 1e3fa8b213..5f99949089 100644 --- a/latte/de/develop.texy +++ b/latte/de/develop.texy @@ -274,11 +274,8 @@ Wenn Sie benutzerdefinierte Tags verwenden, erstellen Sie auch Ihren eigenen Lin // gibt den aktuellen Pfad zur Datei autoload.php an require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// registriert hier die einzelnen Erweiterungen +// hier individuelle Erweiterungen hinzufügen $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/el/develop.texy b/latte/el/develop.texy index f37f38b6b4..5d380b79ba 100644 --- a/latte/el/develop.texy +++ b/latte/el/develop.texy @@ -274,11 +274,8 @@ vendor/bin/latte-lint // εισάγετε την πραγματική διαδρομή προς το αρχείο autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// καταχωρεί μεμονωμένες επεκτάσεις εδώ +// προσθέστε μεμονωμένες επεκτάσεις εδώ $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/en/develop.texy b/latte/en/develop.texy index 3491aa4627..87ecc92636 100644 --- a/latte/en/develop.texy +++ b/latte/en/develop.texy @@ -274,11 +274,8 @@ If you use custom tags, also create your customized Linter, e.g. `custom-latte-l // enter the actual path to the autoload.php file require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// registers individual extensions here +// add individual extensions here $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/es/develop.texy b/latte/es/develop.texy index c2e967028d..83802ea072 100644 --- a/latte/es/develop.texy +++ b/latte/es/develop.texy @@ -274,11 +274,8 @@ Si utiliza etiquetas personalizadas, cree también su Linter personalizado, por // introduzca la ruta real al archivo autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// registra aquí las extensiones individuales +// añada aquí las extensiones individuales $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/fr/develop.texy b/latte/fr/develop.texy index 2f44ad5754..4ba666fd93 100644 --- a/latte/fr/develop.texy +++ b/latte/fr/develop.texy @@ -274,11 +274,8 @@ Si vous utilisez des balises personnalisées, créez également votre Linter per // saisissez le chemin d'accès réel au fichier autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// enregistre les extensions individuelles ici +// ajouter des extensions individuelles ici $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/hu/develop.texy b/latte/hu/develop.texy index d3761deb76..15d8116068 100644 --- a/latte/hu/develop.texy +++ b/latte/hu/develop.texy @@ -274,11 +274,8 @@ Ha egyéni címkéket használ, hozza létre az egyéni Lintert is, például `c // adja meg az autoload.php fájl tényleges elérési útvonalát require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// itt regisztrálja az egyes kiterjesztéseket +// egyedi kiterjesztések hozzáadása itt $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/it/develop.texy b/latte/it/develop.texy index 0fb0ce7c5b..4f9fc093a1 100644 --- a/latte/it/develop.texy +++ b/latte/it/develop.texy @@ -274,11 +274,8 @@ Se si usano tag personalizzati, creare anche un Linter personalizzato, ad esempi // inserire il percorso effettivo del file autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// registra qui le singole estensioni +// aggiungere qui le singole estensioni $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/ja/develop.texy b/latte/ja/develop.texy index d777c21bb8..6ce5a51c8d 100644 --- a/latte/ja/develop.texy +++ b/latte/ja/develop.texy @@ -274,11 +274,8 @@ vendor/bin/latte-lint // enter the actual path to the autoload.php file require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// registers individual extensions here +// ここに個々のエクステンションを追加する $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/pl/develop.texy b/latte/pl/develop.texy index a00a15bf05..bb2dbd5253 100644 --- a/latte/pl/develop.texy +++ b/latte/pl/develop.texy @@ -274,11 +274,8 @@ Jeśli używasz niestandardowych znaczników, utwórz również swój niestandar // wprowadź rzeczywistą ścieżkę do pliku autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// rejestruje poszczególne rozszerzenia tutaj +// dodaj tutaj indywidualne rozszerzenia $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/pt/develop.texy b/latte/pt/develop.texy index c0c76268fb..88d9e11d82 100644 --- a/latte/pt/develop.texy +++ b/latte/pt/develop.texy @@ -274,11 +274,8 @@ Se você usa etiquetas personalizadas, crie também seu Linter personalizado, po // digite o caminho real para o arquivo autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// registra aqui extensões individuais +// adicione extensões individuais aqui $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/ro/develop.texy b/latte/ro/develop.texy index 1ecf64e11e..08a790a567 100644 --- a/latte/ro/develop.texy +++ b/latte/ro/develop.texy @@ -274,11 +274,8 @@ Dacă utilizați etichete personalizate, creați și Linterul personalizat, de e // introduceți calea reală către fișierul autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// înregistrează extensiile individuale aici +// adăugați extensii individuale aici $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/ru/develop.texy b/latte/ru/develop.texy index 9a98b34f6b..d252d0bdd3 100644 --- a/latte/ru/develop.texy +++ b/latte/ru/develop.texy @@ -274,11 +274,8 @@ vendor/bin/latte-lint // введите фактический путь к файлу autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// регистрирует отдельные расширения здесь +// добавить сюда отдельные расширения $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/sl/develop.texy b/latte/sl/develop.texy index b52fcdd4bc..3eee56c049 100644 --- a/latte/sl/develop.texy +++ b/latte/sl/develop.texy @@ -274,11 +274,8 @@ S parametrom `--strict` lahko aktivirate [strogi način|#strict mode]. // vnesite dejansko pot do datoteke autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// registrira posamezne razširitve tukaj +// tukaj dodajte posamezne razširitve $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/tr/develop.texy b/latte/tr/develop.texy index b24c44012f..d1c0485531 100644 --- a/latte/tr/develop.texy +++ b/latte/tr/develop.texy @@ -274,11 +274,8 @@ vendor/bin/latte-lint // autoload.php dosyasının gerçek yolunu girin require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// bireysel uzantıları buraya kaydeder +// bireysel uzantıları buraya ekleyin $engine->addExtension(/* ... */); $path = $argv[1]; diff --git a/latte/uk/develop.texy b/latte/uk/develop.texy index 1f23c11c22..bf30c26614 100644 --- a/latte/uk/develop.texy +++ b/latte/uk/develop.texy @@ -274,11 +274,8 @@ vendor/bin/latte-lint // вкажіть фактичний шлях до файлу autoload.php require __DIR__ . '/vendor/autoload.php'; -$linter = new Latte\Tools\Linter($engine); -$linter->scanDirectory($path); - $engine = new Latte\Engine; -// прописує тут окремі розширення +// додайте тут індивідуальні розширення $engine->addExtension(/* ... */); $path = $argv[1]; From 3ba9bb23d0552effb010f18960f9b5a3b566e167 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Wed, 6 Sep 2023 14:33:46 +0200 Subject: [PATCH 2/7] routing: added callbacks --- application/bg/routing.texy | 23 +++++++++++++++++++++++ application/cs/routing.texy | 23 +++++++++++++++++++++++ application/de/routing.texy | 23 +++++++++++++++++++++++ application/el/routing.texy | 23 +++++++++++++++++++++++ application/en/routing.texy | 23 +++++++++++++++++++++++ application/es/routing.texy | 23 +++++++++++++++++++++++ application/fr/routing.texy | 23 +++++++++++++++++++++++ application/hu/routing.texy | 23 +++++++++++++++++++++++ application/it/routing.texy | 23 +++++++++++++++++++++++ application/pl/routing.texy | 23 +++++++++++++++++++++++ application/pt/routing.texy | 23 +++++++++++++++++++++++ application/ro/routing.texy | 23 +++++++++++++++++++++++ application/ru/routing.texy | 23 +++++++++++++++++++++++ application/sl/routing.texy | 23 +++++++++++++++++++++++ application/tr/routing.texy | 23 +++++++++++++++++++++++ application/uk/routing.texy | 23 +++++++++++++++++++++++ 16 files changed, 368 insertions(+) diff --git a/application/bg/routing.texy b/application/bg/routing.texy index 96e134bc79..300a7755e2 100644 --- a/application/bg/routing.texy +++ b/application/bg/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); При достъп до стария URL адрес презентаторът автоматично пренасочва към новия URL адрес, така че търсачките да не индексират тези страници два пъти (вж. [SEO и канонизация |#seo-and-canonization]). +Динамично маршрутизиране с обратни извиквания .[#toc-dynamic-routing-with-callbacks] +------------------------------------------------------------------------------------ + +Динамичното маршрутизиране с обратни повиквания ви позволява директно да присвоявате функции (обратни повиквания) към маршрутите, които ще се изпълняват при посещение на посочения път. Тази гъвкава функция ви позволява бързо и ефективно да създавате различни крайни точки за вашето приложение: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +Можете също така да дефинирате параметри в маската, които автоматично ще бъдат предадени на вашето обратно извикване: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Модули .[#toc-modules] ---------------------- diff --git a/application/cs/routing.texy b/application/cs/routing.texy index 816436fac4..3f58166681 100644 --- a/application/cs/routing.texy +++ b/application/cs/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); Při přístupu na starou URL presenter automaticky přesměruje na nové URL, takže vám tyto stránky vyhledávače nezaindexují dvakrát (viz [#SEO a kanonizace]). +Dynamické routování s callbacky +------------------------------- + +Dynamické routování s callbacky vám umožňuje přiřadit routám přímo funkce (callbacky), které se vykonají, když je daná cesta navštívena. Tato flexibilní funkčnost vám umožní rychle a efektivně vytvářet různé koncové body (endpoints) pro vaši aplikaci: + +```php +$router->addRoute('test', function () { + echo 'jste na adrese /test'; +}); +``` + +Můžete také definovat v masce parametry, které se automaticky předají do vašeho callbacku: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Vítejte na české verzi našeho webu!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Moduly ------ diff --git a/application/de/routing.texy b/application/de/routing.texy index 1cd5fcc40d..dac42c271d 100644 --- a/application/de/routing.texy +++ b/application/de/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); Beim Zugriff auf die alte URL leitet der Presenter automatisch auf die neue URL um, damit Suchmaschinen diese Seiten nicht doppelt indizieren (siehe [SEO und Kanonisierung |#SEO and canonization]). +Dynamisches Routing mit Rückrufen .[#toc-dynamic-routing-with-callbacks] +------------------------------------------------------------------------ + +Dynamisches Routing mit Callbacks ermöglicht es Ihnen, den Routen direkt Funktionen (Callbacks) zuzuweisen, die ausgeführt werden, wenn der angegebene Pfad besucht wird. Diese flexible Funktion ermöglicht es Ihnen, schnell und effizient verschiedene Endpunkte für Ihre Anwendung zu erstellen: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +Sie können auch Parameter in der Maske definieren, die automatisch an Ihren Callback übergeben werden: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Module .[#toc-modules] ---------------------- diff --git a/application/el/routing.texy b/application/el/routing.texy index 19b2ceb7bf..448fa6f67b 100644 --- a/application/el/routing.texy +++ b/application/el/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); Κατά την πρόσβαση στην παλιά διεύθυνση URL, ο παρουσιαστής ανακατευθύνει αυτόματα στη νέα διεύθυνση URL, ώστε οι μηχανές αναζήτησης να μην ευρετηριάζουν αυτές τις σελίδες δύο φορές (βλ. [SEO και κανονικοποίηση |#SEO and canonization]). +Δυναμική δρομολόγηση με Callbacks .[#toc-dynamic-routing-with-callbacks] +------------------------------------------------------------------------ + +Η δυναμική δρομολόγηση με callbacks σας επιτρέπει να αναθέτετε απευθείας λειτουργίες (callbacks) σε διαδρομές, οι οποίες θα εκτελούνται όταν επισκέπτεστε την καθορισμένη διαδρομή. Αυτή η ευέλικτη λειτουργία σας επιτρέπει να δημιουργείτε γρήγορα και αποτελεσματικά διάφορα τελικά σημεία για την εφαρμογή σας: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +Μπορείτε επίσης να ορίσετε παραμέτρους στη μάσκα, οι οποίες θα μεταβιβαστούν αυτόματα στο callback σας: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Ενότητες .[#toc-modules] ------------------------ diff --git a/application/en/routing.texy b/application/en/routing.texy index bb30283d14..c35c692adb 100644 --- a/application/en/routing.texy +++ b/application/en/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); When accessing the old URL, the presenter automatically redirects to the new URL so that search engines do not index these pages twice (see [#SEO and canonization]). +Dynamic Routing with Callbacks +------------------------------ + +Dynamic routing with callbacks allows you to directly assign functions (callbacks) to routes, which will be executed when the specified path is visited. This flexible feature enables you to quickly and efficiently create various endpoints for your application: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +You can also define parameters in the mask, which will be automatically passed to your callback: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Modules ------- diff --git a/application/es/routing.texy b/application/es/routing.texy index 2e886aa907..c6ed0f3950 100644 --- a/application/es/routing.texy +++ b/application/es/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); Al acceder a la URL antigua, el presentador redirige automáticamente a la URL nueva para que los motores de búsqueda no indexen estas páginas dos veces (véase [SEO y canonización |#SEO and canonization]). +Enrutamiento dinámico con llamadas de retorno .[#toc-dynamic-routing-with-callbacks] +------------------------------------------------------------------------------------ + +El enrutamiento dinámico con callbacks permite asignar directamente funciones (callbacks) a las rutas, que se ejecutarán cuando se visite la ruta especificada. Esta característica flexible le permite crear rápida y eficientemente varios puntos finales para su aplicación: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +También puede definir parámetros en la máscara, que se pasarán automáticamente a su devolución de llamada: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Módulos .[#toc-modules] ----------------------- diff --git a/application/fr/routing.texy b/application/fr/routing.texy index a2ec2aff40..9fe5d5e4a6 100644 --- a/application/fr/routing.texy +++ b/application/fr/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); Lors de l'accès à l'ancienne URL, le diffuseur redirige automatiquement vers la nouvelle URL afin que les moteurs de recherche n'indexent pas ces pages deux fois (voir [SEO et canonisation |#SEO and canonization]). +Routage dynamique avec des callbacks .[#toc-dynamic-routing-with-callbacks] +--------------------------------------------------------------------------- + +Le routage dynamique avec rappels vous permet d'affecter directement des fonctions (rappels) aux itinéraires, qui seront exécutées lorsque le chemin spécifié est visité. Cette fonctionnalité flexible vous permet de créer rapidement et efficacement différents points d'arrivée pour votre application : + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +Vous pouvez également définir des paramètres dans le masque, qui seront automatiquement transmis à votre callback : + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Modules .[#toc-modules] ----------------------- diff --git a/application/hu/routing.texy b/application/hu/routing.texy index ca3e0ff108..5cf399296b 100644 --- a/application/hu/routing.texy +++ b/application/hu/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); A régi URL elérésekor a bemutató automatikusan átirányítja az új URL-re, hogy a keresőmotorok ne indexeljék kétszer ezeket az oldalakat (lásd [SEO és kanonizáció |#SEO and canonization]). +Dinamikus útválasztás visszahívásokkal .[#toc-dynamic-routing-with-callbacks] +----------------------------------------------------------------------------- + +A dinamikus útválasztás visszahívásokkal lehetővé teszi, hogy az útvonalakhoz közvetlenül hozzárendeljen függvényeket (visszahívásokat), amelyek a megadott útvonal meglátogatásakor végrehajtódnak. Ez a rugalmas funkció lehetővé teszi, hogy gyorsan és hatékonyan hozzon létre különböző végpontokat az alkalmazásához: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +A maszkban paramétereket is meghatározhat, amelyek automatikusan átadásra kerülnek a visszahívásnak: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Modulok .[#toc-modules] ----------------------- diff --git a/application/it/routing.texy b/application/it/routing.texy index b530d0b83b..c01d4ac823 100644 --- a/application/it/routing.texy +++ b/application/it/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); Quando si accede al vecchio URL, il presentatore reindirizza automaticamente al nuovo URL, in modo che i motori di ricerca non indicizzino queste pagine due volte (vedere [SEO e canonizzazione |#SEO and canonization]). +Instradamento dinamico con callback .[#toc-dynamic-routing-with-callbacks] +-------------------------------------------------------------------------- + +L'instradamento dinamico con callback consente di assegnare direttamente delle funzioni (callback) alle rotte, che verranno eseguite quando viene visitato il percorso specificato. Questa funzione flessibile consente di creare in modo rapido ed efficiente vari endpoint per l'applicazione: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +È anche possibile definire parametri nella maschera, che verranno passati automaticamente alla callback: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Moduli .[#toc-modules] ---------------------- diff --git a/application/pl/routing.texy b/application/pl/routing.texy index 1cc006af6e..4ce1af8644 100644 --- a/application/pl/routing.texy +++ b/application/pl/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); Kiedy użytkownik uzyskuje dostęp do starego adresu URL, prezenter automatycznie przekierowuje na nowy adres URL, aby wyszukiwarki nie indeksowały tych stron podwójnie (patrz [SEO i kanoniczność |#SEO-and-Canonization]). +Routing dynamiczny z wywołaniami zwrotnymi .[#toc-dynamic-routing-with-callbacks] +--------------------------------------------------------------------------------- + +Dynamiczny routing z wywołaniami zwrotnymi umożliwia bezpośrednie przypisywanie funkcji (wywołań zwrotnych) do tras, które zostaną wykonane po odwiedzeniu określonej ścieżki. Ta elastyczna funkcja umożliwia szybkie i wydajne tworzenie różnych punktów końcowych dla aplikacji: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +Można również zdefiniować parametry w masce, które będą automatycznie przekazywane do wywołania zwrotnego: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Moduły .[#toc-modules] ---------------------- diff --git a/application/pt/routing.texy b/application/pt/routing.texy index d9ad4462b0..6caf887e2d 100644 --- a/application/pt/routing.texy +++ b/application/pt/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); Ao acessar a antiga URL, o apresentador redireciona automaticamente para a nova URL para que os mecanismos de busca não indexem essas páginas duas vezes (ver [SEO e canonização |#SEO and canonization]). +Roteamento dinâmico com retornos de chamada .[#toc-dynamic-routing-with-callbacks] +---------------------------------------------------------------------------------- + +O roteamento dinâmico com retornos de chamada permite atribuir diretamente funções (retornos de chamada) às rotas, que serão executadas quando o caminho especificado for visitado. Esse recurso flexível permite a criação rápida e eficiente de vários pontos de extremidade para o seu aplicativo: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +Você também pode definir parâmetros na máscara, que serão automaticamente passados para o callback: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Módulos .[#toc-modules] ----------------------- diff --git a/application/ro/routing.texy b/application/ro/routing.texy index 0879cd0109..4f80ca99be 100644 --- a/application/ro/routing.texy +++ b/application/ro/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); La accesarea vechiului URL, prezentatorul redirecționează automat către noul URL, astfel încât motoarele de căutare să nu indexeze aceste pagini de două ori (a se vedea [SEO și canonizarea |#SEO and canonization]). +Rutarea dinamică cu callback-uri .[#toc-dynamic-routing-with-callbacks] +----------------------------------------------------------------------- + +Rutarea dinamică cu callback-uri vă permite să atribuiți direct funcții (callback-uri) la rute, care vor fi executate atunci când este vizitată calea specificată. Această funcție flexibilă vă permite să creați rapid și eficient diverse puncte finale pentru aplicația dumneavoastră: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +De asemenea, puteți defini parametri în mască, care vor fi trecuți automat către callback-ul dumneavoastră: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Module .[#toc-modules] ---------------------- diff --git a/application/ru/routing.texy b/application/ru/routing.texy index 5bff8b8035..dd37c4fd4d 100644 --- a/application/ru/routing.texy +++ b/application/ru/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); При обращении к старому URL-адресу презентер автоматически перенаправляет на новый URL-адрес, чтобы поисковые системы не индексировали эти страницы дважды (см. [SEO и канонизация|#seo-and-canonization]). +Динамическая маршрутизация с обратными вызовами .[#toc-dynamic-routing-with-callbacks] +-------------------------------------------------------------------------------------- + +Динамическая маршрутизация с обратными вызовами позволяет напрямую назначать маршрутам функции (обратные вызовы), которые будут выполняться при посещении указанного пути. Эта гибкая возможность позволяет быстро и эффективно создавать различные конечные точки для вашего приложения: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +Вы также можете задать параметры в маске, которые будут автоматически передаваться в обратный вызов: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Модули .[#toc-modules] ---------------------- diff --git a/application/sl/routing.texy b/application/sl/routing.texy index 046c205488..0f717178bb 100644 --- a/application/sl/routing.texy +++ b/application/sl/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); Pri dostopu do starega naslova URL predstavnik samodejno preusmeri na novi naslov URL, tako da iskalniki teh strani ne indeksirajo dvakrat (glejte [SEO in kanonizacijo |#SEO and canonization]). +Dinamično usmerjanje s povratnimi klici .[#toc-dynamic-routing-with-callbacks] +------------------------------------------------------------------------------ + +Dinamično usmerjanje s povratnimi klici omogoča neposredno dodeljevanje funkcij (povratnih klicev) na poti, ki se bodo izvedle, ko bo obiskana določena pot. Ta prilagodljiva funkcija vam omogoča hitro in učinkovito ustvarjanje različnih končnih točk za vašo aplikacijo: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +V maski lahko določite tudi parametre, ki bodo samodejno posredovani povratnemu klicu: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Moduli .[#toc-modules] ---------------------- diff --git a/application/tr/routing.texy b/application/tr/routing.texy index b1812614ab..cbd1656234 100644 --- a/application/tr/routing.texy +++ b/application/tr/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); Eski URL'ye erişildiğinde, sunucu otomatik olarak yeni URL'ye yönlendirir, böylece arama motorları bu sayfaları iki kez dizine eklemez (bkz. [SEO ve kanonizasyon |#SEO and canonization]). +Geri Çağırmalarla Dinamik Yönlendirme .[#toc-dynamic-routing-with-callbacks] +---------------------------------------------------------------------------- + +Geri aramalarla dinamik yönlendirme, belirtilen yol ziyaret edildiğinde yürütülecek olan işlevleri (geri aramalar) doğrudan yollara atamanıza olanak tanır. Bu esnek özellik, uygulamanız için hızlı ve verimli bir şekilde çeşitli uç noktalar oluşturmanızı sağlar: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +Maskede, geri aramanıza otomatik olarak aktarılacak parametreler de tanımlayabilirsiniz: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Modüller .[#toc-modules] ------------------------ diff --git a/application/uk/routing.texy b/application/uk/routing.texy index 6295ad4828..c19046885b 100644 --- a/application/uk/routing.texy +++ b/application/uk/routing.texy @@ -342,6 +342,29 @@ $router->addRoute('product/', 'Product:detail'); У разі звернення до старої URL-адреси презентер автоматично перенаправляє на нову URL-адресу, щоб пошукові системи не індексували ці сторінки двічі (див. [SEO та канонізація |#seo-and-canonization]). +Динамічна маршрутизація із зворотними дзвінками .[#toc-dynamic-routing-with-callbacks] +-------------------------------------------------------------------------------------- + +Динамічна маршрутизація з функцією зворотного виклику дозволяє безпосередньо призначати маршрутам функції (зворотні виклики), які будуть виконуватися при відвідуванні вказаного шляху. Ця гнучка функція дозволяє швидко та ефективно створювати різні кінцеві точки для вашого додатку: + +```php +$router->addRoute('test', function () { + echo 'You are at the /test address'; +}); +``` + +Ви також можете визначити параметри в масці, які будуть автоматично передані вашому зворотному виклику: + +```php +$router->addRoute('', function (string $lang) { + echo match ($lang) { + 'cs' => 'Welcome to the Czech version of our website!', + 'en' => 'Welcome to the English version of our website!', + }; +}); +``` + + Модулі .[#toc-modules] ---------------------- From b1be02722dc6db95e81c7876f371981fde96fe2b Mon Sep 17 00:00:00 2001 From: David Grudl Date: Wed, 6 Sep 2023 14:02:04 +0200 Subject: [PATCH 3/7] added best-practices/microsites --- best-practices/bg/@home.texy | 1 + best-practices/bg/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/cs/@home.texy | 1 + best-practices/cs/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/de/@home.texy | 1 + best-practices/de/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/el/@home.texy | 1 + best-practices/el/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/en/@home.texy | 1 + best-practices/en/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/es/@home.texy | 1 + best-practices/es/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/fr/@home.texy | 1 + best-practices/fr/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/hu/@home.texy | 1 + best-practices/hu/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/it/@home.texy | 1 + best-practices/it/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/pl/@home.texy | 1 + best-practices/pl/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/pt/@home.texy | 1 + best-practices/pt/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/ro/@home.texy | 1 + best-practices/ro/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/ru/@home.texy | 1 + best-practices/ru/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/sl/@home.texy | 1 + best-practices/sl/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/tr/@home.texy | 1 + best-practices/tr/microsites.texy | 63 +++++++++++++++++++++++++++++++ best-practices/uk/@home.texy | 1 + best-practices/uk/microsites.texy | 63 +++++++++++++++++++++++++++++++ 32 files changed, 1024 insertions(+) create mode 100644 best-practices/bg/microsites.texy create mode 100644 best-practices/cs/microsites.texy create mode 100644 best-practices/de/microsites.texy create mode 100644 best-practices/el/microsites.texy create mode 100644 best-practices/en/microsites.texy create mode 100644 best-practices/es/microsites.texy create mode 100644 best-practices/fr/microsites.texy create mode 100644 best-practices/hu/microsites.texy create mode 100644 best-practices/it/microsites.texy create mode 100644 best-practices/pl/microsites.texy create mode 100644 best-practices/pt/microsites.texy create mode 100644 best-practices/ro/microsites.texy create mode 100644 best-practices/ru/microsites.texy create mode 100644 best-practices/sl/microsites.texy create mode 100644 best-practices/tr/microsites.texy create mode 100644 best-practices/uk/microsites.texy diff --git a/best-practices/bg/@home.texy b/best-practices/bg/@home.texy index c3d00d8610..d8d9850d9b 100644 --- a/best-practices/bg/@home.texy +++ b/best-practices/bg/@home.texy @@ -36,6 +36,7 @@ Обща ---- - [Как да заредим конфигурационен файл |bootstrap:] +- [Как да пишем микросайтове |microsites] - [Защо Nette използва константна нотация PascalCase? |https://blog.nette.org/bg/za-po-malko-kresene-v-koda] - [Защо Nette не използва суфикса Interface? |https://blog.nette.org/bg/prefiksite-i-sufiksite-ne-prinadlezat-na-imenata-na-interfejsite] - [Съвети за използване на Composer |composer] diff --git a/best-practices/bg/microsites.texy b/best-practices/bg/microsites.texy new file mode 100644 index 0000000000..535babfa3f --- /dev/null +++ b/best-practices/bg/microsites.texy @@ -0,0 +1,63 @@ +Как да пишем микросайтове +************************* + +Представете си, че трябва бързо да създадете малък уебсайт за предстоящо събитие на вашата компания. Той трябва да бъде прост, бърз и без излишни усложнения. Може би си мислите, че такъв малък проект не изисква стабилна рамка. Но какво ще кажете, ако използването на рамката Nette може значително да опрости и ускори този процес? + +Дори когато създавате прости уебсайтове, не искате да се отказвате от комфорта. Не искате да изобретявате колелото наново. Чувствайте се свободни да бъдете мързеливи и да се поглезите. Рамката Nette може да се използва отлично и като микрорамка. + +Как може да изглежда един такъв микросайт? Например, целият код на уебсайта може да бъде поставен в един файл `index.php` в публичната папка: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// създаване на контейнер DI въз основа на конфигурацията в config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// настройка на маршрутизацията +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// маршрут за URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // разпознаване на езика на браузъра и пренасочване към URL /en или /de и т.н. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// маршрут за URL https://example.com/cs или https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // покажете съответния шаблон, например ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// стартирайте приложението! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Всичко останало ще бъде шаблони, съхранявани в родителската папка `/templates`. + +PHP кодът в `index.php` първо настройва [средата |bootstrap:], след това дефинира [маршрути |application:routing#dynamic-routing-with-callbacks] и накрая стартира приложението. Предимството е, че вторият параметър на функцията `addRoute()` може да бъде извикващо се име, което се изпълнява при отваряне на съответната страница. + + +Защо да използвате Nette за микросайтове? .[#toc-why-use-nette-for-microsites] +------------------------------------------------------------------------------ + +- Разработчиците, които някога са опитвали [Трейси |tracy:], днес не могат да си представят кодирането без него. +- Но преди всичко ще използвате системата за шаблониране [Latte |latte:], защото само от 2 страници ще искате да разделите [оформлението и съдържанието |latte:template-inheritance]. +- И със сигурност искате да разчитате на [автоматичното ескапиране, |latte:safety-first] за да предотвратите XSS уязвимости. +- Nette също така гарантира, че в случай на грешка никога няма да бъдат показвани съобщения за грешка на PHP, а вместо това ще бъде показана удобна за потребителя страница. +- Ако искате да получавате обратна връзка от потребителите, например под формата на форма за контакт, можете да добавите и [форми |forms:] и [база данни |database:]. +- Можете също така лесно да [изпратите |mail:] попълнените формуляри [по имейл |mail:]. +- Понякога може да ви е полезно [кеширането |caching:], например при изтегляне и показване на емисии. + +В днешната епоха, в която скоростта и ефективността са от ключово значение, е важно да разполагате с инструменти, които ви позволяват да постигате резултати без излишни забавяния. Рамката Nette предлага точно това - бърза разработка, сигурност и широк набор от инструменти като Tracy и Latte, които опростяват процеса. Достатъчно е да инсталирате няколко пакета на Nette и изграждането на такъв микросайт се превръща в лесна задача. И знаете, че няма скрити недостатъци в сигурността. diff --git a/best-practices/cs/@home.texy b/best-practices/cs/@home.texy index 5466d6d7fc..b6fdd39ffc 100644 --- a/best-practices/cs/@home.texy +++ b/best-practices/cs/@home.texy @@ -36,6 +36,7 @@ Formuláře Obecné ------ - [Jak načíst konfigurační soubor |bootstrap:] +- [Jak psát mikro-weby |microsites] - [Proč Nette používá PascalCase notaci konstant? |https://blog.nette.org/cs/za-mene-kriku-v-kodu] - [Proč Nette nepoužívá příponu Interface? |https://blog.nette.org/cs/predpony-a-pripony-do-nazvu-rozhrani-nepatri] - [Composer: tipy pro použití |composer] diff --git a/best-practices/cs/microsites.texy b/best-practices/cs/microsites.texy new file mode 100644 index 0000000000..17a9fa7e41 --- /dev/null +++ b/best-practices/cs/microsites.texy @@ -0,0 +1,63 @@ +Jak psát mikro-weby +******************* + +Představte si, že potřebujete rychle vytvořit malý web pro nadcházející akci vaší firmy. Má to být jednoduché, rychlé a bez zbytečných komplikací. Možná si myslíte, že pro tak malý projekt nepotřebujete robustní framework. Ale co když použití Nette frameworku může tento proces zásadně zjednodušit a zrychlit? + +Přece i při tvorbě jednoduchých webů se nechcete vzdát pohodlí. Nechcete vymýšlet to, co už bylo jednou vyřešené. Buďte klidně líný a nechte se rozmazlovat. Nette Framework lze skvěle využít i jako micro framework. + +Jak takový microsite může vypadat? Například tak, že celý kód webu umístíme do jediného souboru `index.php` ve veřejné složce: + +```php +enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// vytvoř DI kontejner na základě konfigurace v config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// nastavíme routing +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// routa pro URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // detekujeme jazyk prohlížeče a přesměrujeme na URL /en nebo /de atd. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// routa pro URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // zobrazíme příslušnou šablonu, například ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// spusť aplikaci! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Vše ostatní budou šablony uložené v nadřazené složce `/templates`. + +PHP kód v `index.php` nejprve [připraví prostředí |bootstrap:], poté definuje [routy|application:routing#dynamicke-routovani-s-callbacky] a nakonec spustí aplikaci. Výhodou je, že druhý parametr funkce `addRoute()` může být callable, který se po otevření odpovídající stránky vykoná. + + +Proč používat Nette pro microsite? +---------------------------------- + +- Programátoři, kteří někdy vyzkoušeli [Tracy|tracy:], si dnes neumí představit, že by něco programovali bez ní. +- Především ale využijete šablonovací systém [Latte|latte:], protože už od 2 stránek budete chtít mít oddělený [layout a obsah|latte:template-inheritance]. +- A rozhodně se chcete spolehout na [automatické escapování |latte:safety-first], aby nevznikla zranitelnost XSS +- Nette taky zajistí, že se při chybě nikdy neobrazí programátorské chybové hlášky PHP, ale uživateli srozumitelná stránka. +- Pokud chcete získávat zpětnou vazbu od uživatelů, například v podobě kontaktního formuláře, tak ještě přidáte [formuláře|forms:] a [databázi|database:]. +- Vyplněné formuláře si taktéž můžete nechat snadno [odesílat emailem|mail:]. +- Někdy se vám může hodit [kešování|caching:], například pokud stahujete a zobrazujete feedy. + +V dnešní době, kdy je rychlost a efektivita klíčová, je důležité mít nástroje, které vám umožní dosáhnout výsledků bez zbytečného zdržování. Nette framework vám nabízí právě to - rychlý vývoj, bezpečnost a širokou škálu nástrojů, jako je Tracy a Latte, které zjednodušují proces. Stačí nainstalovat pár Nette balíčků a vybudovat takovou microsite je najednou úplná hračka. A víte, že se nikde neskrývá žádná bezpečnostní díra. diff --git a/best-practices/de/@home.texy b/best-practices/de/@home.texy index 9a057ba919..20b2d44538 100644 --- a/best-practices/de/@home.texy +++ b/best-practices/de/@home.texy @@ -36,6 +36,7 @@ Formulare Allgemein --------- - [Wie man eine Konfigurationsdatei lädt |bootstrap:] +- [Wie man Microsites schreibt |microsites] - [Warum verwendet Nette die Konstantenschreibweise PascalCase? |https://blog.nette.org/de/fuer-weniger-geschrei-im-code] - [Warum verwendet Nette nicht das Suffix Interface? |https://blog.nette.org/de/praefixe-und-suffixe-gehoeren-nicht-in-schnittstellennamen] - [Tipps zur Verwendung des Composers |composer] diff --git a/best-practices/de/microsites.texy b/best-practices/de/microsites.texy new file mode 100644 index 0000000000..f28c89828c --- /dev/null +++ b/best-practices/de/microsites.texy @@ -0,0 +1,63 @@ +Wie man Microsites schreibt +*************************** + +Stellen Sie sich vor, Sie müssen schnell eine kleine Website für eine bevorstehende Veranstaltung Ihres Unternehmens erstellen. Sie soll einfach, schnell und ohne unnötige Komplikationen sein. Sie denken vielleicht, dass ein solch kleines Projekt kein robustes Framework benötigt. Aber was wäre, wenn die Verwendung des Nette-Frameworks diesen Prozess erheblich vereinfachen und beschleunigen könnte? + +Auch bei der Erstellung einfacher Websites wollen Sie nicht auf Komfort verzichten. Sie wollen das Rad nicht neu erfinden. Seien Sie ruhig faul und gönnen Sie sich etwas. Das Nette Framework lässt sich auch hervorragend als Micro-Framework einsetzen. + +Wie könnte eine solche Microsite aussehen? Zum Beispiel kann der gesamte Code der Website in einer einzigen `index.php` Datei im öffentlichen Ordner untergebracht werden: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// einen DI-Container auf der Grundlage der Konfiguration in config.neon erstellen +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// Routing einrichten +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// Route für URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // Erkennung der Browsersprache und Umleitung auf URL /en oder /de usw. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// Route für URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // Anzeige der entsprechenden Vorlage, zum Beispiel ../templates/de.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// Starten Sie die Anwendung! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Alles andere sind Vorlagen, die im übergeordneten Ordner `/templates` gespeichert werden. + +Der PHP-Code in `index.php` richtet zunächst [die Umgebung |bootstrap:] ein, definiert dann die [Routen |application:routing#dynamic-routing-with-callbacks] und führt schließlich die Anwendung aus. Der Vorteil ist, dass der zweite Parameter der Funktion `addRoute()` eine Callable sein kann, die ausgeführt wird, wenn die entsprechende Seite geöffnet wird. + + +Warum Nette für Microsites verwenden? .[#toc-why-use-nette-for-microsites] +-------------------------------------------------------------------------- + +- Entwickler, die [Tracy |tracy:] einmal ausprobiert haben, können sich heute nicht mehr vorstellen, ohne es zu programmieren. +- Aber vor allem werden Sie das Templating-System [Latte |latte:] nutzen, denn schon ab 2 Seiten werden Sie [Layout und Inhalt |latte:template-inheritance] trennen wollen. +- Und Sie wollen sich auf jeden Fall auf das [automatische Escaping |latte:safety-first] verlassen, um XSS-Schwachstellen zu vermeiden. +- Nette sorgt auch dafür, dass im Falle eines Fehlers niemals PHP-Fehlermeldungen angezeigt werden, sondern eine benutzerfreundliche Seite. +- Wenn Sie Feedback von den Nutzern erhalten möchten, zum Beispiel in Form eines Kontaktformulars, können Sie auch [Formulare |forms:] und eine [Datenbank |database:] hinzufügen. +- Sie können ausgefüllte Formulare auch einfach [per E-Mail versch |mail:]icken lassen. +- In manchen Fällen ist die [Zwischenspeicherung |caching:] nützlich, z. B. beim Herunterladen und Anzeigen von Feeds. + +In der heutigen Zeit, in der Geschwindigkeit und Effizienz entscheidend sind, ist es wichtig, über Werkzeuge zu verfügen, die es Ihnen ermöglichen, Ergebnisse ohne unnötige Verzögerungen zu erzielen. Das Nette-Framework bietet genau das - schnelle Entwicklung, Sicherheit und eine breite Palette von Tools wie Tracy und Latte, die den Prozess vereinfachen. Installieren Sie einfach ein paar Nette-Pakete, und die Erstellung einer solchen Microsite wird zum Kinderspiel. Und Sie wissen, dass es keine versteckten Sicherheitslücken gibt. diff --git a/best-practices/el/@home.texy b/best-practices/el/@home.texy index ba364faa14..e3df7ffbb0 100644 --- a/best-practices/el/@home.texy +++ b/best-practices/el/@home.texy @@ -36,6 +36,7 @@ Κοινό ----- - [Πώς να φορτώσετε το αρχείο ρυθμίσεων |bootstrap:] +- [Πώς να γράφετε microsites |microsites] - [Γιατί η Nette χρησιμοποιεί τη σημειογραφία σταθερών PascalCase; |https://blog.nette.org/el/gia-ligoteres-krauges-ston-kodika] - [Γιατί η Nette δεν χρησιμοποιεί την κατάληξη Interface; |https://blog.nette.org/el/ta-prothemata-kai-ta-epithemata-den-anekoun-sta-onomata-diasyndeses] - [Συμβουλές χρήσης του Composer |composer] diff --git a/best-practices/el/microsites.texy b/best-practices/el/microsites.texy new file mode 100644 index 0000000000..b33d0b10fa --- /dev/null +++ b/best-practices/el/microsites.texy @@ -0,0 +1,63 @@ +Πώς να γράψετε Microsites +************************* + +Φανταστείτε ότι πρέπει να δημιουργήσετε γρήγορα έναν μικρό ιστότοπο για μια επερχόμενη εκδήλωση της εταιρείας σας. Θα πρέπει να είναι απλή, γρήγορη και χωρίς περιττές επιπλοκές. Μπορεί να νομίζετε ότι ένα τόσο μικρό έργο δεν απαιτεί ένα ισχυρό πλαίσιο. Τι γίνεται όμως αν η χρήση του πλαισίου Nette μπορεί να απλοποιήσει και να επιταχύνει σημαντικά αυτή τη διαδικασία; + +Ακόμα και όταν δημιουργείτε απλές ιστοσελίδες, δεν θέλετε να παραιτηθείτε από την άνεση. Δεν θέλετε να ανακαλύψετε ξανά τον τροχό. Νιώστε ελεύθεροι να είστε τεμπέληδες και να περιποιηθείτε τον εαυτό σας. Το πλαίσιο Nette μπορεί επίσης να χρησιμοποιηθεί άριστα ως μικροπλαίσιο. + +Πώς θα μπορούσε να μοιάζει μια τέτοια μικροσελίδα; Για παράδειγμα, ολόκληρος ο κώδικας της ιστοσελίδας μπορεί να τοποθετηθεί σε ένα μόνο αρχείο `index.php` στον δημόσιο φάκελο: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// δημιουργία ενός DI container με βάση τη διαμόρφωση στο config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// να ρυθμίσετε τη δρομολόγηση +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// διαδρομή για τη διεύθυνση URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // ανιχνεύει τη γλώσσα του προγράμματος περιήγησης και ανακατευθύνει στη διεύθυνση URL /en ή /de κ.λπ. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// διαδρομή για τη διεύθυνση URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // εμφάνιση του κατάλληλου προτύπου, για παράδειγμα ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// εκτελέστε την εφαρμογή! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Όλα τα υπόλοιπα θα είναι πρότυπα που θα αποθηκεύονται στον γονικό φάκελο `/templates`. + +Ο κώδικας PHP στο `index.php` [ρυθμίζει |bootstrap:] πρώτα [το περιβάλλον |bootstrap:], στη συνέχεια ορίζει τις [διαδρομές |application:routing#dynamic-routing-with-callbacks] και τέλος εκτελεί την εφαρμογή. Το πλεονέκτημα είναι ότι η δεύτερη παράμετρος της συνάρτησης `addRoute()` μπορεί να είναι ένα callable που εκτελείται όταν ανοίγει η αντίστοιχη σελίδα. + + +Γιατί να χρησιμοποιήσετε τη Nette για μικροσελίδες; .[#toc-why-use-nette-for-microsites] +---------------------------------------------------------------------------------------- + +- Οι προγραμματιστές που δοκίμασαν ποτέ [το Tracy |tracy:] δεν μπορούν να φανταστούν σήμερα την κωδικοποίηση χωρίς αυτό. +- Αλλά πάνω απ' όλα, θα αξιοποιήσετε το σύστημα templating [Latte |latte:], επειδή από μόλις 2 σελίδες, θα θέλετε να διαχωρίσετε τη [διάταξη και το περιεχόμενο |latte:template-inheritance]. +- Και σίγουρα θέλετε να βασιστείτε στην [αυτόματη διαφυγή |latte:safety-first] για να αποφύγετε τα τρωτά σημεία XSS. +- Η Nette διασφαλίζει επίσης ότι σε περίπτωση σφάλματος, δεν θα εμφανίζονται ποτέ μηνύματα σφάλματος PHP, αλλά, αντίθετα, μια φιλική προς τον χρήστη σελίδα. +- Αν θέλετε να λαμβάνετε σχόλια από τους χρήστες, για παράδειγμα με τη μορφή φόρμας επικοινωνίας, μπορείτε επίσης να προσθέσετε [φόρμες |forms:] και [βάση δεδομένων |database:]. +- Μπορείτε επίσης εύκολα να έχετε συμπληρωμένες φόρμες που [αποστέλλονται μέσω ηλεκτρονικού ταχυδρομείου |mail:]. +- Ορισμένες φορές μπορεί να βρείτε την [προσωρινή αποθήκευση δεδομένων |caching:] χρήσιμη, για παράδειγμα, κατά τη λήψη και την εμφάνιση τροφοδοσιών. + +Στη σημερινή εποχή, όπου η ταχύτητα και η αποδοτικότητα είναι το κλειδί, είναι σημαντικό να έχετε εργαλεία που σας επιτρέπουν να επιτυγχάνετε αποτελέσματα χωρίς περιττές καθυστερήσεις. Το πλαίσιο Nette προσφέρει ακριβώς αυτό - γρήγορη ανάπτυξη, ασφάλεια και ένα ευρύ φάσμα εργαλείων όπως το Tracy και το Latte που απλοποιούν τη διαδικασία. Απλά εγκαταστήστε μερικά πακέτα Nette και η κατασκευή ενός τέτοιου microsite γίνεται παιχνιδάκι. Και ξέρετε ότι δεν υπάρχουν κρυφά κενά ασφαλείας. diff --git a/best-practices/en/@home.texy b/best-practices/en/@home.texy index 43f088951b..a83fdeb24e 100644 --- a/best-practices/en/@home.texy +++ b/best-practices/en/@home.texy @@ -36,6 +36,7 @@ Forms Common ------ - [How to load configuration file |bootstrap:] +- [How to write microsites |microsites] - [Why Nette uses PascalCase constant notation? |https://blog.nette.org/en/for-less-screaming-in-the-code] - [Why Nette doesn't use the Interface suffix? |https://blog.nette.org/en/prefixes-and-suffixes-do-not-belong-in-interface-names] - [Composer usage tips |composer] diff --git a/best-practices/en/microsites.texy b/best-practices/en/microsites.texy new file mode 100644 index 0000000000..846ddbe96d --- /dev/null +++ b/best-practices/en/microsites.texy @@ -0,0 +1,63 @@ +How to Write Microsites +*********************** + +Imagine that you need to quickly create a small website for an upcoming event of your company. It should be simple, fast, and without unnecessary complications. You might think that such a small project doesn't require a robust framework. But what if using the Nette framework can significantly simplify and speed up this process? + +Even when creating simple websites, you don't want to give up comfort. You don't want to reinvent the wheel. Feel free to be lazy and pamper yourself. The Nette Framework can also be excellently used as a micro framework. + +What might such a microsite look like? For example, the entire code of the website can be placed in a single `index.php` file in the public folder: + +```php +enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// create a DI container based on the configuration in config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// set up routing +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// route for URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // detect browser language and redirect to URL /en or /de etc. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// route for URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // display the appropriate template, for example ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// run the application! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Everything else will be templates stored in the parent `/templates` folder. + +The PHP code in `index.php` first [sets up the environment |bootstrap:], then defines [routes|application:routing#dynamic-routing-with-callbacks], and finally runs the application. The advantage is that the second parameter of the `addRoute()` function can be a callable that is executed when the corresponding page is opened. + + +Why use Nette for Microsites? +----------------------------- + +- Developers who have ever tried [Tracy|tracy:] can't imagine coding without it today. +- But above all, you will utilize the templating system [Latte|latte:], because from just 2 pages, you will want to separate [layout and content|latte:template-inheritance]. +- And you definitely want to rely on [automatic escaping |latte:safety-first] to prevent XSS vulnerabilities. +- Nette also ensures that in case of an error, PHP error messages will never be displayed, but instead, a user-friendly page will. +- If you want to get feedback from users, for example in the form of a contact form, you can also add [forms|forms:] and [database|database:]. +- You can also easily have filled-out forms [sent by email|mail:]. +- Sometimes you might find [caching|caching:] useful, for instance, when downloading and displaying feeds. + +In today's age, where speed and efficiency are key, it's important to have tools that allow you to achieve results without unnecessary delays. The Nette framework offers just that - fast development, security, and a wide range of tools like Tracy and Latte that simplify the process. Just install a few Nette packages, and building such a microsite becomes a breeze. And you know there are no hidden security flaws. diff --git a/best-practices/es/@home.texy b/best-practices/es/@home.texy index 2bbf67aa4b..2b8c641620 100644 --- a/best-practices/es/@home.texy +++ b/best-practices/es/@home.texy @@ -36,6 +36,7 @@ Formularios Común ----- - [Cómo cargar el fichero de configuración |bootstrap:] +- [Cómo escribir micrositios |microsites] - [¿Por qué Nette utiliza la notación constante PascalCase? |https://blog.nette.org/es/para-menos-gritos-en-el-codigo] - [¿Por qué Nette no utiliza el sufijo Interface? |https://blog.nette.org/es/los-prefijos-y-sufijos-no-pertenecen-a-los-nombres-de-interfaz] - [Consejos de uso de Composer |composer] diff --git a/best-practices/es/microsites.texy b/best-practices/es/microsites.texy new file mode 100644 index 0000000000..6899e693df --- /dev/null +++ b/best-practices/es/microsites.texy @@ -0,0 +1,63 @@ +Cómo escribir micrositios +************************* + +Imagine que necesita crear rápidamente un pequeño sitio web para un próximo evento de su empresa. Debe ser simple, rápido y sin complicaciones innecesarias. Podrías pensar que un proyecto tan pequeño no requiere un framework robusto. Pero, ¿y si el uso del framework Nette puede simplificar y acelerar significativamente este proceso? + +Incluso cuando se crean sitios web sencillos, no se quiere renunciar a la comodidad. No quieres reinventar la rueda. Siéntase libre de ser perezoso y mimarse. Nette Framework también puede utilizarse de forma excelente como micro framework. + +¿Qué aspecto podría tener un micrositio de este tipo? Por ejemplo, todo el código del sitio web puede colocarse en un único archivo `index.php` en la carpeta pública: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// crear un contenedor DI basado en la configuración en config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// configurar el enrutamiento +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// ruta para la URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // detectar el idioma del navegador y redirigir a la URL /en o /de etc. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// ruta para URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // mostrar la plantilla adecuada, por ejemplo ../templates/es.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// ejecutar la aplicación +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Todo lo demás serán plantillas almacenadas en la carpeta padre `/templates`. + +El código PHP en `index.php` primero [configura el entorno |bootstrap:], luego define las [rutas |application:routing#dynamic-routing-with-callbacks] y finalmente ejecuta la aplicación. La ventaja es que el segundo parámetro de la función `addRoute()` puede ser un callable que se ejecuta cuando se abre la página correspondiente. + + +¿Por qué utilizar Nette para los micrositios? .[#toc-why-use-nette-for-microsites] +---------------------------------------------------------------------------------- + +- Los desarrolladores que hayan probado alguna vez [Tracy |tracy:] no se imaginan hoy en día codificar sin él. +- Pero sobre todo, utilizarán el sistema de plantillas [Latte |latte:], porque a partir de sólo 2 páginas, querrán separar [maquetación y contenido |latte:template-inheritance]. +- Y sin duda querrá confiar en el [escape automático |latte:safety-first] para evitar vulnerabilidades XSS. +- Nette también garantiza que, en caso de error, nunca se mostrarán mensajes de error de PHP, sino una página fácil de usar. +- Si desea obtener comentarios de los usuarios, por ejemplo en forma de formulario de contacto, también puede añadir [formularios |forms:] y [base de datos |database:]. +- También puedes hacer que los formularios rellenados se envíen fácilmente [por correo electrónico |mail:]. +- A veces puede resultarte útil [el almacenamiento en caché |caching:], por ejemplo, al descargar y mostrar feeds. + +En la era actual, en la que la velocidad y la eficacia son fundamentales, es importante contar con herramientas que permitan obtener resultados sin retrasos innecesarios. El framework Nette ofrece precisamente eso: desarrollo rápido, seguridad y una amplia gama de herramientas como Tracy y Latte que simplifican el proceso. Basta con instalar algunos paquetes de Nette, y construir un micrositio de este tipo se convierte en un juego de niños. Y sabes que no hay fallos de seguridad ocultos. diff --git a/best-practices/fr/@home.texy b/best-practices/fr/@home.texy index 0b3d8c26f6..2721f09ca9 100644 --- a/best-practices/fr/@home.texy +++ b/best-practices/fr/@home.texy @@ -36,6 +36,7 @@ Formulaires Commun ------ - [Comment charger le fichier de configuration |bootstrap:] +- [Comment rédiger des microsites |microsites] - [Pourquoi Nette utilise la notation constante PascalCase ? |https://blog.nette.org/fr/pour-moins-crier-dans-le-code] - [Pourquoi Nette n'utilise pas le suffixe Interface ? |https://blog.nette.org/fr/les-prefixes-et-les-suffixes-n-ont-pas-leur-place-dans-les-noms-d-interface] - [Conseils d'utilisation de Composer |composer] diff --git a/best-practices/fr/microsites.texy b/best-practices/fr/microsites.texy new file mode 100644 index 0000000000..cdc28d162b --- /dev/null +++ b/best-practices/fr/microsites.texy @@ -0,0 +1,63 @@ +Comment rédiger des microsites +****************************** + +Imaginez que vous ayez besoin de créer rapidement un petit site web pour un événement à venir de votre entreprise. Il doit être simple, rapide et sans complications inutiles. Vous pourriez penser qu'un si petit projet ne nécessite pas un framework robuste. Et si l'utilisation du framework Nette pouvait considérablement simplifier et accélérer ce processus ? + +Même lors de la création de sites web simples, vous ne voulez pas renoncer au confort. Vous ne voulez pas réinventer la roue. N'hésitez pas à être paresseux et à vous faire plaisir. Le cadre Nette peut également être utilisé de manière optimale en tant que micro-cadre. + +À quoi pourrait ressembler un tel microsite ? Par exemple, l'ensemble du code du site web peut être placé dans un seul fichier `index.php` dans le dossier public : + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// créer un conteneur DI basé sur la configuration dans config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// mettre en place le routage +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// route pour l'URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // détecter la langue du navigateur et rediriger vers l'URL /en ou /de etc. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// route pour l'URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // affiche le modèle approprié, par exemple ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// Exécutez l'application ! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Tout le reste sera des modèles stockés dans le dossier parent `/templates`. + +Le code PHP dans `index.php` configure d'abord l'[environnement |bootstrap:], puis définit les [itinéraires |application:routing#dynamic-routing-with-callbacks] et enfin exécute l'application. L'avantage est que le deuxième paramètre de la fonction `addRoute()` peut être un appel qui est exécuté lorsque la page correspondante est ouverte. + + +Pourquoi utiliser Nette pour les microsites ? .[#toc-why-use-nette-for-microsites] +---------------------------------------------------------------------------------- + +- Les développeurs qui ont déjà essayé [Tracy |tracy:] ne peuvent imaginer coder sans lui aujourd'hui. +- Mais surtout, vous utiliserez le système de templates [Latte |latte:], parce qu'à partir de 2 pages seulement, vous voudrez séparer la [mise en page et le contenu |latte:template-inheritance]. +- Et vous voudrez certainement compter sur l'[échappement automatique |latte:safety-first] pour éviter les vulnérabilités XSS. +- Nette garantit également qu'en cas d'erreur, les messages d'erreur PHP ne seront jamais affichés, mais qu'une page conviviale le sera. +- Si vous souhaitez obtenir un retour d'information de la part des utilisateurs, par exemple sous la forme d'un formulaire de contact, vous pouvez également ajouter des [formulaires |forms:] et une [base de données |database:]. +- Vous pouvez également faire en sorte que les formulaires remplis soient [envoyés par courrier électronique |mail:]. +- La [mise en cache |caching:] peut parfois s'avérer utile, par exemple lors du téléchargement et de l'affichage de flux. + +À notre époque, où la rapidité et l'efficacité sont essentielles, il est important de disposer d'outils qui vous permettent d'obtenir des résultats sans retards inutiles. C'est précisément ce qu'offre le cadre Nette : un développement rapide, la sécurité et une large gamme d'outils tels que Tracy et Latte qui simplifient le processus. Il suffit d'installer quelques paquets Nette pour que la création d'un microsite devienne un jeu d'enfant. Et vous savez qu'il n'y a pas de failles de sécurité cachées. diff --git a/best-practices/hu/@home.texy b/best-practices/hu/@home.texy index 5d9c323f64..b647c32f9f 100644 --- a/best-practices/hu/@home.texy +++ b/best-practices/hu/@home.texy @@ -36,6 +36,7 @@ Nyomtatványok Közös ----- - [Konfigurációs fájl betöltése |bootstrap:] +- [Hogyan írjunk microsite-okat |microsites] - [Miért használ a Nette PascalCase konstans jelölést? |https://blog.nette.org/hu/kevesebb-sikolyert-a-kodban] - [Miért nem használja a Nette az Interface utótagot? |https://blog.nette.org/hu/az-elotagok-es-utotagok-nem-tartoznak-az-interfesznevekbe] - [Composer használati tippek |composer] diff --git a/best-practices/hu/microsites.texy b/best-practices/hu/microsites.texy new file mode 100644 index 0000000000..13c9024a32 --- /dev/null +++ b/best-practices/hu/microsites.texy @@ -0,0 +1,63 @@ +Hogyan írjunk mikrooldalakat +**************************** + +Képzelje el, hogy gyorsan létre kell hoznia egy kis weboldalt a cégének egy közelgő eseményéhez. Egyszerűnek, gyorsnak és felesleges bonyodalmak nélkülinek kell lennie. Azt gondolhatod, hogy egy ilyen kis projekt nem igényel robusztus keretrendszert. De mi van akkor, ha a Nette keretrendszer használatával jelentősen leegyszerűsítheti és felgyorsíthatja ezt a folyamatot? + +Még egyszerű weboldalak készítésekor sem szeretne lemondani a kényelemről. Nem akarja újra feltalálni a kereket. Legyen nyugodtan lusta és kényeztesse magát. A Nette keretrendszer mikro keretrendszerként is kiválóan használható. + +Hogyan nézhet ki egy ilyen mikrooldal? Például a weboldal teljes kódja egyetlen `index.php` fájlba helyezhető a nyilvános mappában: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// létrehoz egy DI konténert a config.neon konfiguráció alapján +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// útválasztás beállítása +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// útvonal az URL https://example.com/ URL-hez +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // a böngésző nyelvének felismerése és átirányítás az URL /en vagy /de stb. címre. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// útvonal az URL-hez https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // a megfelelő sablon megjelenítése, például ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// futtassuk az alkalmazást! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Minden más a `/templates` szülőmappában tárolt sablonok lesznek. + +A `index.php` oldalon található PHP-kód először beállítja [a környezetet |bootstrap:], majd definiálja az [útvonalakat |application:routing#dynamic-routing-with-callbacks], végül pedig futtatja az alkalmazást. Ennek előnye, hogy a `addRoute()` függvény második paramétere lehet egy hívható, amely a megfelelő oldal megnyitásakor végrehajtódik. + + +Miért használja a Nette-et a mikrooldalakhoz? .[#toc-why-use-nette-for-microsites] +---------------------------------------------------------------------------------- + +- Azok a fejlesztők, akik valaha is kipróbálták a [Tracy-t |tracy:], ma már el sem tudják képzelni a kódolást nélküle. +- De mindenekelőtt a [Latte |latte:] templating rendszert fogja kihasználni, mert mindössze 2 oldalról akarja szétválasztani [az elrendezést és a tartalmat |latte:template-inheritance]. +- És mindenképpen az [automatikus escapingre |latte:safety-first] akarsz támaszkodni az XSS sebezhetőségek elkerülése érdekében. +- A Nette gondoskodik arról is, hogy hiba esetén soha ne jelenjenek meg PHP hibaüzenetek, hanem egy felhasználóbarát oldal jelenjen meg. +- Ha visszajelzést szeretne kapni a felhasználóktól, például kapcsolatfelvételi űrlap formájában, akkor [űrlapokat |forms:] és [adatbázist |database:] is hozzáadhat. +- A kitöltött űrlapokat is könnyen [elküldheti e-mailben |mail:]. +- Néha hasznos lehet a [gyorsítótárazás |caching:], például a feedek letöltésekor és megjelenítésekor. + +A mai korban, amikor a gyorsaság és a hatékonyság kulcsfontosságú, fontos, hogy olyan eszközökkel rendelkezzen, amelyekkel felesleges késedelmek nélkül érhet el eredményeket. A Nette keretrendszer pontosan ezt kínálja: gyors fejlesztést, biztonságot és olyan eszközök széles skáláját, mint a Tracy és a Latte, amelyek leegyszerűsítik a folyamatot. Csak telepítsen néhány Nette csomagot, és egy ilyen microsite építése gyerekjátékká válik. És tudja, hogy nincsenek rejtett biztonsági hibák. diff --git a/best-practices/it/@home.texy b/best-practices/it/@home.texy index 10f16cec1d..bb15638c9d 100644 --- a/best-practices/it/@home.texy +++ b/best-practices/it/@home.texy @@ -36,6 +36,7 @@ Moduli Comune ------ - [Come caricare il file di configurazione |bootstrap:] +- [Come scrivere micrositi |microsites] - [Perché Nette usa la notazione costante PascalCase? |https://blog.nette.org/it/per-non-urlare-nel-codice] - [Perché Nette non usa il suffisso Interface? |https://blog.nette.org/it/i-prefissi-e-i-suffissi-non-appartengono-ai-nomi-delle-interfacce] - [Suggerimenti per l'uso di Composer |composer] diff --git a/best-practices/it/microsites.texy b/best-practices/it/microsites.texy new file mode 100644 index 0000000000..d023f24d7d --- /dev/null +++ b/best-practices/it/microsites.texy @@ -0,0 +1,63 @@ +Come scrivere micrositi +*********************** + +Immaginate di dover creare rapidamente un piccolo sito web per un evento imminente della vostra azienda. Dovrebbe essere semplice, veloce e senza inutili complicazioni. Potreste pensare che un progetto così piccolo non richieda un framework robusto. Ma se l'utilizzo del framework Nette semplificasse e velocizzasse notevolmente questo processo? + +Anche quando si creano siti web semplici, non si vuole rinunciare al comfort. Non volete reinventare la ruota. Sentitevi liberi di essere pigri e di coccolarvi. Il framework Nette può essere utilizzato in modo eccellente anche come micro framework. + +Come potrebbe essere un microsito di questo tipo? Ad esempio, l'intero codice del sito web può essere inserito in un singolo file `index.php` nella cartella pubblica: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// creare un contenitore DI basato sulla configurazione in config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// impostare l'instradamento +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// rotta per l'URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // rilevare la lingua del browser e reindirizzare all'URL /en o /de ecc. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// rotta per l'URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // visualizza il modello appropriato, ad esempio ../templates/it.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// eseguire l'applicazione! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Tutto il resto saranno modelli memorizzati nella cartella madre `/templates`. + +Il codice PHP in `index.php` imposta prima l'[ambiente |bootstrap:], poi definisce le [rotte |application:routing#dynamic-routing-with-callbacks] e infine esegue l'applicazione. Il vantaggio è che il secondo parametro della funzione `addRoute()` può essere un callable che viene eseguito quando viene aperta la pagina corrispondente. + + +Perché usare Nette per i micrositi? .[#toc-why-use-nette-for-microsites] +------------------------------------------------------------------------ + +- Gli sviluppatori che hanno provato [Tracy |tracy:] non possono immaginare di codificare senza di esso oggi. +- Ma soprattutto, utilizzerete il sistema di template [Latte |latte:], perché da sole 2 pagine, vorrete separare [layout e contenuti |latte:template-inheritance]. +- E sicuramente vorrete affidarvi all'[escape automatico |latte:safety-first] per prevenire le vulnerabilità XSS. +- Nette garantisce inoltre che, in caso di errore, non vengano mai visualizzati messaggi di errore PHP, ma una pagina di facile consultazione. +- Se si desidera ottenere un feedback dagli utenti, ad esempio sotto forma di modulo di contatto, è possibile aggiungere [moduli |forms:] e [database |database:]. +- È anche possibile [inviare |mail:] facilmente [via e-mail |mail:] i moduli compilati. +- A volte può essere utile la [cache |caching:], ad esempio quando si scaricano e si visualizzano i feed. + +Nell'era odierna, in cui velocità ed efficienza sono fondamentali, è importante disporre di strumenti che consentano di ottenere risultati senza inutili ritardi. Il framework Nette offre proprio questo: sviluppo veloce, sicurezza e un'ampia gamma di strumenti come Tracy e Latte che semplificano il processo. Basta installare alcuni pacchetti Nette e la costruzione di un microsito di questo tipo diventa un gioco da ragazzi. E si sa che non ci sono falle di sicurezza nascoste. diff --git a/best-practices/pl/@home.texy b/best-practices/pl/@home.texy index 32416cbcfb..71e32b1075 100644 --- a/best-practices/pl/@home.texy +++ b/best-practices/pl/@home.texy @@ -36,6 +36,7 @@ Formularze Wspólne ------- - [Jak załadować plik konfiguracyjny |bootstrap:] +- [Jak pisać mikrowitryny |microsites] - [Dlaczego Nette używa notacji stałej PascalCase? |https://blog.nette.org/pl/aby-mniej-krzyczec-w-kodzie] - [Dlaczego Nette nie używa przyrostka Interface? |https://blog.nette.org/pl/przedrostki-i-przyrostki-nie-sa-czescia-nazw-interfejsow] - [Kompozytor: wskazówki dotyczące użytkowania |composer] diff --git a/best-practices/pl/microsites.texy b/best-practices/pl/microsites.texy new file mode 100644 index 0000000000..64a7bfcc71 --- /dev/null +++ b/best-practices/pl/microsites.texy @@ -0,0 +1,63 @@ +Jak pisać mikrostrony internetowe +********************************* + +Wyobraź sobie, że musisz szybko stworzyć małą stronę internetową na nadchodzące wydarzenie Twojej firmy. Powinna być prosta, szybka i bez zbędnych komplikacji. Można by pomyśleć, że tak mały projekt nie wymaga solidnego frameworka. Ale co, jeśli użycie frameworka Nette może znacznie uprościć i przyspieszyć ten proces? + +Nawet tworząc proste strony internetowe, nie chcesz rezygnować z wygody. Nie chcesz wymyślać koła na nowo. Możesz być leniwy i rozpieszczać samego siebie. Nette Framework może być również doskonale wykorzystywany jako mikro framework. + +Jak może wyglądać taka mikrostrona? Na przykład, cały kod strony może być umieszczony w pojedynczym pliku `index.php` w folderze publicznym: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// utworzenie kontenera DI na podstawie konfiguracji w config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// skonfigurować routing +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// trasa dla adresu URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // wykrywanie języka przeglądarki i przekierowanie na URL /en lub /de itp. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// trasa dla adresu URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // wyświetla odpowiedni szablon, na przykład ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// uruchom aplikację! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Cała reszta będzie szablonami przechowywanymi w folderze nadrzędnym `/templates`. + +Kod PHP w `index.php` najpierw konfiguruje [środowisko |bootstrap:], następnie definiuje [trasy |application:routing#dynamic-routing-with-callbacks], a na końcu uruchamia aplikację. Zaletą jest to, że drugim parametrem funkcji `addRoute()` może być wywołanie, które jest wykonywane po otwarciu odpowiedniej strony. + + +Dlaczego warto używać Nette dla mikrostron? .[#toc-why-use-nette-for-microsites] +-------------------------------------------------------------------------------- + +- Programiści, którzy kiedykolwiek wypróbowali [Tracy |tracy:], nie wyobrażają sobie dziś kodowania bez niego. +- Ale przede wszystkim będziesz korzystać z systemu szablonów [Latte |latte:], ponieważ z zaledwie 2 stron będziesz chciał oddzielić [układ i zawartość |latte:template-inheritance]. +- I zdecydowanie chcesz polegać na [automatycznym uciekaniu |latte:safety-first], aby zapobiec lukom w zabezpieczeniach XSS. +- Nette zapewnia również, że w przypadku błędu komunikaty o błędach PHP nigdy nie będą wyświetlane, ale zamiast tego pojawi się przyjazna dla użytkownika strona. +- Jeśli chcesz uzyskać informacje zwrotne od użytkowników, na przykład w formie formularza kontaktowego, możesz również dodać [formularze |forms:] i [bazę danych |database:]. +- Możesz także łatwo wysyłać wypełnione formularze [pocztą e-mail |mail:]. +- Czasami przydatne może okazać się [buforowanie |caching:], na przykład podczas pobierania i wyświetlania kanałów. + +W dzisiejszych czasach, gdzie szybkość i wydajność są kluczowe, ważne jest, aby mieć narzędzia, które pozwalają osiągnąć wyniki bez zbędnych opóźnień. Framework Nette oferuje właśnie to - szybki rozwój, bezpieczeństwo i szeroką gamę narzędzi, takich jak Tracy i Latte, które upraszczają proces. Wystarczy zainstalować kilka pakietów Nette, a zbudowanie takiej mikrostrony staje się dziecinnie proste. I wiesz, że nie ma żadnych ukrytych luk w zabezpieczeniach. diff --git a/best-practices/pt/@home.texy b/best-practices/pt/@home.texy index 5435e5eceb..6eba10e4ea 100644 --- a/best-practices/pt/@home.texy +++ b/best-practices/pt/@home.texy @@ -36,6 +36,7 @@ Formulários Comum ----- - [Como carregar o arquivo de configuração |bootstrap:] +- [Como escrever microsites |microsites] - [Por que a Nette usa a notação constante PascalCase? |https://blog.nette.org/pt/por-menos-gritos-no-codigo] - [Por que Nette não usa o sufixo Interface? |https://blog.nette.org/pt/prefixos-e-sufixos-nao-pertencem-a-nomes-de-interface] - [Dicas de uso do compositor |composer] diff --git a/best-practices/pt/microsites.texy b/best-practices/pt/microsites.texy new file mode 100644 index 0000000000..d436664b88 --- /dev/null +++ b/best-practices/pt/microsites.texy @@ -0,0 +1,63 @@ +Como escrever microsites +************************ + +Imagine que você precise criar rapidamente um pequeno site para um evento futuro da sua empresa. Ele deve ser simples, rápido e sem complicações desnecessárias. Você pode pensar que um projeto tão pequeno não requer uma estrutura robusta. Mas e se o uso da estrutura Nette pudesse simplificar e acelerar significativamente esse processo? + +Mesmo ao criar sites simples, você não quer abrir mão do conforto. Você não quer reinventar a roda. Sinta-se à vontade para ser preguiçoso e se mimar. O Nette Framework também pode ser usado de forma excelente como uma microestrutura. + +Como seria esse microsite? Por exemplo, todo o código do site pode ser colocado em um único arquivo `index.php` na pasta pública: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// Crie um contêiner DI com base na configuração em config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// configurar o roteamento +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// rota para o URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // detectar o idioma do navegador e redirecionar para o URL /en ou /de etc. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// rota para o URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // exibir o modelo apropriado, por exemplo, ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// Execute o aplicativo! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Todo o resto serão modelos armazenados na pasta principal `/templates`. + +O código PHP em `index.php` primeiro [configura o ambiente |bootstrap:], depois define [as rotas |application:routing#dynamic-routing-with-callbacks] e, por fim, executa o aplicativo. A vantagem é que o segundo parâmetro da função `addRoute()` pode ser um chamável que é executado quando a página correspondente é aberta. + + +Por que usar o Nette para microsites? .[#toc-why-use-nette-for-microsites] +-------------------------------------------------------------------------- + +- Os desenvolvedores que já experimentaram [o Tracy |tracy:] não conseguem imaginar a codificação sem ele hoje. +- Mas, acima de tudo, você utilizará o sistema de modelos [Latte |latte:], pois a partir de apenas duas páginas, você desejará separar [o layout do conteúdo |latte:template-inheritance]. +- E, com certeza, você vai querer contar com o [escape automático |latte:safety-first] para evitar vulnerabilidades de XSS. +- O Nette também garante que, em caso de erro, as mensagens de erro do PHP nunca serão exibidas, mas, em vez disso, será exibida uma página de fácil utilização. +- Se quiser obter feedback dos usuários, por exemplo, na forma de um formulário de contato, também é possível adicionar [formulários |forms:] e [banco de dados |database:]. +- Os formulários preenchidos também podem ser facilmente [enviados por e-mail |mail:]. +- Às vezes, o armazenamento [em cache |caching:] pode ser útil, por exemplo, ao baixar e exibir feeds. + +Na era atual, em que velocidade e eficiência são fundamentais, é importante ter ferramentas que permitam obter resultados sem atrasos desnecessários. A estrutura Nette oferece exatamente isso: desenvolvimento rápido, segurança e uma ampla variedade de ferramentas, como Tracy e Latte, que simplificam o processo. Basta instalar alguns pacotes Nette e criar um microsite como esse se torna muito fácil. E você sabe que não há falhas de segurança ocultas. diff --git a/best-practices/ro/@home.texy b/best-practices/ro/@home.texy index 823591e492..5a2a254154 100644 --- a/best-practices/ro/@home.texy +++ b/best-practices/ro/@home.texy @@ -36,6 +36,7 @@ Formulare Comună ------ - [Cum se încarcă fișierul de configurare |bootstrap:] +- [Cum să scrieți microsite-uri |microsites] - [De ce Nette folosește notația constantă PascalCase? |https://blog.nette.org/ro/pentru-mai-putine-tipete-in-cod] - [De ce Nette nu folosește sufixul Interface? |https://blog.nette.org/ro/prefixele-si-sufixele-nu-se-regasesc-in-numele-interfetelor] - [Sfaturi pentru utilizarea Composer |composer] diff --git a/best-practices/ro/microsites.texy b/best-practices/ro/microsites.texy new file mode 100644 index 0000000000..bdeb94a83c --- /dev/null +++ b/best-practices/ro/microsites.texy @@ -0,0 +1,63 @@ +Cum să scrieți microsite-uri +**************************** + +Imaginați-vă că trebuie să creați rapid un mic site web pentru un eveniment viitor al companiei dumneavoastră. Acesta trebuie să fie simplu, rapid și fără complicații inutile. S-ar putea să vă gândiți că un proiect atât de mic nu necesită un framework robust. Dar dacă utilizarea cadrului Nette ar putea simplifica și accelera semnificativ acest proces? + +Chiar și atunci când creați site-uri web simple, nu doriți să renunțați la confort. Nu doriți să reinventați roata. Simțiți-vă liber să fiți leneș și să vă răsfățați. Cadrul Nette Framework poate fi folosit excelent și ca microcadru. + +Cum ar putea arăta un astfel de microsite? De exemplu, întregul cod al site-ului poate fi plasat într-un singur fișier `index.php` în folderul public: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// creați un container DI pe baza configurației din config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// configurați rutarea +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// ruta pentru URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // detectează limba browserului și redirecționează la URL /en sau /de etc. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// ruta pentru URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // afișează șablonul corespunzător, de exemplu ../template/ro.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// rulați aplicația! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Restul vor fi șabloane stocate în dosarul părinte `/templates`. + +Codul PHP din `index.php` [stabilește |bootstrap:] mai întâi [mediul |bootstrap:], apoi definește [rutele |application:routing#dynamic-routing-with-callbacks] și, în final, rulează aplicația. Avantajul este că al doilea parametru al funcției `addRoute()` poate fi un callable care este executat atunci când se deschide pagina corespunzătoare. + + +De ce să folosiți Nette pentru microsite-uri? .[#toc-why-use-nette-for-microsites] +---------------------------------------------------------------------------------- + +- Dezvoltatorii care au încercat vreodată [Tracy |tracy:] nu-și pot imagina astăzi codarea fără el. +- Dar, mai presus de toate, veți utiliza sistemul de template-uri [Latte |latte:], deoarece de la doar 2 pagini, veți dori să separați [aspectul și conținutul |latte:template-inheritance]. +- Și, cu siguranță, veți dori să vă bazați pe [escape-ul automat |latte:safety-first] pentru a preveni vulnerabilitățile XSS. +- De asemenea, Latte se asigură că, în caz de eroare, nu vor fi afișate niciodată mesaje de eroare PHP, ci în schimb, o pagină ușor de utilizat. +- Dacă doriți să obțineți feedback de la utilizatori, de exemplu sub forma unui formular de contact, puteți adăuga, de asemenea, [formulare |forms:] și [bază de date |database:]. +- De asemenea, puteți face cu ușurință ca formularele completate să fie [trimise prin e-mail |mail:]. +- Uneori s-ar putea să vă fie utilă [memoria cache |caching:], de exemplu, atunci când descărcați și afișați fluxuri. + +În epoca actuală, în care viteza și eficiența sunt esențiale, este important să dispuneți de instrumente care vă permit să obțineți rezultate fără întârzieri inutile. Cadrul Nette oferă exact acest lucru - dezvoltare rapidă, securitate și o gamă largă de instrumente precum Tracy și Latte, care simplifică procesul. Este suficient să instalați câteva pachete Nette, iar construirea unui astfel de microsite devine o joacă de copii. Și știți că nu există defecte de securitate ascunse. diff --git a/best-practices/ru/@home.texy b/best-practices/ru/@home.texy index 05f2905032..69eed2aa87 100644 --- a/best-practices/ru/@home.texy +++ b/best-practices/ru/@home.texy @@ -36,6 +36,7 @@ Общие ----- - [Как загрузить файл конфигурации |bootstrap:] +- [Как писать микросайты |microsites] - [Почему Nette использует константную нотацию PascalCase? |https://blog.nette.org/ru/ctoby-men-se-kricat-v-kode] - [Почему Nette не использует суффикс Interface? |https://blog.nette.org/ru/prefiksy-i-suffiksy-ne-dolzny-prisutstvovat-v-imenah-interfejsov] - [Советы по использованию Composer |composer] diff --git a/best-practices/ru/microsites.texy b/best-practices/ru/microsites.texy new file mode 100644 index 0000000000..4db9a76100 --- /dev/null +++ b/best-practices/ru/microsites.texy @@ -0,0 +1,63 @@ +Как писать микросайты +********************* + +Представьте себе, что вам нужно быстро создать небольшой сайт для предстоящего мероприятия вашей компании. Он должен быть простым, быстрым и без лишних сложностей. Вы можете подумать, что для такого небольшого проекта не нужен надежный фреймворк. Но что если использование фреймворка Nette значительно упростит и ускорит этот процесс? + +Даже при создании простых сайтов не стоит отказываться от удобства. Не стоит изобретать колесо. Не стесняйтесь лениться и баловать себя. Фреймворк Nette Framework можно прекрасно использовать и в качестве микрофреймворка. + +Как может выглядеть такой микросайт? Например, весь код сайта может быть размещен в одном файле `index.php` в общей папке: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// создание DI-контейнера на основе конфигурации в config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// настройка маршрутизации +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// маршрут для URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // определять язык браузера и перенаправлять на URL /en или /de и т.д. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// маршрут для URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // отобразить соответствующий шаблон, например ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// запустите приложение! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Все остальное будет представлять собой шаблоны, хранящиеся в родительской папке `/templates`. + +PHP-код в папке `index.php` сначала устанавливает [окружение |bootstrap:], затем определяет [маршруты |application:routing#dynamic-routing-with-callbacks] и, наконец, запускает приложение. Преимуществом является то, что вторым параметром функции `addRoute()` может быть вызываемая переменная, которая выполняется при открытии соответствующей страницы. + + +Почему стоит использовать Nette для микросайтов? .[#toc-why-use-nette-for-microsites] +------------------------------------------------------------------------------------- + +- Разработчики, которые когда-либо пробовали [Tracy |tracy:], сегодня не могут представить себе кодирование без нее. +- Но прежде всего вам пригодится система шаблонов [Latte |latte:], поскольку всего с 2 страниц вы захотите разделить [верстку и контент |latte:template-inheritance]. +- А для предотвращения XSS-уязвимостей вам обязательно понадобится [автоматическое экранирование |latte:safety-first]. +- Nette также гарантирует, что в случае ошибки никогда не будут выводиться сообщения об ошибках PHP, а вместо них будет отображаться удобная для пользователя страница. +- Если вы хотите получать обратную связь от пользователей, например, в виде контактной формы, вы также можете добавить [формы |forms:] и [базу данных |database:]. +- Кроме того, заполненные формы можно легко отправить по [электронной почте |mail:]. +- Иногда может пригодиться [кэширование |caching:], например, при загрузке и отображении лент. + +В наше время, когда скорость и эффективность являются ключевыми факторами, важно иметь инструменты, позволяющие достигать результатов без лишних задержек. Фреймворк Nette предлагает именно такие инструменты - быструю разработку, безопасность и широкий набор средств, таких как Tracy и Latte, которые упрощают процесс. Достаточно установить несколько пакетов Nette, и создание такого микросайта превращается в легкое дело. При этом вы будете уверены, что в системе безопасности нет никаких скрытых недостатков. diff --git a/best-practices/sl/@home.texy b/best-practices/sl/@home.texy index ea4899f2ec..f89b8a74a1 100644 --- a/best-practices/sl/@home.texy +++ b/best-practices/sl/@home.texy @@ -36,6 +36,7 @@ Obrazci Skupna spletna stran -------------------- - [Kako naložiti konfiguracijsko datoteko |bootstrap:] +- [Kako napisati mikrostrani |microsites] - [Zakaj Nette uporablja konstantni zapis PascalCase |https://blog.nette.org/sl/za-manj-kricanja-v-kodi]? - [Zakaj Nette ne uporablja končnice Interface |https://blog.nette.org/sl/predpone-in-pripone-ne-sodijo-v-imena-vmesnikov]? - [Nasveti za uporabo programa Composer |composer] diff --git a/best-practices/sl/microsites.texy b/best-practices/sl/microsites.texy new file mode 100644 index 0000000000..ce6af7d0da --- /dev/null +++ b/best-practices/sl/microsites.texy @@ -0,0 +1,63 @@ +Kako napisati mikrostrani +************************* + +Predstavljajte si, da morate na hitro ustvariti majhno spletno stran za prihajajoči dogodek vašega podjetja. Biti mora preprosta, hitra in brez nepotrebnih zapletov. Morda mislite, da tako majhen projekt ne zahteva robustnega ogrodja. Kaj pa, če lahko z uporabo ogrodja Nette ta postopek bistveno poenostavite in pospešite? + +Tudi pri ustvarjanju preprostih spletnih mest se ne želite odpovedati udobju. Ne želite na novo izumljati kolesa. Privoščite si, da ste leni in se razvajate. Okvir Nette je mogoče odlično uporabiti tudi kot mikrookvir. + +Kako je lahko videti takšna mikrostrani? Celotno kodo spletnega mesta lahko na primer postavite v eno samo datoteko `index.php` v javni mapi: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// ustvarite vsebnik DI na podlagi konfiguracije v config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// nastavi usmerjanje +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// pot za URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // zaznajo jezik brskalnika in preusmerijo na URL /en ali /de itd. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// pot za URL https://example.com/cs ali https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // prikaže ustrezno predlogo, na primer ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// zaženite aplikacijo! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Vse drugo bodo predloge, shranjene v nadrejeni mapi `/templates`. + +Koda PHP v mapi `index.php` najprej vzpostavi [okolje |bootstrap:], nato definira [poti |application:routing#dynamic-routing-with-callbacks] in nazadnje zažene aplikacijo. Prednost je, da je lahko drugi parameter funkcije `addRoute()` klicni ukaz, ki se izvede, ko se odpre ustrezna stran. + + +Zakaj uporabljati Nette za mikrostrani? .[#toc-why-use-nette-for-microsites] +---------------------------------------------------------------------------- + +- Razvijalci, ki so kdaj preizkusili [Tracy |tracy:], si danes ne morejo predstavljati kodiranja brez njega. +- Predvsem pa boste uporabili sistem za oblikovanje predlog [Latte |latte:], saj boste iz samo dveh strani želeli ločiti [postavitev in vsebino |latte:template-inheritance]. +- In vsekakor se boste želeli zanesti na [samodejno pobeganje, |latte:safety-first] da bi preprečili ranljivosti XSS. +- Nette zagotavlja tudi, da se v primeru napake ne bodo nikoli prikazala sporočila o napaki PHP, temveč bo namesto tega prikazana uporabniku prijazna stran. +- Če želite od uporabnikov pridobiti povratne informacije, na primer v obliki kontaktnega obrazca, lahko dodate tudi [obrazce |forms:] in [zbirko podatkov |database:]. +- Izpolnjene obrazce lahko preprosto [pošljete |mail:] tudi po [elektronski pošti |mail:]. +- Včasih se vam lahko zdi koristno [predpomnjenje |caching:], na primer pri prenašanju in prikazovanju virov. + +V današnjem času, ko sta hitrost in učinkovitost ključnega pomena, je pomembno imeti orodja, ki vam omogočajo doseganje rezultatov brez nepotrebnih zamud. Okvir Nette ponuja prav to - hiter razvoj, varnost in široko paleto orodij, kot sta Tracy in Latte, ki poenostavljajo postopek. Samo namestite nekaj paketov Nette in gradnja takšne mikrostrani bo postala enostavna. Poleg tega veste, da ni nobenih skritih varnostnih pomanjkljivosti. diff --git a/best-practices/tr/@home.texy b/best-practices/tr/@home.texy index 1cc97db6f5..f773189fcb 100644 --- a/best-practices/tr/@home.texy +++ b/best-practices/tr/@home.texy @@ -36,6 +36,7 @@ Formlar Ortak ----- - [Yapılandırma dosyası nasıl yüklenir |bootstrap:] +- [Mikro siteler nasıl yazılır |microsites] - [Nette neden PascalCase sabit gösterimini kullanıyor? |https://blog.nette.org/tr/kodda-daha-az-ciglik-atmak-icin] - [Nette neden Interface son ekini kullanmıyor? |https://blog.nette.org/tr/oenek-ve-sonekler-arayuez-adlarina-ait-degildir] - [Composer kullanım ipuçları |composer] diff --git a/best-practices/tr/microsites.texy b/best-practices/tr/microsites.texy new file mode 100644 index 0000000000..977df38b40 --- /dev/null +++ b/best-practices/tr/microsites.texy @@ -0,0 +1,63 @@ +Mikro Siteler Nasıl Yazılır +*************************** + +Şirketinizin yaklaşan bir etkinliği için hızlı bir şekilde küçük bir web sitesi oluşturmanız gerektiğini düşünün. Basit, hızlı ve gereksiz komplikasyonlardan uzak olmalı. Bu kadar küçük bir projenin sağlam bir framework gerektirmediğini düşünebilirsiniz. Peki ya Nette çerçevesini kullanmak bu süreci önemli ölçüde basitleştirip hızlandırabilirse? + +Basit web siteleri oluştururken bile konfordan vazgeçmek istemezsiniz. Tekerleği yeniden icat etmek istemezsiniz. Tembel olmaktan ve kendinizi şımartmaktan çekinmeyin. Nette Framework mikro framework olarak da mükemmel bir şekilde kullanılabilir. + +Böyle bir mikro site neye benzeyebilir? Örneğin, web sitesinin tüm kodu genel klasördeki tek bir `index.php` dosyasına yerleştirilebilir: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// config.neon dosyasındaki yapılandırmaya göre bir DI konteyneri oluşturun +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// Yönlendirmeyi ayarlayın +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// URL için rota https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // tarayıcı dilini algılar ve /en veya /de vb. URL'ye yönlendirir. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// URL için rota https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // uygun şablonu görüntüleyin, örneğin ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// uygulamayı çalıştırın! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Diğer her şey üst `/templates` klasöründe depolanan şablonlar olacaktır. + + `index.php` adresindeki PHP kodu önce [ortamı kur |bootstrap:]ar, sonra [rotaları |application:routing#dynamic-routing-with-callbacks] tanımlar ve son olarak uygulamayı çalıştırır. Bunun avantajı, `addRoute()` işlevinin ikinci parametresinin, ilgili sayfa açıldığında çalıştırılan bir çağrılabilir olmasıdır. + + +Mikro Siteler için Neden Nette Kullanılmalı? .[#toc-why-use-nette-for-microsites] +--------------------------------------------------------------------------------- + +- [Tracy |tracy:] 'yi denemiş olan geliştiriciler bugün onsuz kodlama yapmayı hayal bile edemezler. +- Ancak her şeyden önce, [Latte |latte:] şablonlama sistemini kullanacaksınız, çünkü sadece 2 sayfadan [düzen ve içeriği |latte:template-inheritance] ayırmak isteyeceksiniz. +- Ve XSS güvenlik açıklarını önlemek için kesinlikle [otomatik kaçışa |latte:safety-first] güvenmek isteyeceksiniz. +- Nette ayrıca bir hata durumunda PHP hata mesajlarının asla görüntülenmemesini, bunun yerine kullanıcı dostu bir sayfanın görüntülenmesini sağlar. +- Kullanıcılardan geri bildirim almak istiyorsanız, örneğin bir iletişim formu şeklinde, [formlar |forms:] ve [veritabanı |database:] da ekleyebilirsiniz. +- Doldurulan formların [e-posta ile gönderilmesini |mail:] de kolayca sağlayabilirsiniz. +- Bazen, örneğin beslemeleri indirirken ve görüntülerken [önbelleğe |caching:] almayı yararlı bulabilirsiniz. + +Hız ve verimliliğin kilit önem taşıdığı günümüzde, gereksiz gecikmeler olmadan sonuçlara ulaşmanızı sağlayan araçlara sahip olmak önemlidir. Nette framework tam da bunu sunuyor - hızlı geliştirme, güvenlik ve süreci basitleştiren Tracy ve Latte gibi çok çeşitli araçlar. Sadece birkaç Nette paketi kurun ve böyle bir mikro site oluşturmak çocuk oyuncağı haline gelsin. Ve hiçbir gizli güvenlik açığı olmadığını bilirsiniz. diff --git a/best-practices/uk/@home.texy b/best-practices/uk/@home.texy index 25d1fa8493..cfbe213cbd 100644 --- a/best-practices/uk/@home.texy +++ b/best-practices/uk/@home.texy @@ -36,6 +36,7 @@ Спільне ------- - [Як завантажити конфігураційний файл |bootstrap:] +- [Як писати мікросайти |microsites] - [Чому Nette використовує нотацію констант у регістрі PascalCase? |https://blog.nette.org/uk/sob-mense-kriku-v-kodi] - [Чому Nette не використовує суфікс Interface? |https://blog.nette.org/uk/prefiksi-ta-sufiksi-ne-potribni-v-nazvah-interfejsiv] - [Поради щодо використання Composer |composer] diff --git a/best-practices/uk/microsites.texy b/best-practices/uk/microsites.texy new file mode 100644 index 0000000000..05599232db --- /dev/null +++ b/best-practices/uk/microsites.texy @@ -0,0 +1,63 @@ +Як писати мікросайти +******************** + +Уявіть, що вам потрібно швидко створити невеликий сайт для майбутньої події вашої компанії. Він повинен бути простим, швидким і без зайвих складнощів. Ви можете подумати, що такий невеликий проект не потребує надійного фреймворку. Але що, якщо використання фреймворку Nette може значно спростити і прискорити цей процес? + +Навіть при створенні простих веб-сайтів не хочеться відмовлятися від комфорту. Ви не хочете винаходити велосипед. Не соромтеся лінуватися і балувати себе. Nette Framework також можна чудово використовувати як мікрофреймворк. + +Як може виглядати такий мікросайт? Наприклад, весь код сайту можна розмістити в одному файлі `index.php` в загальній папці: + +```php +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$configurator = new Nette\Bootstrap\Configurator; +$configurator->enableTracy(__DIR__ . '/../log'); +$configurator->setTempDirectory(__DIR__ . '/../temp'); + +// створити контейнер DI на основі конфігурації в config.neon +$configurator->addConfig(__DIR__ . '/../app/config.neon'); +$container = $configurator->createContainer(); + +// налаштуйте маршрутизацію +$router = new Nette\Application\Routers\RouteList; +$container->addService('router', $router); + +// маршрут для URL https://example.com/ +$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) { + // визначити мову браузера і перенаправити на URL /en або /de і т.д. + $supportedLangs = ['en', 'de', 'cs']; + $lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs); + $presenter->redirectUrl("/$lang"); +}); + +// маршрут для URL https://example.com/cs nebo https://example.com/en +$router->addRoute('', function ($presenter, string $lang) { + // відобразити відповідний шаблон, наприклад ../templates/en.latte + $template = $presenter->createTemplate() + ->setFile(__DIR__ . '/../templates/' . $lang . '.latte'); + return $template; +}); + +// запускаємо додаток! +$container->getByType(Nette\Application\Application::class)->run(); +``` + +Все інше буде шаблонами, що зберігаються в батьківській папці `/templates`. + +PHP-код в `index.php` спочатку налаштовує [середовище |bootstrap:], потім визначає [маршрути |application:routing#dynamic-routing-with-callbacks] і, нарешті, запускає додаток. Перевага полягає в тому, що другим параметром функції `addRoute()` може бути виклик, який виконується при відкритті відповідної сторінки. + + +Чому варто використовувати Nette для мікросайтів? .[#toc-why-use-nette-for-microsites] +-------------------------------------------------------------------------------------- + +- Розробники, які хоч раз спробували [Tracy |tracy:], не можуть уявити собі кодування без нього сьогодні. +- Але перш за все, ви будете використовувати систему шаблонів [Latte |latte:], тому що всього з 2 сторінок ви захочете відокремити [макет і контент |latte:template-inheritance]. +- І ви точно захочете покластися на [автоматичне |latte:safety-first] екранування, щоб запобігти XSS-уразливостям. +- Nette також гарантує, що у випадку помилки, повідомлення про помилки PHP ніколи не будуть відображатися, а натомість буде показана зручна для користувача сторінка. +- Якщо ви хочете отримати зворотній зв'язок від користувачів, наприклад, у вигляді контактної форми, ви також можете додати [форми |forms:] і [базу даних |database:]. +- Ви також можете легко надсилати заповнені форми [електронною |mail:] поштою. +- Іноді вам може стати в нагоді [кешування |caching:], наприклад, при завантаженні та відображенні новин. + +У наш час, коли швидкість та ефективність є ключовими, важливо мати інструменти, які дозволяють досягати результатів без зайвих затримок. Фреймворк Nette пропонує саме це - швидку розробку, безпеку та широкий спектр інструментів, таких як Tracy та Latte, які спрощують процес. Просто встановіть кілька пакетів Nette, і створення такого мікросайту стане легкою справою. І ви знаєте, що немає ніяких прихованих вразливостей у безпеці. From 984b130b8d18b75e6d3f40f5cd9cb32597c0ba72 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Fri, 8 Sep 2023 11:08:24 +0200 Subject: [PATCH 4/7] latte 3.0.9 --- latte/bg/develop.texy | 19 ++++++++++++++----- latte/bg/syntax.texy | 14 ++++++++++++++ latte/bg/tags.texy | 2 ++ latte/cs/develop.texy | 19 ++++++++++++++----- latte/cs/syntax.texy | 14 ++++++++++++++ latte/cs/tags.texy | 2 ++ latte/de/develop.texy | 21 +++++++++++++++------ latte/de/syntax.texy | 14 ++++++++++++++ latte/de/tags.texy | 2 ++ latte/el/develop.texy | 19 ++++++++++++++----- latte/el/syntax.texy | 14 ++++++++++++++ latte/el/tags.texy | 2 ++ latte/en/develop.texy | 19 ++++++++++++++----- latte/en/syntax.texy | 14 ++++++++++++++ latte/en/tags.texy | 2 ++ latte/es/develop.texy | 19 ++++++++++++++----- latte/es/syntax.texy | 14 ++++++++++++++ latte/es/tags.texy | 2 ++ latte/fr/develop.texy | 21 +++++++++++++++------ latte/fr/syntax.texy | 14 ++++++++++++++ latte/fr/tags.texy | 2 ++ latte/hu/develop.texy | 19 ++++++++++++++----- latte/hu/syntax.texy | 14 ++++++++++++++ latte/hu/tags.texy | 2 ++ latte/it/develop.texy | 19 ++++++++++++++----- latte/it/syntax.texy | 14 ++++++++++++++ latte/it/tags.texy | 2 ++ latte/ja/develop.texy | 25 +++++++++++++++++-------- latte/ja/syntax.texy | 14 ++++++++++++++ latte/ja/tags.texy | 2 ++ latte/pl/develop.texy | 19 ++++++++++++++----- latte/pl/syntax.texy | 14 ++++++++++++++ latte/pl/tags.texy | 2 ++ latte/pt/develop.texy | 19 ++++++++++++++----- latte/pt/syntax.texy | 14 ++++++++++++++ latte/pt/tags.texy | 2 ++ latte/ro/develop.texy | 19 ++++++++++++++----- latte/ro/syntax.texy | 14 ++++++++++++++ latte/ro/tags.texy | 2 ++ latte/ru/develop.texy | 21 +++++++++++++++------ latte/ru/syntax.texy | 14 ++++++++++++++ latte/ru/tags.texy | 2 ++ latte/sl/develop.texy | 19 ++++++++++++++----- latte/sl/syntax.texy | 14 ++++++++++++++ latte/sl/tags.texy | 2 ++ latte/tr/develop.texy | 19 ++++++++++++++----- latte/tr/syntax.texy | 14 ++++++++++++++ latte/tr/tags.texy | 2 ++ latte/uk/develop.texy | 21 +++++++++++++++------ latte/uk/syntax.texy | 14 ++++++++++++++ latte/uk/tags.texy | 2 ++ 51 files changed, 517 insertions(+), 92 deletions(-) diff --git a/latte/bg/develop.texy b/latte/bg/develop.texy index e947567ea5..ee1700be03 100644 --- a/latte/bg/develop.texy +++ b/latte/bg/develop.texy @@ -274,16 +274,25 @@ vendor/bin/latte-lint // въведете действителния път до файла autoload.php require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// добавете отделни разширения тук -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// добавете индивидуалните си разширения тук +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Като алтернатива можете да предадете свой собствен обект `Latte\Engine` на Linter: + +```php +$latte = new Latte\Engine; +// тук конфигурираме обекта $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Зареждане на шаблони от низ .[#toc-loading-templates-from-a-string] =================================================================== diff --git a/latte/bg/syntax.texy b/latte/bg/syntax.texy index fe5dce9df2..5a5eb32559 100644 --- a/latte/bg/syntax.texy +++ b/latte/bg/syntax.texy @@ -155,6 +155,20 @@ Latte ви позволява да извиквате филтри със зна ``` +Динамични HTML етикети .[#toc-dynamic-html-tags] +================================================ + +Latte поддържа динамични HTML тагове, които са полезни, когато се нуждаете от гъвкавост в имената на таговете: + +```latte +Heading +``` + +Например, кодът по-горе може да генерира `

Heading

` или `

Heading

` в зависимост от стойността на променливата `$level`. Динамичните HTML тагове в Latte трябва винаги да бъдат сдвоени. Тяхната алтернатива е [n:tag |tags#n:tag]. + +Тъй като Latte е сигурна система за шаблониране, тя проверява дали полученото име на тага е валидно и не съдържа нежелани или злонамерени стойности. Тя също така гарантира, че името на крайния таг винаги е същото като името на началния таг. + + Коментарите са изключени за .[#toc-comments] ============================================ diff --git a/latte/bg/tags.texy b/latte/bg/tags.texy index 99e8382a9a..0ab9c59ade 100644 --- a/latte/bg/tags.texy +++ b/latte/bg/tags.texy @@ -991,6 +991,8 @@ n:tag .[#toc-n-tag]

...

``` +Тъй като Latte е сигурна система за шаблониране, тя проверява дали името на новия таг е валидно и не съдържа нежелани или злонамерени стойности. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/cs/develop.texy b/latte/cs/develop.texy index 32e43894a7..396ba77813 100644 --- a/latte/cs/develop.texy +++ b/latte/cs/develop.texy @@ -274,16 +274,25 @@ Pokud používáte vlastní značky, vytvořte si také vlastní verzi Linteru, // zadejte skutečnou cestu k soubor autoload.php require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// tady přidejte jednotlivá rozšíření -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// tady přidejte jednotlivá svá rozšíření +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Alternativně můžete vlastní objekt `Latte\Engine` předat do Linteru: + +```php +$latte = new Latte\Engine; +// tady nakonfigurujeme objekt $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Načítání šablon z řetězce ========================= diff --git a/latte/cs/syntax.texy b/latte/cs/syntax.texy index 8ddca234ec..d90970c534 100644 --- a/latte/cs/syntax.texy +++ b/latte/cs/syntax.texy @@ -155,6 +155,20 @@ Nebo přímo na hodnotu (v kombinaci s tagem [`{=expr}`| https://latte.nette.org ``` +Dynamické HTML značky .{data-version:3.0.9} +=========================================== + +Latte podporuje dynamické HTML značky, které jsou užitečné, když potřebujete flexibilitu v názvech značek: + +```latte +Heading +``` + +Výše uvedený kód může například generovat `

Heading

` nebo `

Heading

` v závislosti na hodnotě proměnné `$level`. Dynamické HTML značky v Latte musí být vždy párové. Jejich alternativou je [n:tag |tags#n:tag]. + +Protože Latte je bezpečný šablonovací systém, kontroluje, zda je výsledný název značky platný a neobsahuje žádné nežádoucí nebo škodlivé hodnoty. Dále zajistí, že název koncové značky bude vždy stejný jako název otevírací značky. + + Komentáře ========= diff --git a/latte/cs/tags.texy b/latte/cs/tags.texy index e0cf7e30b6..343ffaa172 100644 --- a/latte/cs/tags.texy +++ b/latte/cs/tags.texy @@ -991,6 +991,8 @@ Pokud je `$heading === null`, vypíše se beze změny tag `

`. Jinak se změn

...

``` +Protože Latte je bezpečný šablonovací systém, kontroluje, zda je nový název značky platný a neobsahuje žádné nežádoucí nebo škodlivé hodnoty. + n:ifcontent ----------- diff --git a/latte/de/develop.texy b/latte/de/develop.texy index 5f99949089..a845db1fd3 100644 --- a/latte/de/develop.texy +++ b/latte/de/develop.texy @@ -271,19 +271,28 @@ Wenn Sie benutzerdefinierte Tags verwenden, erstellen Sie auch Ihren eigenen Lin #!/usr/bin/env php addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// fügen Sie hier Ihre individuellen Erweiterungen hinzu +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Alternativ können Sie dem Linter auch Ihr eigenes `Latte\Engine` Objekt übergeben: + +```php +$latte = new Latte\Engine; +// hier konfigurieren wir das $latte-Objekt +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Laden von Templates aus einem String .[#toc-loading-templates-from-a-string] ============================================================================ diff --git a/latte/de/syntax.texy b/latte/de/syntax.texy index d86f0c4f5e..33a208a405 100644 --- a/latte/de/syntax.texy +++ b/latte/de/syntax.texy @@ -155,6 +155,20 @@ Oder direkt beim Wert (in Kombination mit [`{=expr}` | https://latte.nette.org/d ``` +Dynamische HTML-Tags .[#toc-dynamic-html-tags] +============================================== + +Latte unterstützt dynamische HTML-Tags, die nützlich sind, wenn Sie Flexibilität bei den Tag-Namen benötigen: + +```latte +Heading +``` + +Der obige Code kann zum Beispiel Folgendes erzeugen `

Heading

` oder `

Heading

` erzeugen, je nach dem Wert der Variablen `$level`. Dynamische HTML-Tags in Latte müssen immer gepaart sein. Ihre Alternative ist der [n:tag |tags#n:tag]. + +Da Latte ein sicheres Schablonensystem ist, prüft es, ob der resultierende Tag-Name gültig ist und keine unerwünschten oder bösartigen Werte enthält. Es stellt auch sicher, dass der Name des End-Tags immer mit dem Namen des Anfangs-Tags übereinstimmt. + + Kommentare .[#toc-comments] =========================== diff --git a/latte/de/tags.texy b/latte/de/tags.texy index e067725f42..67e8baecf9 100644 --- a/latte/de/tags.texy +++ b/latte/de/tags.texy @@ -991,6 +991,8 @@ Wenn `$heading === null`, wird das `

` Tag ohne Änderung gedruckt. Andernfal

...

``` +Da es sich bei Latte um ein sicheres Templating-System handelt, wird überprüft, ob der neue Tag-Name gültig ist und keine unerwünschten oder bösartigen Werte enthält. + n:ifcontent ----------- diff --git a/latte/el/develop.texy b/latte/el/develop.texy index 5d380b79ba..76342e9f87 100644 --- a/latte/el/develop.texy +++ b/latte/el/develop.texy @@ -274,16 +274,25 @@ vendor/bin/latte-lint // εισάγετε την πραγματική διαδρομή προς το αρχείο autoload.php require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// προσθέστε μεμονωμένες επεκτάσεις εδώ -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// προσθέστε τις μεμονωμένες επεκτάσεις σας εδώ +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Εναλλακτικά, μπορείτε να περάσετε το δικό σας αντικείμενο `Latte\Engine` στον Linter: + +```php +$latte = new Latte\Engine; +// εδώ ρυθμίζουμε το αντικείμενο $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Φόρτωση προτύπων από μια συμβολοσειρά .[#toc-loading-templates-from-a-string] ============================================================================= diff --git a/latte/el/syntax.texy b/latte/el/syntax.texy index 35288cdaf6..8f36653703 100644 --- a/latte/el/syntax.texy +++ b/latte/el/syntax.texy @@ -155,6 +155,20 @@ n:attributes .[#toc-n-attributes] ``` +Δυναμικές ετικέτες HTML .[#toc-dynamic-html-tags] +================================================= + +Το Latte υποστηρίζει δυναμικές ετικέτες HTML, οι οποίες είναι χρήσιμες όταν χρειάζεστε ευελιξία στα ονόματα των ετικετών: + +```latte +Heading +``` + +Για παράδειγμα, ο παραπάνω κώδικας μπορεί να δημιουργήσει `

Heading

` ή `

Heading

` ανάλογα με την τιμή της μεταβλητής `$level`. Οι δυναμικές ετικέτες HTML στο Latte πρέπει πάντα να είναι ζευγαρωμένες. Η εναλλακτική τους είναι η [n:tag |tags#n:tag]. + +Επειδή το Latte είναι ένα ασφαλές σύστημα διαμόρφωσης προτύπων, ελέγχει ότι το όνομα της ετικέτας που προκύπτει είναι έγκυρο και δεν περιέχει ανεπιθύμητες ή κακόβουλες τιμές. Εξασφαλίζει επίσης ότι το όνομα της τελικής ετικέτας είναι πάντα το ίδιο με το όνομα της ετικέτας έναρξης. + + Σχόλια .[#toc-comments] ======================= diff --git a/latte/el/tags.texy b/latte/el/tags.texy index 05958f0e18..80acc64da8 100644 --- a/latte/el/tags.texy +++ b/latte/el/tags.texy @@ -991,6 +991,8 @@ n:tag .[#toc-n-tag]

...

``` +Επειδή το Latte είναι ένα ασφαλές σύστημα διαμόρφωσης προτύπων, ελέγχει ότι το όνομα της νέας ετικέτας είναι έγκυρο και δεν περιέχει ανεπιθύμητες ή κακόβουλες τιμές. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/en/develop.texy b/latte/en/develop.texy index 87ecc92636..d3b27885de 100644 --- a/latte/en/develop.texy +++ b/latte/en/develop.texy @@ -274,16 +274,25 @@ If you use custom tags, also create your customized Linter, e.g. `custom-latte-l // enter the actual path to the autoload.php file require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// add individual extensions here -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// add your individual extensions here +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Alternatively, you can pass your own `Latte\Engine` object to the Linter: + +```php +$latte = new Latte\Engine; +// here we configure the $latte object +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Loading Templates from a String =============================== diff --git a/latte/en/syntax.texy b/latte/en/syntax.texy index 7358007478..17841ecd58 100644 --- a/latte/en/syntax.texy +++ b/latte/en/syntax.texy @@ -155,6 +155,20 @@ Or directly on value (in combination with [`{=expr}`| https://latte.nette.org/en ``` +Dynamic HTML Tags +================= + +Latte supports dynamic HTML tags, which are useful when you need flexibility in tag names: + +```latte +Heading +``` + +For example, the code above can generate `

Heading

` or `

Heading

` depending on the value of the variable `$level`. Dynamic HTML tags in Latte must always be paired. Their alternative is the [n:tag |tags#n:tag]. + +Because Latte is a secure templating system, it checks that the resulting tag name is valid and contains no unwanted or malicious values. It also ensures that the end tag name is always the same as the opening tag name. + + Comments ======== diff --git a/latte/en/tags.texy b/latte/en/tags.texy index fcecb2a3c1..08f4d516db 100644 --- a/latte/en/tags.texy +++ b/latte/en/tags.texy @@ -991,6 +991,8 @@ If `$heading === null`, the `

` tag is printed without change. Otherwise, the

...

``` +Because Latte is a secure templating system, it checks that the new tag name is valid and does not contain any unwanted or malicious values. + n:ifcontent ----------- diff --git a/latte/es/develop.texy b/latte/es/develop.texy index 83802ea072..e925b76524 100644 --- a/latte/es/develop.texy +++ b/latte/es/develop.texy @@ -274,16 +274,25 @@ Si utiliza etiquetas personalizadas, cree también su Linter personalizado, por // introduzca la ruta real al archivo autoload.php require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// añada aquí las extensiones individuales -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// añada aquí sus extensiones individuales +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Alternativamente, puede pasar su propio objeto `Latte\Engine` al Linter: + +```php +$latte = new Latte\Engine; +// aquí configuramos el objeto $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Carga de plantillas desde una cadena .[#toc-loading-templates-from-a-string] ============================================================================ diff --git a/latte/es/syntax.texy b/latte/es/syntax.texy index 54e1ea2fcc..8adcf5e086 100644 --- a/latte/es/syntax.texy +++ b/latte/es/syntax.texy @@ -155,6 +155,20 @@ O directamente sobre el valor (en combinación con [`{=expr}` | https://latte.ne ``` +Etiquetas HTML dinámicas .[#toc-dynamic-html-tags] +================================================== + +Latte soporta etiquetas HTML dinámicas, que son útiles cuando se necesita flexibilidad en los nombres de las etiquetas: + +```latte +Heading +``` + +Por ejemplo, el código anterior puede generar `

Heading

` o `

Heading

` en función del valor de la variable `$level`. Las etiquetas HTML dinámicas en Latte deben ir siempre emparejadas. Su alternativa es la [n:tag |tags#n:tag]. + +Como Latte es un sistema de plantillas seguro, comprueba que el nombre de la etiqueta resultante sea válido y no contenga valores no deseados o maliciosos. También se asegura de que el nombre de la etiqueta final sea siempre el mismo que el de la etiqueta inicial. + + Comentarios .[#toc-comments] ============================ diff --git a/latte/es/tags.texy b/latte/es/tags.texy index 26ab3fbe9d..3e2381c8fe 100644 --- a/latte/es/tags.texy +++ b/latte/es/tags.texy @@ -991,6 +991,8 @@ Si `$heading === null`, la etiqueta `

` se imprime sin cambios. De lo contrar

...

``` +Como Latte es un sistema de plantillas seguro, comprueba que el nuevo nombre de la etiqueta sea válido y no contenga valores no deseados o maliciosos. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/fr/develop.texy b/latte/fr/develop.texy index 4ba666fd93..e444e942ed 100644 --- a/latte/fr/develop.texy +++ b/latte/fr/develop.texy @@ -271,19 +271,28 @@ Si vous utilisez des balises personnalisées, créez également votre Linter per #!/usr/bin/env php addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// ajoutez vos extensions individuelles ici +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Vous pouvez également transmettre votre propre objet `Latte\Engine` au Linter : + +```php +$latte = new Latte\Engine; +// nous configurons ici l'objet $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Chargement de modèles à partir d'une chaîne .[#toc-loading-templates-from-a-string] =================================================================================== diff --git a/latte/fr/syntax.texy b/latte/fr/syntax.texy index 7c7d182727..eda154bdf5 100644 --- a/latte/fr/syntax.texy +++ b/latte/fr/syntax.texy @@ -155,6 +155,20 @@ Ou directement sur la valeur (en combinaison avec [`{=expr}` | https://latte.net ``` +Balises HTML dynamiques .[#toc-dynamic-html-tags] +================================================= + +Latte supporte les balises HTML dynamiques, qui sont utiles lorsque vous avez besoin de flexibilité dans les noms de balises : + +```latte +Heading +``` + +Par exemple, le code ci-dessus peut générer `

Heading

` ou `

Heading

` en fonction de la valeur de la variable `$level`. Les balises HTML dynamiques dans Latte doivent toujours être appariées. Leur alternative est la [balise n:tag |tags#n:tag]. + +Latte étant un système de création de modèles sécurisé, il vérifie que le nom de balise résultant est valide et ne contient pas de valeurs indésirables ou malveillantes. Il s'assure également que le nom de la balise de fin est toujours le même que le nom de la balise d'ouverture. + + Commentaires .[#toc-comments] ============================= diff --git a/latte/fr/tags.texy b/latte/fr/tags.texy index b4f22df9c9..f884a996fd 100644 --- a/latte/fr/tags.texy +++ b/latte/fr/tags.texy @@ -991,6 +991,8 @@ Si `$heading === null`, la balise `

` est imprimé sans changement. Sinon, le

...

``` +Latte étant un système de templates sécurisé, il vérifie que le nouveau nom de balise est valide et ne contient pas de valeurs indésirables ou malveillantes. + n:ifcontent ----------- diff --git a/latte/hu/develop.texy b/latte/hu/develop.texy index 15d8116068..80a77b993c 100644 --- a/latte/hu/develop.texy +++ b/latte/hu/develop.texy @@ -274,16 +274,25 @@ Ha egyéni címkéket használ, hozza létre az egyéni Lintert is, például `c // adja meg az autoload.php fájl tényleges elérési útvonalát require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// egyedi kiterjesztések hozzáadása itt -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// itt adja hozzá az egyéni kiterjesztéseket +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Alternatívaként átadhatja saját `Latte\Engine` objektumát is a Linter-nek: + +```php +$latte = new Latte\Engine; +// itt konfiguráljuk a $latte objektumot +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Sablonok betöltése egy karakterláncból .[#toc-loading-templates-from-a-string] ============================================================================== diff --git a/latte/hu/syntax.texy b/latte/hu/syntax.texy index fb7a5ba3aa..f0fdbbae0e 100644 --- a/latte/hu/syntax.texy +++ b/latte/hu/syntax.texy @@ -155,6 +155,20 @@ Vagy közvetlenül az értékre (a [`{=expr}` | https://latte.nette.org/hu/tags# ``` +Dinamikus HTML címkék .[#toc-dynamic-html-tags] +=============================================== + +A Latte támogatja a dinamikus HTML címkéket, amelyek akkor hasznosak, ha a címkék nevének rugalmasságára van szükség: + +```latte +Heading +``` + +Például a fenti kód képes generálni `

Heading

` vagy `

Heading

` a `$level` változó értékétől függően. A Latte dinamikus HTML-címkéket mindig párosítani kell. Alternatívájuk az [n:tag |tags#n:tag]. + +Mivel a Latte egy biztonságos templating rendszer, ellenőrzi, hogy a kapott tag neve érvényes-e, és nem tartalmaz-e nem kívánt vagy rosszindulatú értékeket. Azt is biztosítja, hogy a végcímke neve mindig megegyezik a nyitócímke nevével. + + Hozzászólások .[#toc-comments] ============================== diff --git a/latte/hu/tags.texy b/latte/hu/tags.texy index d718df8e62..ca5930c18c 100644 --- a/latte/hu/tags.texy +++ b/latte/hu/tags.texy @@ -991,6 +991,8 @@ Ha a `$heading === null`, a `

` címke változatlanul kiírásra kerül. Elle

...

``` +Mivel a Latte egy biztonságos templating rendszer, ellenőrzi, hogy az új tag neve érvényes-e, és nem tartalmaz-e nem kívánt vagy rosszindulatú értékeket. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/it/develop.texy b/latte/it/develop.texy index 4f9fc093a1..39e2d89dab 100644 --- a/latte/it/develop.texy +++ b/latte/it/develop.texy @@ -274,16 +274,25 @@ Se si usano tag personalizzati, creare anche un Linter personalizzato, ad esempi // inserire il percorso effettivo del file autoload.php require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// aggiungere qui le singole estensioni -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// aggiungere qui le estensioni individuali +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +In alternativa, è possibile passare il proprio oggetto `Latte\Engine` a Linter: + +```php +$latte = new Latte\Engine; +// Qui configuriamo l'oggetto $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Caricare modelli da una stringa .[#toc-loading-templates-from-a-string] ======================================================================= diff --git a/latte/it/syntax.texy b/latte/it/syntax.texy index c96747b66d..eef05b2ef3 100644 --- a/latte/it/syntax.texy +++ b/latte/it/syntax.texy @@ -155,6 +155,20 @@ O direttamente sul valore (in combinazione con [`{=expr}` | https://latte.nette. ``` +Tag HTML dinamici .[#toc-dynamic-html-tags] +=========================================== + +Latte supporta i tag HTML dinamici, utili quando si ha bisogno di flessibilità nei nomi dei tag: + +```latte +Heading +``` + +Ad esempio, il codice qui sopra può generare `

Heading

` o `

Heading

` a seconda del valore della variabile `$level`. I tag HTML dinamici in Latte devono sempre essere accoppiati. L'alternativa è il [n:tag |tags#n:tag]. + +Poiché Latte è un sistema di template sicuro, controlla che il nome del tag risultante sia valido e non contenga valori indesiderati o dannosi. Inoltre, garantisce che il nome del tag finale sia sempre uguale a quello del tag di apertura. + + Commenti .[#toc-comments] ========================= diff --git a/latte/it/tags.texy b/latte/it/tags.texy index 3411ee7656..8748ff6adc 100644 --- a/latte/it/tags.texy +++ b/latte/it/tags.texy @@ -991,6 +991,8 @@ Se `$heading === null`, il tag `

` viene stampato senza modifiche. Altrimenti

...

``` +Poiché Latte è un sistema di template sicuro, controlla che il nome del nuovo tag sia valido e non contenga valori indesiderati o dannosi. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/ja/develop.texy b/latte/ja/develop.texy index 6ce5a51c8d..3a63e03253 100644 --- a/latte/ja/develop.texy +++ b/latte/ja/develop.texy @@ -271,18 +271,27 @@ vendor/bin/latte-lint #!/usr/bin/env php addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +//$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); -exit($ok ? 0 : 1); -``` +exit($ok ? 0 : 1);``` + +あるいは、独自の`Latte\Engine` オブジェクトを Linter に渡すこともできます: + +```php +$latte = new Latte\Engine; +// ここでは、$latteオブジェクトを設定します。 + +$linter = new Latte\Tools\Linter(engine: $latte);``` 文字列からテンプレートを読み込む .[#toc-loading-templates-from-a-string] diff --git a/latte/ja/syntax.texy b/latte/ja/syntax.texy index ff6904aeaa..5d2dc87c7f 100644 --- a/latte/ja/syntax.texy +++ b/latte/ja/syntax.texy @@ -155,6 +155,20 @@ Latteでは、パイプ記号を使った記法でフィルタを呼び出すこ ``` +ダイナミックHTMLタグ .[#toc-dynamic-html-tags] +===================================== + +Latteは動的HTMLタグをサポートしており、タグ名に柔軟性が必要な場合に便利です: + +```latte +Heading +``` + +例えば、上記のコードでは `

Heading

`または `

Heading

``$level`を生成することができる。LatteのダイナミックHTMLタグは常にペアでなければなりません。その代わりとなるのが[n:tag |tags#n:tag]です。 + +Latteは安全なテンプレートシステムであるため、生成されるタグ名が有効で、不要な値や悪意のある値を含まないことをチェックします。また、終了タグ名が常に開始タグ名と同じであることを保証します。 + + コメント .[#toc-comments] ===================== diff --git a/latte/ja/tags.texy b/latte/ja/tags.texy index c543dd89bc..b01cdb18d9 100644 --- a/latte/ja/tags.texy +++ b/latte/ja/tags.texy @@ -991,6 +991,8 @@ n:タグ .[#toc-n-tag]

...

``` +Latteは安全なテンプレートシステムなので、新しいタグ名が有効で、不要な値や悪意のある値が含まれていないことをチェックします。 + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/pl/develop.texy b/latte/pl/develop.texy index bb2dbd5253..99c9975f81 100644 --- a/latte/pl/develop.texy +++ b/latte/pl/develop.texy @@ -274,16 +274,25 @@ Jeśli używasz niestandardowych znaczników, utwórz również swój niestandar // wprowadź rzeczywistą ścieżkę do pliku autoload.php require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// dodaj tutaj indywidualne rozszerzenia -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// dodaj tutaj swoje indywidualne rozszerzenia +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Alternatywnie, można przekazać własny obiekt `Latte\Engine` do aplikacji Linter: + +```php +$latte = new Latte\Engine; +// tutaj konfigurujemy obiekt $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Ładowanie szablonów z łańcucha .[#toc-loading-templates-from-a-string] ====================================================================== diff --git a/latte/pl/syntax.texy b/latte/pl/syntax.texy index 60e450adc9..106fc68597 100644 --- a/latte/pl/syntax.texy +++ b/latte/pl/syntax.texy @@ -155,6 +155,20 @@ Lub bezpośrednio na wartość (w połączeniu z tagiem [`{=expr}` | https://lat ``` +Dynamiczne znaczniki HTML .[#toc-dynamic-html-tags] +=================================================== + +Latte obsługuje dynamiczne znaczniki HTML, które są przydatne, gdy potrzebujesz elastyczności w nazwach znaczników: + +```latte +Heading +``` + +Na przykład, powyższy kod może wygenerować `

Heading

` lub `

Heading

` w zależności od wartości zmiennej `$level`. Dynamiczne znaczniki HTML w Latte muszą być zawsze sparowane. Ich alternatywą jest [n:tag |tags#n:tag]. + +Ponieważ Latte jest bezpiecznym systemem szablonów, sprawdza, czy wynikowa nazwa tagu jest prawidłowa i nie zawiera niepożądanych lub złośliwych wartości. Zapewnia również, że końcowa nazwa tagu jest zawsze taka sama jak nazwa tagu otwierającego. + + Uwagi .[#toc-comments] ====================== diff --git a/latte/pl/tags.texy b/latte/pl/tags.texy index a37e64df2e..42a72ab36b 100644 --- a/latte/pl/tags.texy +++ b/latte/pl/tags.texy @@ -991,6 +991,8 @@ Jeśli jest to `$heading === null`, tag jest drukowany bez zmian. `

`. W prze

...

``` +Ponieważ Latte jest bezpiecznym systemem szablonów, sprawdza, czy nowa nazwa tagu jest poprawna i nie zawiera żadnych niepożądanych lub złośliwych wartości. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/pt/develop.texy b/latte/pt/develop.texy index 88d9e11d82..85ed5ef920 100644 --- a/latte/pt/develop.texy +++ b/latte/pt/develop.texy @@ -274,16 +274,25 @@ Se você usa etiquetas personalizadas, crie também seu Linter personalizado, po // digite o caminho real para o arquivo autoload.php require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// adicione extensões individuais aqui -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// adicione suas extensões individuais aqui +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Como alternativa, você pode passar seu próprio objeto `Latte\Engine` para o Linter: + +```php +$latte = new Latte\Engine; +// Aqui configuramos o objeto $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Carregando modelos a partir de uma corda .[#toc-loading-templates-from-a-string] ================================================================================ diff --git a/latte/pt/syntax.texy b/latte/pt/syntax.texy index 17a85222fd..47772ddec6 100644 --- a/latte/pt/syntax.texy +++ b/latte/pt/syntax.texy @@ -155,6 +155,20 @@ Ou diretamente sobre o valor (em combinação com [`{=expr}` | https://latte.net ``` +Tags HTML dinâmicas .[#toc-dynamic-html-tags] +============================================= + +O Latte oferece suporte a tags HTML dinâmicas, que são úteis quando você precisa de flexibilidade nos nomes das tags: + +```latte +Heading +``` + +Por exemplo, o código acima pode gerar `

Heading

` ou `

Heading

` dependendo do valor da variável `$level`. As tags HTML dinâmicas no Latte devem ser sempre emparelhadas. Sua alternativa é a [n:tag |tags#n:tag]. + +Como o Latte é um sistema de modelos seguro, ele verifica se o nome da tag resultante é válido e não contém valores indesejados ou maliciosos. Ele também garante que o nome da tag final seja sempre o mesmo que o nome da tag de abertura. + + Comentários .[#toc-comments] ============================ diff --git a/latte/pt/tags.texy b/latte/pt/tags.texy index ded11b8ed1..e61802b29a 100644 --- a/latte/pt/tags.texy +++ b/latte/pt/tags.texy @@ -991,6 +991,8 @@ Se `$heading === null`, o `

` é impresso sem alterações. Caso contrário,

...

``` +Como o Latte é um sistema de modelos seguro, ele verifica se o novo nome da tag é válido e não contém valores indesejados ou maliciosos. + n:secontente .[#toc-n-ifcontent] -------------------------------- diff --git a/latte/ro/develop.texy b/latte/ro/develop.texy index 08a790a567..9f63037d6a 100644 --- a/latte/ro/develop.texy +++ b/latte/ro/develop.texy @@ -274,16 +274,25 @@ Dacă utilizați etichete personalizate, creați și Linterul personalizat, de e // introduceți calea reală către fișierul autoload.php require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// adăugați extensii individuale aici -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// adăugați extensiile individuale aici +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Alternativ, puteți transmite propriul obiect `Latte\Engine` către Linter: + +```php +$latte = new Latte\Engine; +// aici configurăm obiectul $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Încărcarea șabloanelor dintr-un șir de caractere .[#toc-loading-templates-from-a-string] ======================================================================================== diff --git a/latte/ro/syntax.texy b/latte/ro/syntax.texy index 77ba5ec1f0..baefef14b5 100644 --- a/latte/ro/syntax.texy +++ b/latte/ro/syntax.texy @@ -155,6 +155,20 @@ Sau direct pe valoare (în combinație cu [`{=expr}` | https://latte.nette.org/r ``` +Etichete HTML dinamice .[#toc-dynamic-html-tags] +================================================ + +Latte acceptă etichete HTML dinamice, care sunt utile atunci când aveți nevoie de flexibilitate în ceea ce privește numele etichetelor: + +```latte +Heading +``` + +De exemplu, codul de mai sus poate genera `

Heading

` sau `

Heading

` în funcție de valoarea variabilei `$level`. Etichetele HTML dinamice din Latte trebuie să fie întotdeauna asociate. Alternativa lor este [n:tag |tags#n:tag]. + +Deoarece Latte este un sistem securizat de creare de șabloane, acesta verifică dacă numele tag-ului rezultat este valid și nu conține valori nedorite sau rău intenționate. De asemenea, se asigură că numele tag-ului final este întotdeauna același cu numele tag-ului de deschidere. + + Comentarii .[#toc-comments] =========================== diff --git a/latte/ro/tags.texy b/latte/ro/tags.texy index 12fbf21767..ca997cafc5 100644 --- a/latte/ro/tags.texy +++ b/latte/ro/tags.texy @@ -991,6 +991,8 @@ Dacă `$heading === null`, atributul `

` este tipărit fără modificări. Î

...

``` +Deoarece Latte este un sistem de modelare securizat, acesta verifică dacă noul nume de etichetă este valid și nu conține valori nedorite sau rău intenționate. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/ru/develop.texy b/latte/ru/develop.texy index d252d0bdd3..bba7e01173 100644 --- a/latte/ru/develop.texy +++ b/latte/ru/develop.texy @@ -274,14 +274,23 @@ vendor/bin/latte-lint // введите фактический путь к файлу autoload.php require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// добавить сюда отдельные расширения -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// добавьте сюда свои индивидуальные расширения +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); -exit($ok ? 0: 1); +exit($ok ? 0 : 1); +``` + +В качестве альтернативы можно передать Линтеру свой собственный объект `Latte\Engine`: + +```php +$latte = new Latte\Engine; +// здесь мы настраиваем объект $latte +$linter = new Latte\Tools\Linter(engine: $latte); ``` diff --git a/latte/ru/syntax.texy b/latte/ru/syntax.texy index 436d486851..8f30d3b53a 100644 --- a/latte/ru/syntax.texy +++ b/latte/ru/syntax.texy @@ -155,6 +155,20 @@ Latte позволяет вызывать фильтры с помощью зн ``` +Динамические HTML-теги .[#toc-dynamic-html-tags] +================================================ + +Latte поддерживает динамические HTML-теги, которые полезны, когда требуется гибкость в названиях тегов: + +```latte +Heading +``` + +Например, приведенный выше код может генерировать `

Heading

` или `

Heading

` в зависимости от значения переменной `$level`. Динамические HTML-теги в Latte всегда должны быть парными. Их альтернативой является [n:tag |tags#n:tag]. + +Поскольку Latte является безопасной системой шаблонизации, она проверяет, что результирующее имя тега является корректным и не содержит нежелательных или вредоносных значений. Также проверяется, что имя конечного тега всегда совпадает с именем открывающего тега. + + Комментарии .[#toc-comments] ============================ diff --git a/latte/ru/tags.texy b/latte/ru/tags.texy index 5b12995d91..9a1d840b66 100644 --- a/latte/ru/tags.texy +++ b/latte/ru/tags.texy @@ -991,6 +991,8 @@ n:tag

...

``` +Поскольку Latte является безопасной системой шаблонизации, она проверяет, что имя нового тега является корректным и не содержит никаких нежелательных или вредоносных значений. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/sl/develop.texy b/latte/sl/develop.texy index 3eee56c049..7df0221c10 100644 --- a/latte/sl/develop.texy +++ b/latte/sl/develop.texy @@ -274,16 +274,25 @@ S parametrom `--strict` lahko aktivirate [strogi način|#strict mode]. // vnesite dejansko pot do datoteke autoload.php require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// tukaj dodajte posamezne razširitve -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// tukaj dodajte svoje posamezne razširitve +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Druga možnost je, da programu Linter posredujete svoj predmet `Latte\Engine`: + +```php +$latte = new Latte\Engine; +// tukaj konfiguriramo predmet $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Nalaganje predlog iz niza .[#toc-loading-templates-from-a-string] ================================================================= diff --git a/latte/sl/syntax.texy b/latte/sl/syntax.texy index 64b197c208..0896381aa7 100644 --- a/latte/sl/syntax.texy +++ b/latte/sl/syntax.texy @@ -155,6 +155,20 @@ Ali neposredno na vrednosti (v kombinaciji z [`{=expr}` | https://latte.nette.or ``` +Dinamične oznake HTML .[#toc-dynamic-html-tags] +=============================================== + +Latte podpira dinamične oznake HTML, ki so uporabne, kadar je potrebna prilagodljivost imen oznak: + +```latte +Heading +``` + +Zgornja koda lahko na primer ustvari `

Heading

` ali `

Heading

` odvisno od vrednosti spremenljivke `$level`. Dinamične oznake HTML v Latte morajo biti vedno v paru. Njihova alternativa je [n:tag |tags#n:tag]. + +Ker je Latte varen sistem za oblikovanje predlog, preveri, ali je dobljeno ime oznake veljavno in ne vsebuje neželenih ali zlonamernih vrednosti. Prav tako zagotavlja, da je končno ime oznake vedno enako začetnemu imenu oznake. + + Komentarji .[#toc-comments] =========================== diff --git a/latte/sl/tags.texy b/latte/sl/tags.texy index c619c4a3ff..1e52d9acf5 100644 --- a/latte/sl/tags.texy +++ b/latte/sl/tags.texy @@ -991,6 +991,8 @@ Atribut `n:tag` lahko dinamično spremeni ime elementa HTML.

...

``` +Ker je Latte varen sistem za oblikovanje predlog, preveri, ali je ime nove oznake veljavno in ne vsebuje neželenih ali zlonamernih vrednosti. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/tr/develop.texy b/latte/tr/develop.texy index d1c0485531..89515279b0 100644 --- a/latte/tr/develop.texy +++ b/latte/tr/develop.texy @@ -274,16 +274,25 @@ vendor/bin/latte-lint // autoload.php dosyasının gerçek yolunu girin require __DIR__ . '/vendor/autoload.php'; -$engine = new Latte\Engine; -// bireysel uzantıları buraya ekleyin -$engine->addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// bireysel uzantılarınızı buraya ekleyin +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Alternatif olarak, kendi `Latte\Engine` nesnenizi Linter'a aktarabilirsiniz: + +```php +$latte = new Latte\Engine; +// burada $latte nesnesini yapılandırıyoruz +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Dizeden Şablon Yükleme .[#toc-loading-templates-from-a-string] ============================================================== diff --git a/latte/tr/syntax.texy b/latte/tr/syntax.texy index 7877c39232..6e2b0e4925 100644 --- a/latte/tr/syntax.texy +++ b/latte/tr/syntax.texy @@ -155,6 +155,20 @@ Veya doğrudan değer üzerinde (ile birlikte [`{=expr}` | https://latte.nette.o ``` +Dinamik HTML Etiketleri .[#toc-dynamic-html-tags] +================================================= + +Latte, etiket adlarında esnekliğe ihtiyaç duyduğunuzda yararlı olan dinamik HTML etiketlerini destekler: + +```latte +Heading +``` + +Örneğin, yukarıdaki kod şunları üretebilir `

Heading

` veya `

Heading

` değişkeninin değerine bağlı olarak `$level`. Latte'deki dinamik HTML etiketleri her zaman eşleştirilmelidir. Alternatifleri [n:tag |tags#n:tag]. + +Latte güvenli bir şablonlama sistemi olduğundan, ortaya çıkan etiket adının geçerli olup olmadığını ve istenmeyen veya kötü amaçlı değerler içermediğini kontrol eder. Ayrıca, son etiket adının her zaman açılış etiketi adıyla aynı olmasını sağlar. + + Yorumlar .[#toc-comments] ========================= diff --git a/latte/tr/tags.texy b/latte/tr/tags.texy index d724a901db..9639ca566a 100644 --- a/latte/tr/tags.texy +++ b/latte/tr/tags.texy @@ -991,6 +991,8 @@ Eğer `$heading === null`, ise `

` etiketi değiştirilmeden yazdırılır. A

...

``` +Latte güvenli bir şablonlama sistemi olduğundan, yeni etiket adının geçerli olup olmadığını ve istenmeyen veya kötü amaçlı değerler içermediğini kontrol eder. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- diff --git a/latte/uk/develop.texy b/latte/uk/develop.texy index bf30c26614..a41c7a5d0b 100644 --- a/latte/uk/develop.texy +++ b/latte/uk/develop.texy @@ -271,19 +271,28 @@ vendor/bin/latte-lint #!/usr/bin/env php addExtension(/* ... */); +$path = $argv[1] ?? '.'; + +$linter = new Latte\Tools\Linter; +$latte = $linter->getEngine(); +// додайте тут свої індивідуальні розширення +$latte->addExtension(/* ... */); -$path = $argv[1]; -$linter = new Latte\Tools\Linter(engine: $engine); $ok = $linter->scanDirectory($path); exit($ok ? 0 : 1); ``` +Крім того, ви можете передати лінтеру власний об'єкт `Latte\Engine`: + +```php +$latte = new Latte\Engine; +// тут ми налаштовуємо об'єкт $latte +$linter = new Latte\Tools\Linter(engine: $latte); +``` + Завантаження шаблонів з рядка .[#toc-loading-templates-from-a-string] ===================================================================== diff --git a/latte/uk/syntax.texy b/latte/uk/syntax.texy index d8b174c598..b1636f38ba 100644 --- a/latte/uk/syntax.texy +++ b/latte/uk/syntax.texy @@ -155,6 +155,20 @@ Latte дозволяє викликати фільтри за допомогою ``` +Динамічні теги HTML .[#toc-dynamic-html-tags] +============================================= + +Latte підтримує динамічні HTML-теги, які корисні, коли вам потрібна гнучкість у назвах тегів: + +```latte +Heading +``` + +Наприклад, код вище може згенерувати `

Heading

` або `

Heading

` в залежності від значення змінної `$level`. Динамічні HTML-теги в Latte завжди повинні бути парними. Їх альтернативою є [n:tag |tags#n:tag]. + +Оскільки Latte є безпечною системою шаблонів, вона перевіряє, що результуюче ім'я тегу є дійсним і не містить небажаних або шкідливих значень. Вона також гарантує, що ім'я кінцевого тегу завжди збігається з ім'ям початкового тегу. + + Коментарі .[#toc-comments] ========================== diff --git a/latte/uk/tags.texy b/latte/uk/tags.texy index 4fe83f6b5a..5904f30aa8 100644 --- a/latte/uk/tags.texy +++ b/latte/uk/tags.texy @@ -991,6 +991,8 @@ n:tag .[#toc-n-tag]

...

``` +Оскільки Latte - це безпечна система шаблонів, вона перевіряє, що нове ім'я тегу є дійсним і не містить небажаних або шкідливих значень. + n:ifcontent .[#toc-n-ifcontent] ------------------------------- From 38c497535c42c61675583c841a3eb02a6286c4c2 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Fri, 10 Feb 2023 13:12:46 +0100 Subject: [PATCH 5/7] migration guide for Nette 4.0 [WIP] --- migrations/cs/@home.texy | 1 + migrations/cs/@left-menu.texy | 1 + migrations/cs/to-4-0.texy | 61 +++++++++++++++++++++++++++++++++++ migrations/en/@home.texy | 1 + migrations/en/@left-menu.texy | 1 + migrations/en/to-4-0.texy | 59 +++++++++++++++++++++++++++++++++ 6 files changed, 124 insertions(+) create mode 100644 migrations/cs/to-4-0.texy create mode 100644 migrations/en/to-4-0.texy diff --git a/migrations/cs/@home.texy b/migrations/cs/@home.texy index 9ef31ca6f9..24841852b3 100644 --- a/migrations/cs/@home.texy +++ b/migrations/cs/@home.texy @@ -1,6 +1,7 @@ Přechod na novější verze ************************ +- [z Nette 3.1 na 4.0 |to-4-0] - [z Nette 3.0 na 3.1 |to-3-1] - [z Nette 2.4 na 3.0 |to-3-0] - [z Nette 2.3 na 2.4 |to-2-4] diff --git a/migrations/cs/@left-menu.texy b/migrations/cs/@left-menu.texy index 82c0d7e4a7..de7ece8370 100644 --- a/migrations/cs/@left-menu.texy +++ b/migrations/cs/@left-menu.texy @@ -1,6 +1,7 @@ Přechod na novější verze ************************ - [Úvod |@home] +- [Z verze 3.1 na 4.0 |to-4-0] - [Z verze 3.0 na 3.1 |to-3-1] - [Z verze 2.4 na 3.0 |to-3-0] - [Z verze 2.3 na 2.4 |to-2-4] diff --git a/migrations/cs/to-4-0.texy b/migrations/cs/to-4-0.texy new file mode 100644 index 0000000000..390ee9a19a --- /dev/null +++ b/migrations/cs/to-4-0.texy @@ -0,0 +1,61 @@ +Přechod na verzi 4.0 +******************** + +.[note] +Tato stránka vzniká postupně s tím, jak se uvolňují jednotlivé balíčky. + +Minimální požadovaná verze PHP je 8.0 + +Všechny změny názvů uvedené v tomto dokumentu znamenají, že původní název samozřejmě nadále existuje a funguje, jen je označený jako deprecated. Můžete se setkat s tím, že vám je bude IDE vizuálně označovat jako deprecated. + +/--comment +Verzí Nette 4.0 se rozumí, že máte tyto balíčky nainstalované ve verze 4.0.*. Ostatní balíčky mohou mít vyšší nebo nižší čísla verzí, kompatibilitu hlídá Composer. + +```json +"require": { + "nette/application": "4.0.*", + "nette/bootstrap": "3.2.*", + "nette/caching": "3.2.*", + "nette/database": "4.0.*", + "nette/forms": "4.0.*", + "nette/http": "4.0.*", + "nette/security": "4.0.*", +}, +``` +\-- + + +Utils 4.0 +--------- + +Třída `Nette\Utils\Reflection` poskytovala metody pro práci s typy `getParameterType()`, `getPropertyType()` a `getReturnType()`. Metody vznikly v době, kdy PHP nemělo union, intersection nebo nejnovější disjunctive normal form typy, se kterými už nefungují a nahradila je [třída Type |utils:type]. Od verze 4.0 jsou tyto metody odstraněné. + +Metoda `Nette\Utils\Reflection::getParameterDefaultValue()` je deprecated, protože nativní `ReflectionParameter::getDefaultValue()` už funguje správně. + +Zrušená je proměnná `Nette\Utils\Html::$xhtml`. + +Pro instalaci Nette Utils 4.0 je potřeba aktualizovat i RobotLoader na verzi 4, pokud jej používáte, a odstranit balíček `nette/finder`: + +```shell +composer remove nette/finder +composer require "nette/utils:^4.0" "nette/robot-loader:^4.0" +``` + + +Finder 4.0 +---------- + +Finder se přestěhoval do balíčku `nette/utils`, viz [#Utils 4.0]. + +Na Linuxu se nově chová v režimu case-sensitive. + +V předchozí verzi platilo, že metody `exclude()` a `filter()` fungovaly jinak, když byly zavolány **před** `from()` resp. `in()` a **po** ní. Tohle už neplatí, `exclude()` a `filter()` fungují vždy stejně. Dřívější `filter()` volaný *až po* nahradila nová metoda `descentFilter()`. + +Finder již neimplementuje rozhraní Countable. + +Řetězec začínající lomítkem ve `Finder::findFiles('/f*')` se nově považuje za absolutní cestu, je potřeba ho nahradit např. za `Finder::findFiles('./f*')`. + + + + +{{priority: -5}} diff --git a/migrations/en/@home.texy b/migrations/en/@home.texy index d49961c0f8..cb2c6f214f 100644 --- a/migrations/en/@home.texy +++ b/migrations/en/@home.texy @@ -1,6 +1,7 @@ Upgrade Guide ************* +- [from Nette 3.1 to 4.0 |to-4-0] - [from Nette 3.0 to 3.1 |to-3-1] - [from Nette 2.4 to 3.0 |to-3-0] - [from Nette 2.3 to 2.4 |to-2-4] diff --git a/migrations/en/@left-menu.texy b/migrations/en/@left-menu.texy index af1cd6e312..77bd539276 100644 --- a/migrations/en/@left-menu.texy +++ b/migrations/en/@left-menu.texy @@ -1,6 +1,7 @@ Upgrade Guide ************* - [Overview |@home] +- [From 3.1 to 4.0 |to-4-0] - [From 3.0 to 3.1 |to-3-1] - [From 2.4 to 3.0 |to-3-0] - [From 2.3 to 2.4 |to-2-4] diff --git a/migrations/en/to-4-0.texy b/migrations/en/to-4-0.texy new file mode 100644 index 0000000000..879f072589 --- /dev/null +++ b/migrations/en/to-4-0.texy @@ -0,0 +1,59 @@ +Migrating to Version 4.0 +************************ + +.[note] +This page is being built incrementally as packages are released. + +Minimum required PHP version is 8.0 + +All name changes mentioned in this document mean that the original name obviously still exists and works, it is just marked as deprecated. You may encounter the IDE visually marking them as deprecated. + +/--comment +Verzí Nette 4.0 se rozumí, že máte tyto balíčky nainstalované ve verze 4.0.*. Ostatní balíčky mohou mít vyšší nebo nižší čísla verzí, kompatibilitu hlídá Composer. + +```json +"require": { + "nette/application": "4.0.*", + "nette/bootstrap": "3.2.*", + "nette/caching": "3.2.*", + "nette/database": "4.0.*", + "nette/forms": "4.0.*", + "nette/http": "4.0.*", + "nette/security": "4.0.*", +}, +``` +\-- + + +Utils 4.0 +--------- + +The `Nette\Utils\Reflection` class provided methods `getParameterType()`, `getPropertyType()` and `getReturnType()` for working with the types. These methods were created when PHP didn't have union, intersection or the newest disjunctive normal form types, which they no longer work with and were replaced by the [Type class |utils:type]. As of version 4.0, these methods have been removed. + +The method `Nette\Utils\Reflection::getParameterDefaultValue()` is deprecated because the native `ReflectionParameter::getDefaultValue()` already works correctly. + +The `Nette\Utils\Html::$xhtml` variable is removed. + +To install Nette Utils 4.0 you need to update RobotLoader to version 4 if you are using it, and remove the `nette/finder` package: + +```shell +composer remove nette/finder +composer require "nette/utils:^4.0" "nette/robot-loader:^4.0" +``` + + +Finder 4.0 +---------- + +Finder has moved to the package `nette/utils`, see [Utils 4.0 |#Utils 4.0]. + +On Linux, it now behaves in case-sensitive mode. + +In the previous version, the `exclude()` and `filter()` methods worked differently when called **before** `from()` and `in()` respectively, and **after** it. This is no longer the case, `exclude()` and `filter()` always work the same. The former `filter()` called *before* has been replaced by the new `descentFilter()` method. + +The Finder no longer implements the Countable interface. + +A string starting with a slash in `Finder::findFiles('/f*')` is now considered an absolute path, it should be replaced with e.g. `Finder::findFiles('./f*')`. + + +{{priority: -5}} From cceef17891a8e0682e224686ea66b89876485dbb Mon Sep 17 00:00:00 2001 From: David Grudl Date: Wed, 19 Apr 2023 03:31:43 +0200 Subject: [PATCH 6/7] assistant wip --- assistant/cs/@home.texy | 4 ++++ assistant/en/@home.texy | 4 ++++ assistant/meta.json | 1 + 3 files changed, 9 insertions(+) create mode 100644 assistant/cs/@home.texy create mode 100644 assistant/en/@home.texy create mode 100644 assistant/meta.json diff --git a/assistant/cs/@home.texy b/assistant/cs/@home.texy new file mode 100644 index 0000000000..75b9540392 --- /dev/null +++ b/assistant/cs/@home.texy @@ -0,0 +1,4 @@ +Assistant +********* + +Chystaný nástroj pro scaffold, rychlé zkrácení doby vývoje automatickým generováním potřebných souborů a konfigurace aplikace. diff --git a/assistant/en/@home.texy b/assistant/en/@home.texy new file mode 100644 index 0000000000..98c325dd39 --- /dev/null +++ b/assistant/en/@home.texy @@ -0,0 +1,4 @@ +Assistant +********* + +Upcoming tool for scaffold, quickly reduce development time by automatically generating the necessary files and configuring the application. diff --git a/assistant/meta.json b/assistant/meta.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/assistant/meta.json @@ -0,0 +1 @@ +{} From f4954309ea179f7e19ffe36ddf3983abcf293125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C5=A0pa=C4=8Dek?= Date: Sat, 9 Sep 2023 02:03:27 +0200 Subject: [PATCH 7/7] Document list & array for collection of services There will be a PR for nette/di that adds the list support, check the docs PR, I'll add it. --- dependency-injection/cs/autowiring.texy | 16 ++++++++++++++++ dependency-injection/en/autowiring.texy | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/dependency-injection/cs/autowiring.texy b/dependency-injection/cs/autowiring.texy index 3b2b4f8e0a..1987a7a066 100644 --- a/dependency-injection/cs/autowiring.texy +++ b/dependency-injection/cs/autowiring.texy @@ -105,6 +105,22 @@ class ShipManager DI kontejner pak automaticky předá pole služeb odpovídajících danému typu. Vynechá služby, které mají vypnutý autowiring. +Typy ve tvaru `list` a `array` jsou podporovány také: + +```php +namespace Model; + +class ShipManager +{ + /** + * @param list $shippers + * @param array $managers + */ + public function __construct(array $shippers, array $managers) + {} +} +``` + Pokud nemůžete ovlivnit podobu phpDoc komentáře, můžete předat pole služeb přímo v konfiguraci pomocí [`typed()`|services#Speciální funkce]. diff --git a/dependency-injection/en/autowiring.texy b/dependency-injection/en/autowiring.texy index 92c827f3de..f73cd6af8e 100644 --- a/dependency-injection/en/autowiring.texy +++ b/dependency-injection/en/autowiring.texy @@ -105,6 +105,22 @@ class ShipManager The DI container then automatically passes an array of services matching the given type. It will omit services that have autowiring turned off. +Types like `list` and `array` are also supported: + +```php +namespace Model; + +class ShipManager +{ + /** + * @param list $shippers + * @param array $managers + */ + public function __construct(array $shippers, array $managers) + {} +} +``` + If you can't control the form of the phpDoc comment, you can pass an array of services directly in the configuration using [`typed()`|services#Special Functions].