Twig Templating
Syntax
Basic examples:
- {{ foo.bar }}variable
- {% set foo = 'foo' %}assign variable
- {{ name|striptags|title }}filters
- {% for item in items %}...{% endfor %}loop on elements
- remaining on the official documentation
Templates
        If you want to use twig templates not accessible from the public folder,
        you must use a separate template folder in the site config via the path_templates parameter.
        This folder has the twig namespace @templates.
        If you don't use a twig namespace, twig will look for files in the directory path_pages
Example of template inheritance : {% extends "@templates/base.twig" %}
Provided with this project
Variable app
    The app variable is a readonly service container which exposes only a few services.
| description | example | result | |
|---|---|---|---|
| app.config | website config | {{ app.config.path_public }} | /app/demo/public | 
| {{ app.config.log_max_files }} | 7 | ||
| app.db | db object that allows access to all yaml tables | {{ app.db.table('persons').get(10).name }} | Lindon | 
| {{ app.db.table('persons')|length }} | 100 | ||
| app.logger | for logging | {{ app.logger.error('Hello World !') }} | |
| app.request | object ServerRequestInterfaceof PSR-7 HTTP message interfaces | {{ app.request.uri.path }} | /menu/templating | 
| {{ app.request.uri }} | https://simplesite.arnapou.net/menu/templating | ||
| app.version | Simplesite version | {{ app.version }} | v8.3@dev | 
Variable view
    The view variable is an immutable object which represents the current view.
| description | example | result | |
|---|---|---|---|
| view.scope | string $scope | {{ view.scope }} | @pages | 
| view.path | string $path | {{ view.path }} | /menu/templating.twig | 
| view.name | string $name | {{ view.name }} | @pages/menu/templating.twig | 
| view.isDir | bool $isDir | {{ view.isDir|json_encode }} | false | 
| view.isFile | bool $isFile | {{ view.isFile|json_encode }} | true | 
| view.exists | bool $exists | {{ view.exists|json_encode }} | true | 
| view.root | root(): self | {{ view.root }} | @pages | 
| view.dirname | dirname(int $levels = 1): self | {{ view.dirname }} | @pages/menu | 
| {{ view.dirname(1).basename }} | menu | ||
| {{ view.dirname(2) }} | @pages | ||
| view.basename | basename(): string | {{ view.basename }} | templating.twig | 
| view.extension | extension(): string | {{ view.extension }} | twig | 
| view.relative | relative(string $relative): self | {{ view.relative('../foo.ext') }} | @pages/foo.ext | 
| view.list | list(): array<self> list('d'): array<self> list('f'): array<self> | {{ view.dirname.list | database.twig errors.html images.twig pages.twig pages.yaml php.html templating.twig | 
| {{ view.relative('..').list('d') | @pages/menu | ||
| {{ view.relative('..').list('f') | @pages/index.twig @pages/php.png @pages/test.json | 
Functions
| description | example | result | |
|---|---|---|---|
| asset | calculates the path of an asset | {{ asset('../assets/twig.png') }} | /../assets/twig.png | 
| data | parse a file to get the data, works only for yamlandjson | {{ data('@pages/menu/pages.yaml').address.street }} | Santa Claus Lane | 
| {{ data('@pages/test.json').1.info.email }} | xbahringer@hotmail.com | ||
| path | calculates the path of a link | {{ path('static_dir', { path: 'menu/pages' }) }} | /menu/pages/ | 
| {{ path('static_page', { path: 'menu/templating' }) }} | /menu/templating | ||
| path_dir | shortcut of path('static_dir', ...) | {{ path_dir('pages') }} | /pages/ | 
| path_page | shortcut of path('static_page', ...) | {{ path_page('menu/templating') }} | /menu/templating | 
| thumbnail | convert the image path to a thumbnail path | {{ thumbnail('../assets/twig.png', 50) }} | ../assets/twig.50.png | 
Filters
| description | example | result | |
|---|---|---|---|
| basename | strip directory and suffix from filenames | {{ '@pages/menu/php.html'|basename }} | php.html | 
| camel | convert a text into camelCase | {{ 'Hello World!'|camel }} | helloWorld | 
| debug_type | display the type of the object | {{ 'Hello'|debug_type }} | string | 
| dirname | strip last component from file name | {{ '@pages/menu/php.html'|dirname }} | @pages/menu | 
| getenv | get the env variable | {{ 'PHP_VERSION'|getenv }} | 8.4.8 | 
| markdown_to_html | convert markdown to html |  |  | 
| minify_html | removes unnecessary html spaces |  |  | 
| path_dir | url of a folder path | {{ 'pages'|path_dir }} | /pages/ | 
| path_page | url of a page path | {{ 'menu/templating'|path_page }} | /menu/templating | 
| slug | simplifies a text by converting the characters (useful for example for anchors) | {{ 'Wôrķšƥáçè ~~sèťtïñğš~~ 5€'|slug }} | workspace-settings-5eur | 
| snake | convert a text into snake_case | {{ 'Hello World!'|snake }} | hello_world | 
| thumbnail | convert the path of an image to that of its thumbnail | {{ '../assets/twig.png'|thumbnail(50) }} | ../assets/twig.50.png | 
| view | get a view object from its string representation | {{ '@public/assets'|view }} | @public/assets | 
| yaml | basically a yaml encode | {{ {foo: 'bar', baz: 123}|yaml }} |  |