Fraenkiman e544ed6d9a Smatry Release 4.4.1 on Feb-2024
Comparing changes: https://github.com/smarty-php/smarty/compare/v4.3.1...v4.4.1

It is noticeable that Smarty 4.3.1 does not officially support PHP 8.3. Is only supported with 4.4.0.

Remark:

During tests with Smarty 4.5.1, it was noticed that the following warning occurs:
Deprecated: Using the unregistered function "function_exists" in a template is deprecated and will be removed in a future version. Use Smarty::registerPlugin to explicitly register a custom modifier.

As of Smarty 5.X.X, templates must be revised again.
The Smarty release 5.0.2 is already officially available. However, integration into FlatPress is not entirely trivial.
2024-04-14 18:37:39 +02:00

61 lines
2.3 KiB
Markdown

# Variable scopes
You have the choice to assign variables to the scope of the main Smarty
object, data objects created with [`createData()`](../../programmers/api-functions/api-create-data.md),
and template objects created with
[`createTemplate()`](../../programmers/api-functions/api-create-template.md). These objects can be
chained. A template sees all the variables of its own object and all
variables assigned to the objects in its chain of parent objects.
By default, templates which are rendered by
[`$smarty->display(...)`](../../programmers/api-functions/api-display.md) or
[`$smarty->fetch(...)`](../../programmers/api-functions/api-fetch.md) calls are automatically linked to
the Smarty object variable scope.
By assigning variables to individual data or template objects you have
full control which variables can be seen by a template.
```php
<?php
// assign variable to Smarty object scope
$smarty->assign('foo','smarty');
// assign variables to data object scope
$data = $smarty->createData();
$data->assign('foo','data');
$data->assign('bar','bar-data');
// assign variables to other data object scope
$data2 = $smarty->createData($data);
$data2->assign('bar','bar-data2');
// assign variable to template object scope
$tpl = $smarty->createTemplate('index.tpl');
$tpl->assign('bar','bar-template');
// assign variable to template object scope with link to Smarty object
$tpl2 = $smarty->createTemplate('index.tpl',$smarty);
$tpl2->assign('bar','bar-template2');
// This display() does see $foo='smarty' from the $smarty object
$smarty->display('index.tpl');
// This display() does see $foo='data' and $bar='bar-data' from the data object $data
$smarty->display('index.tpl',$data);
// This display() does see $foo='data' from the data object $data
// and $bar='bar-data2' from the data object $data2
$smarty->display('index.tpl',$data2);
// This display() does see $bar='bar-template' from the template object $tpl
$tpl->display(); // or $smarty->display($tpl);
// This display() does see $bar='bar-template2' from the template object $tpl2
// and $foo='smarty' form the Smarty object $foo
$tpl2->display(); // or $smarty->display($tpl2);
```
See also [`assign()`](../../programmers/api-functions/api-assign.md),
[`createData()`](../../programmers/api-functions/api-create-data.md)
and [`createTemplate()`](../../programmers/api-functions/api-create-template.md).