====== How to rework your themes and plugins for FlatPress 1.3 / Smarty 4 ======
This article is still work in progress. It will be subject to further additions and changes.\\
Found something's incorrect or missing? Feel free to fix it right away, or let us know on the [[https://forum.flatpress.org/viewtopic.php?p=1831|Support Forum]].
In older versions (up to 1.2.1), FlatPress comes with version 2.6 of the [[https://www.smarty.net/|Smarty template engine]].\\
With FlatPress 1.3 "Andante", we switched Smarty version 4.
**See also:**\\
[[https://www.smarty.net/documentation|Official Smarty docs]]\\
[[https://github.com/smarty-php/smarty/blob/a09364fe1706cb465e910eb040e592053d7effb8/SMARTY_2_BC_NOTES.txt|Smarty 2 backward compatibility notes]]\\
[[https://github.com/smarty-php/smarty/blob/a09364fe1706cb465e910eb040e592053d7effb8/SMARTY_3.0_BC_NOTES.txt|Smarty 3 backward compatibility notes]]
Smarty has changed //significantly// in between - if you contributed themes or plugins to FlatPress, they might need some changes to work with FlatPress 1.3 and higher.
In this article, we share our experiences and give theme designers and plugin developers hints to successfully rework their themes/plugins to be Smarty 4 compatible. For more details, please consult the Smarty backward compatibility notes.
===== Themes: Stricter template syntax =====
Smarty 4 is much less forgiving when it comes to syntax correctness of your template files. In the FlatPress default template files, we had to fix quite a lot of missing attribute quotations: Any attribute value that contains special chars (anything but A-Za-z0-9_) must be quoted now. This concerns file paths, for example.
{| style=""
|+ Examples:
!
Okay for Smarty 2 / FlatPress 1.2
!
Necessary for Smarty 4 / FlatPress 1.3
!
Necessary for Smarty 5
|-
|
{include file=shared:errorlist.tpl}
|
{include file="shared:errorlist.tpl"}
|
{include "@shared:errorlist.tpl"}
|-
|
{html_form class=option-set}
|
{html_form class="option-set"}
|}
===== Plugins: Changed Smarty API =====
**Tip of the day:**\\ To check each Smarty function call within your plugin code, simply search the code for ''%%$smarty->%%''.
Since Smarty 3, the Smarty function name schema is in //camelCaseStyle// instead of //underline_style//.
{| style=""
|+ Examples:
!
Smarty 2 / FlatPress 1.2
!
Smarty 4 / FlatPress 1.3
!
Smarty 5
|-
|
get_template_vars()
|
getTemplateVars()
|
|-
|
assign_by_ref()
|
assignByRef()
|
assign()
|}
Also, the different //register_...()// functions have been combined to //registerPlugin($type, ...)//:
{| style=""
|+ Examples:
!
Smarty 2 / FlatPress 1.2
!
Smarty 4 / FlatPress 1.3
|-
|
register_function(...)
|
registerPlugin('function', ...)
|-
|
register_modifier(...)
|
registerPlugin('modifier', ...)
|}
==== Keep your plugin backward compatible ====
To make your plugin work with Smarty 2 (FlatPress 1.2) __and__ Smarty 4 (FlatPress 1.3), use the following switch. It determines if a Smarty legacy function is available, thus indicating there's a Smarty 2 running:
$isLegacySmarty = method_exists($smarty, 'register_function');
if ($isLegacySmarty) {
// code for FlatPress 1.2.x and below
$smarty->register_modifier(...);
$smarty->assign_by_ref(...);
} else {
// code for FlatPress 1.3 and higher
$smarty->registerPlugin('modifier', ...);
$smarty->assignByRef(...);
}