From 50aed5323c5b3c00471faecb1c6839db07412c12 Mon Sep 17 00:00:00 2001 From: Simon Wisselink Date: Mon, 7 Aug 2023 00:45:21 +0100 Subject: [PATCH] Deployed d8b4496b to 5.0 with MkDocs 1.4.2 and mike 1.1.2 --- 5.0/404.html | 2140 ++++++ 5.0/_config.yml | 1 + 5.0/api/basics/index.html | 2329 ++++++ 5.0/api/caching/basics/index.html | 2443 ++++++ .../caching/custom-storage-layers/index.html | 2205 ++++++ .../multiple-caches-per-template/index.html | 2370 ++++++ 5.0/api/configuring/index.html | 2431 ++++++ 5.0/api/extending/block-tags/index.html | 2233 ++++++ 5.0/api/extending/extensions/index.html | 2230 ++++++ 5.0/api/extending/introduction/index.html | 2181 ++++++ 5.0/api/extending/modifiers/index.html | 2195 ++++++ 5.0/api/extending/tags/index.html | 2298 ++++++ 5.0/api/filters/output-filters/index.html | 2205 ++++++ 5.0/api/filters/postfilters/index.html | 2199 ++++++ 5.0/api/filters/prefilters/index.html | 2196 ++++++ 5.0/api/inheritance/index.html | 2351 ++++++ 5.0/api/rendering/index.html | 2315 ++++++ 5.0/api/resources/index.html | 2625 +++++++ 5.0/api/security/index.html | 2289 ++++++ 5.0/api/variables/assigning/index.html | 2391 ++++++ 5.0/api/variables/config-files/index.html | 2345 ++++++ 5.0/api/variables/objects/index.html | 2321 ++++++ .../variables/static-class-methods/index.html | 2248 ++++++ 5.0/api/variables/streams/index.html | 2183 ++++++ 5.0/appendixes/tips/index.html | 2391 ++++++ 5.0/appendixes/troubleshooting/index.html | 2259 ++++++ 5.0/assets/images/favicon.png | Bin 0 -> 1870 bytes 5.0/assets/javascripts/bundle.6df46069.min.js | 29 + .../javascripts/bundle.6df46069.min.js.map | 8 + .../javascripts/lunr/min/lunr.ar.min.js | 1 + .../javascripts/lunr/min/lunr.da.min.js | 18 + .../javascripts/lunr/min/lunr.de.min.js | 18 + .../javascripts/lunr/min/lunr.du.min.js | 18 + .../javascripts/lunr/min/lunr.es.min.js | 18 + .../javascripts/lunr/min/lunr.fi.min.js | 18 + .../javascripts/lunr/min/lunr.fr.min.js | 18 + .../javascripts/lunr/min/lunr.hi.min.js | 1 + .../javascripts/lunr/min/lunr.hu.min.js | 18 + .../javascripts/lunr/min/lunr.it.min.js | 18 + .../javascripts/lunr/min/lunr.ja.min.js | 1 + .../javascripts/lunr/min/lunr.jp.min.js | 1 + .../javascripts/lunr/min/lunr.ko.min.js | 1 + .../javascripts/lunr/min/lunr.multi.min.js | 1 + .../javascripts/lunr/min/lunr.nl.min.js | 18 + .../javascripts/lunr/min/lunr.no.min.js | 18 + .../javascripts/lunr/min/lunr.pt.min.js | 18 + .../javascripts/lunr/min/lunr.ro.min.js | 18 + .../javascripts/lunr/min/lunr.ru.min.js | 18 + .../lunr/min/lunr.stemmer.support.min.js | 1 + .../javascripts/lunr/min/lunr.sv.min.js | 18 + .../javascripts/lunr/min/lunr.ta.min.js | 1 + .../javascripts/lunr/min/lunr.th.min.js | 1 + .../javascripts/lunr/min/lunr.tr.min.js | 18 + .../javascripts/lunr/min/lunr.vi.min.js | 1 + .../javascripts/lunr/min/lunr.zh.min.js | 1 + 5.0/assets/javascripts/lunr/tinyseg.js | 206 + 5.0/assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++++++ .../workers/search.db81ec45.min.js | 42 + .../workers/search.db81ec45.min.js.map | 8 + 5.0/assets/stylesheets/main.0d440cfe.min.css | 1 + .../stylesheets/main.0d440cfe.min.css.map | 1 + .../stylesheets/palette.2505c338.min.css | 1 + .../stylesheets/palette.2505c338.min.css.map | 1 + .../chapter-debugging-console/index.html | 2206 ++++++ 5.0/designers/config-files/index.html | 2237 ++++++ .../language-basic-syntax/index.html | 2204 ++++++ .../language-escaping/index.html | 2288 ++++++ .../language-syntax-attributes/index.html | 2266 ++++++ .../language-syntax-comments/index.html | 2282 ++++++ .../language-syntax-functions/index.html | 2260 ++++++ .../language-syntax-operators/index.html | 2314 ++++++ .../language-syntax-quotes/index.html | 2277 ++++++ .../language-syntax-variables/index.html | 2323 ++++++ .../language-builtin-functions/index.html | 2207 ++++++ .../language-function-append/index.html | 2321 ++++++ .../language-function-assign/index.html | 2413 ++++++ .../language-function-block/index.html | 2424 ++++++ .../language-function-call/index.html | 2348 ++++++ .../language-function-capture/index.html | 2318 ++++++ .../language-function-config-load/index.html | 2328 ++++++ .../language-function-debug/index.html | 2188 ++++++ .../language-function-extends/index.html | 2283 ++++++ .../language-function-for/index.html | 2341 ++++++ .../language-function-foreach/index.html | 2672 +++++++ .../language-function-function/index.html | 2334 ++++++ .../language-function-if/index.html | 2440 ++++++ .../language-function-include/index.html | 2459 ++++++ .../language-function-insert/index.html | 2167 ++++++ .../language-function-ldelim/index.html | 2211 ++++++ .../language-function-literal/index.html | 2205 ++++++ .../language-function-nocache/index.html | 2190 ++++++ .../language-function-section/index.html | 2925 +++++++ .../language-function-setfilter/index.html | 2259 ++++++ .../language-function-strip/index.html | 2211 ++++++ .../language-function-while/index.html | 2365 ++++++ .../language-combining-modifiers/index.html | 2195 ++++++ .../language-custom-functions/index.html | 2194 ++++++ .../language-function-counter/index.html | 2300 ++++++ .../language-function-cycle/index.html | 2325 ++++++ .../language-function-debug/index.html | 2199 ++++++ .../language-function-eval/index.html | 2319 ++++++ .../language-function-fetch/index.html | 2312 ++++++ .../index.html | 2371 ++++++ .../language-function-html-image/index.html | 2326 ++++++ .../language-function-html-options/index.html | 2386 ++++++ .../language-function-html-radios/index.html | 2369 ++++++ .../index.html | 2474 ++++++ .../index.html | 2464 ++++++ .../language-function-html-table/index.html | 2374 ++++++ .../language-function-mailto/index.html | 2333 ++++++ .../language-function-math/index.html | 2341 ++++++ .../language-function-textformat/index.html | 2427 ++++++ 5.0/designers/language-modifiers/index.html | 2323 ++++++ .../language-modifier-capitalize/index.html | 2298 ++++++ .../language-modifier-cat/index.html | 2284 ++++++ .../index.html | 2291 ++++++ .../index.html | 2261 ++++++ .../index.html | 2260 ++++++ .../language-modifier-count-words/index.html | 2256 ++++++ .../language-modifier-date-format/index.html | 2410 ++++++ .../language-modifier-default/index.html | 2295 ++++++ .../language-modifier-escape/index.html | 2341 ++++++ .../language-modifier-from-charset/index.html | 2256 ++++++ .../language-modifier-indent/index.html | 2323 ++++++ .../language-modifier-lower/index.html | 2256 ++++++ .../language-modifier-nl2br/index.html | 2258 ++++++ .../index.html | 2306 ++++++ .../language-modifier-replace/index.html | 2297 ++++++ .../language-modifier-spacify/index.html | 2294 ++++++ .../index.html | 2291 ++++++ .../language-modifier-strip-tags/index.html | 2295 ++++++ .../language-modifier-strip/index.html | 2264 ++++++ .../language-modifier-to-charset/index.html | 2256 ++++++ .../language-modifier-truncate/index.html | 2326 ++++++ .../language-modifier-unescape/index.html | 2306 ++++++ .../language-modifier-upper/index.html | 2255 ++++++ .../language-modifier-wordwrap/index.html | 2335 ++++++ 5.0/designers/language-variables/index.html | 2251 ++++++ .../language-assigned-variables/index.html | 2351 ++++++ .../language-config-variables/index.html | 2285 ++++++ .../language-variable-scopes/index.html | 2229 ++++++ .../language-variables-smarty/index.html | 2502 ++++++ 5.0/features/index.html | 2401 ++++++ 5.0/getting-started/index.html | 2379 ++++++ 5.0/img/favicon.ico | Bin 0 -> 7782 bytes 5.0/index.html | 2257 ++++++ 5.0/philosophy/index.html | 2301 ++++++ .../api-functions/add-extension/index.html | 2149 ++++++ .../api-add-plugins-dir/index.html | 2186 ++++++ .../api-functions/api-append/index.html | 2194 ++++++ .../api-functions/api-assign/index.html | 2216 ++++++ .../api-clear-all-assign/index.html | 2180 ++++++ .../api-clear-all-cache/index.html | 2180 ++++++ .../api-functions/api-clear-assign/index.html | 2175 ++++++ .../api-functions/api-clear-cache/index.html | 2203 ++++++ .../api-clear-compiled-tpl/index.html | 2183 ++++++ .../api-functions/api-clear-config/index.html | 2178 ++++++ .../api-compile-all-config/index.html | 2205 ++++++ .../api-compile-all-templates/index.html | 2211 ++++++ .../api-functions/api-config-load/index.html | 2188 ++++++ .../api-functions/api-create-data/index.html | 2193 ++++++ .../api-create-template/index.html | 2215 ++++++ .../api-disable-security/index.html | 2163 ++++++ .../api-functions/api-display/index.html | 2218 ++++++ .../api-enable-security/index.html | 2184 ++++++ .../api-functions/api-fetch/index.html | 2221 ++++++ .../api-get-config-dir/index.html | 2184 ++++++ .../api-get-config-vars/index.html | 2180 ++++++ .../api-get-plugins-dir/index.html | 2177 ++++++ .../api-get-registered-object/index.html | 2179 ++++++ .../api-get-template-vars/index.html | 2180 ++++++ .../api-functions/api-is-cached/index.html | 2227 ++++++ .../api-functions/api-load-filter/index.html | 2182 ++++++ .../api-mute-expected-errors/index.html | 2168 ++++++ .../api-register-cacheresource/index.html | 2181 ++++++ .../api-register-class/index.html | 2209 ++++++ .../index.html | 2235 ++++++ .../api-register-filter/index.html | 2184 ++++++ .../api-register-object/index.html | 2182 ++++++ .../api-register-plugin/index.html | 2238 ++++++ .../api-register-resource/index.html | 2185 ++++++ .../api-set-plugins-dir/index.html | 2190 ++++++ .../api-functions/api-test-install/index.html | 2168 ++++++ .../api-unregister-cacheresource/index.html | 2171 ++++++ .../api-unregister-filter/index.html | 2167 ++++++ .../api-unregister-object/index.html | 2164 ++++++ .../api-unregister-plugin/index.html | 2177 ++++++ .../api-unregister-resource/index.html | 2171 ++++++ .../variable-auto-literal/index.html | 2166 ++++++ .../variable-cache-dir/index.html | 2182 ++++++ .../variable-cache-id/index.html | 2163 ++++++ .../variable-cache-lifetime/index.html | 2188 ++++++ .../variable-cache-locking/index.html | 2162 ++++++ .../variable-cache-modified-check/index.html | 2163 ++++++ .../variable-caching-type/index.html | 2161 ++++++ .../api-variables/variable-caching/index.html | 2196 ++++++ .../variable-compile-dir/index.html | 2177 ++++++ .../variable-compile-id/index.html | 2188 ++++++ .../variable-compile-locking/index.html | 2159 ++++++ .../variable-compiler-class/index.html | 2159 ++++++ .../variable-config-booleanize/index.html | 2161 ++++++ .../variable-config-dir/index.html | 2173 ++++++ .../variable-config-overwrite/index.html | 2183 ++++++ .../variable-config-read-hidden/index.html | 2161 ++++++ .../variable-debug-template/index.html | 2160 ++++++ .../variable-debugging-ctrl/index.html | 2171 ++++++ .../variable-debugging/index.html | 2168 ++++++ .../index.html | 2200 ++++++ .../variable-default-config-type/index.html | 2160 ++++++ .../variable-default-modifiers/index.html | 2161 ++++++ .../variable-default-resource-type/index.html | 2160 ++++++ .../index.html | 2200 ++++++ .../variable-error-reporting/index.html | 2168 ++++++ .../variable-escape-html/index.html | 2172 ++++++ .../variable-force-cache/index.html | 2159 ++++++ .../variable-force-compile/index.html | 2162 ++++++ .../variable-left-delimiter/index.html | 2160 ++++++ .../variable-locking-timeout/index.html | 2159 ++++++ .../index.html | 2175 ++++++ .../variable-right-delimiter/index.html | 2160 ++++++ .../variable-smarty-debug-id/index.html | 2161 ++++++ .../variable-template-dir/index.html | 2177 ++++++ .../variable-use-include-path/index.html | 2149 ++++++ .../variable-use-sub-dirs/index.html | 2188 ++++++ 5.0/search/search_index.json | 1 + 5.0/sitemap.xml | 928 +++ 5.0/sitemap.xml.gz | Bin 0 -> 296 bytes versions.json | 2 +- 228 files changed, 425711 insertions(+), 1 deletion(-) create mode 100644 5.0/404.html create mode 100644 5.0/_config.yml create mode 100644 5.0/api/basics/index.html create mode 100644 5.0/api/caching/basics/index.html create mode 100644 5.0/api/caching/custom-storage-layers/index.html create mode 100644 5.0/api/caching/multiple-caches-per-template/index.html create mode 100644 5.0/api/configuring/index.html create mode 100644 5.0/api/extending/block-tags/index.html create mode 100644 5.0/api/extending/extensions/index.html create mode 100644 5.0/api/extending/introduction/index.html create mode 100644 5.0/api/extending/modifiers/index.html create mode 100644 5.0/api/extending/tags/index.html create mode 100644 5.0/api/filters/output-filters/index.html create mode 100644 5.0/api/filters/postfilters/index.html create mode 100644 5.0/api/filters/prefilters/index.html create mode 100644 5.0/api/inheritance/index.html create mode 100644 5.0/api/rendering/index.html create mode 100644 5.0/api/resources/index.html create mode 100644 5.0/api/security/index.html create mode 100644 5.0/api/variables/assigning/index.html create mode 100644 5.0/api/variables/config-files/index.html create mode 100644 5.0/api/variables/objects/index.html create mode 100644 5.0/api/variables/static-class-methods/index.html create mode 100644 5.0/api/variables/streams/index.html create mode 100644 5.0/appendixes/tips/index.html create mode 100644 5.0/appendixes/troubleshooting/index.html create mode 100644 5.0/assets/images/favicon.png create mode 100644 5.0/assets/javascripts/bundle.6df46069.min.js create mode 100644 5.0/assets/javascripts/bundle.6df46069.min.js.map create mode 100644 5.0/assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 5.0/assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 5.0/assets/javascripts/lunr/tinyseg.js create mode 100644 5.0/assets/javascripts/lunr/wordcut.js create mode 100644 5.0/assets/javascripts/workers/search.db81ec45.min.js create mode 100644 5.0/assets/javascripts/workers/search.db81ec45.min.js.map create mode 100644 5.0/assets/stylesheets/main.0d440cfe.min.css create mode 100644 5.0/assets/stylesheets/main.0d440cfe.min.css.map create mode 100644 5.0/assets/stylesheets/palette.2505c338.min.css create mode 100644 5.0/assets/stylesheets/palette.2505c338.min.css.map create mode 100644 5.0/designers/chapter-debugging-console/index.html create mode 100644 5.0/designers/config-files/index.html create mode 100644 5.0/designers/language-basic-syntax/index.html create mode 100644 5.0/designers/language-basic-syntax/language-escaping/index.html create mode 100644 5.0/designers/language-basic-syntax/language-syntax-attributes/index.html create mode 100644 5.0/designers/language-basic-syntax/language-syntax-comments/index.html create mode 100644 5.0/designers/language-basic-syntax/language-syntax-functions/index.html create mode 100644 5.0/designers/language-basic-syntax/language-syntax-operators/index.html create mode 100644 5.0/designers/language-basic-syntax/language-syntax-quotes/index.html create mode 100644 5.0/designers/language-basic-syntax/language-syntax-variables/index.html create mode 100644 5.0/designers/language-builtin-functions/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-append/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-assign/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-block/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-call/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-capture/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-config-load/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-debug/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-extends/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-for/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-foreach/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-function/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-if/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-include/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-insert/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-ldelim/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-literal/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-nocache/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-section/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-setfilter/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-strip/index.html create mode 100644 5.0/designers/language-builtin-functions/language-function-while/index.html create mode 100644 5.0/designers/language-combining-modifiers/index.html create mode 100644 5.0/designers/language-custom-functions/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-counter/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-cycle/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-debug/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-eval/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-fetch/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-html-checkboxes/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-html-image/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-html-options/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-html-radios/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-html-select-date/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-html-select-time/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-html-table/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-mailto/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-math/index.html create mode 100644 5.0/designers/language-custom-functions/language-function-textformat/index.html create mode 100644 5.0/designers/language-modifiers/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-capitalize/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-cat/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-count-characters/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-count-paragraphs/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-count-sentences/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-count-words/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-date-format/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-default/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-escape/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-from-charset/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-indent/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-lower/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-nl2br/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-regex-replace/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-replace/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-spacify/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-string-format/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-strip-tags/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-strip/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-to-charset/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-truncate/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-unescape/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-upper/index.html create mode 100644 5.0/designers/language-modifiers/language-modifier-wordwrap/index.html create mode 100644 5.0/designers/language-variables/index.html create mode 100644 5.0/designers/language-variables/language-assigned-variables/index.html create mode 100644 5.0/designers/language-variables/language-config-variables/index.html create mode 100644 5.0/designers/language-variables/language-variable-scopes/index.html create mode 100644 5.0/designers/language-variables/language-variables-smarty/index.html create mode 100644 5.0/features/index.html create mode 100644 5.0/getting-started/index.html create mode 100644 5.0/img/favicon.ico create mode 100644 5.0/index.html create mode 100644 5.0/philosophy/index.html create mode 100644 5.0/programmers/api-functions/add-extension/index.html create mode 100644 5.0/programmers/api-functions/api-add-plugins-dir/index.html create mode 100644 5.0/programmers/api-functions/api-append/index.html create mode 100644 5.0/programmers/api-functions/api-assign/index.html create mode 100644 5.0/programmers/api-functions/api-clear-all-assign/index.html create mode 100644 5.0/programmers/api-functions/api-clear-all-cache/index.html create mode 100644 5.0/programmers/api-functions/api-clear-assign/index.html create mode 100644 5.0/programmers/api-functions/api-clear-cache/index.html create mode 100644 5.0/programmers/api-functions/api-clear-compiled-tpl/index.html create mode 100644 5.0/programmers/api-functions/api-clear-config/index.html create mode 100644 5.0/programmers/api-functions/api-compile-all-config/index.html create mode 100644 5.0/programmers/api-functions/api-compile-all-templates/index.html create mode 100644 5.0/programmers/api-functions/api-config-load/index.html create mode 100644 5.0/programmers/api-functions/api-create-data/index.html create mode 100644 5.0/programmers/api-functions/api-create-template/index.html create mode 100644 5.0/programmers/api-functions/api-disable-security/index.html create mode 100644 5.0/programmers/api-functions/api-display/index.html create mode 100644 5.0/programmers/api-functions/api-enable-security/index.html create mode 100644 5.0/programmers/api-functions/api-fetch/index.html create mode 100644 5.0/programmers/api-functions/api-get-config-dir/index.html create mode 100644 5.0/programmers/api-functions/api-get-config-vars/index.html create mode 100644 5.0/programmers/api-functions/api-get-plugins-dir/index.html create mode 100644 5.0/programmers/api-functions/api-get-registered-object/index.html create mode 100644 5.0/programmers/api-functions/api-get-template-vars/index.html create mode 100644 5.0/programmers/api-functions/api-is-cached/index.html create mode 100644 5.0/programmers/api-functions/api-load-filter/index.html create mode 100644 5.0/programmers/api-functions/api-mute-expected-errors/index.html create mode 100644 5.0/programmers/api-functions/api-register-cacheresource/index.html create mode 100644 5.0/programmers/api-functions/api-register-class/index.html create mode 100644 5.0/programmers/api-functions/api-register-default-plugin-handler/index.html create mode 100644 5.0/programmers/api-functions/api-register-filter/index.html create mode 100644 5.0/programmers/api-functions/api-register-object/index.html create mode 100644 5.0/programmers/api-functions/api-register-plugin/index.html create mode 100644 5.0/programmers/api-functions/api-register-resource/index.html create mode 100644 5.0/programmers/api-functions/api-set-plugins-dir/index.html create mode 100644 5.0/programmers/api-functions/api-test-install/index.html create mode 100644 5.0/programmers/api-functions/api-unregister-cacheresource/index.html create mode 100644 5.0/programmers/api-functions/api-unregister-filter/index.html create mode 100644 5.0/programmers/api-functions/api-unregister-object/index.html create mode 100644 5.0/programmers/api-functions/api-unregister-plugin/index.html create mode 100644 5.0/programmers/api-functions/api-unregister-resource/index.html create mode 100644 5.0/programmers/api-variables/variable-auto-literal/index.html create mode 100644 5.0/programmers/api-variables/variable-cache-dir/index.html create mode 100644 5.0/programmers/api-variables/variable-cache-id/index.html create mode 100644 5.0/programmers/api-variables/variable-cache-lifetime/index.html create mode 100644 5.0/programmers/api-variables/variable-cache-locking/index.html create mode 100644 5.0/programmers/api-variables/variable-cache-modified-check/index.html create mode 100644 5.0/programmers/api-variables/variable-caching-type/index.html create mode 100644 5.0/programmers/api-variables/variable-caching/index.html create mode 100644 5.0/programmers/api-variables/variable-compile-dir/index.html create mode 100644 5.0/programmers/api-variables/variable-compile-id/index.html create mode 100644 5.0/programmers/api-variables/variable-compile-locking/index.html create mode 100644 5.0/programmers/api-variables/variable-compiler-class/index.html create mode 100644 5.0/programmers/api-variables/variable-config-booleanize/index.html create mode 100644 5.0/programmers/api-variables/variable-config-dir/index.html create mode 100644 5.0/programmers/api-variables/variable-config-overwrite/index.html create mode 100644 5.0/programmers/api-variables/variable-config-read-hidden/index.html create mode 100644 5.0/programmers/api-variables/variable-debug-template/index.html create mode 100644 5.0/programmers/api-variables/variable-debugging-ctrl/index.html create mode 100644 5.0/programmers/api-variables/variable-debugging/index.html create mode 100644 5.0/programmers/api-variables/variable-default-config-handler-func/index.html create mode 100644 5.0/programmers/api-variables/variable-default-config-type/index.html create mode 100644 5.0/programmers/api-variables/variable-default-modifiers/index.html create mode 100644 5.0/programmers/api-variables/variable-default-resource-type/index.html create mode 100644 5.0/programmers/api-variables/variable-default-template-handler-func/index.html create mode 100644 5.0/programmers/api-variables/variable-error-reporting/index.html create mode 100644 5.0/programmers/api-variables/variable-escape-html/index.html create mode 100644 5.0/programmers/api-variables/variable-force-cache/index.html create mode 100644 5.0/programmers/api-variables/variable-force-compile/index.html create mode 100644 5.0/programmers/api-variables/variable-left-delimiter/index.html create mode 100644 5.0/programmers/api-variables/variable-locking-timeout/index.html create mode 100644 5.0/programmers/api-variables/variable-merge-compiled-includes/index.html create mode 100644 5.0/programmers/api-variables/variable-right-delimiter/index.html create mode 100644 5.0/programmers/api-variables/variable-smarty-debug-id/index.html create mode 100644 5.0/programmers/api-variables/variable-template-dir/index.html create mode 100644 5.0/programmers/api-variables/variable-use-include-path/index.html create mode 100644 5.0/programmers/api-variables/variable-use-sub-dirs/index.html create mode 100644 5.0/search/search_index.json create mode 100644 5.0/sitemap.xml create mode 100644 5.0/sitemap.xml.gz diff --git a/5.0/404.html b/5.0/404.html new file mode 100644 index 000000000..42fcaab34 --- /dev/null +++ b/5.0/404.html @@ -0,0 +1,2140 @@ + + + + + + + + + + + + + + + + + + Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/_config.yml b/5.0/_config.yml new file mode 100644 index 000000000..2f7efbeab --- /dev/null +++ b/5.0/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-minimal \ No newline at end of file diff --git a/5.0/api/basics/index.html b/5.0/api/basics/index.html new file mode 100644 index 000000000..633de3d5f --- /dev/null +++ b/5.0/api/basics/index.html @@ -0,0 +1,2329 @@ + + + + + + + + + + + + + + + + + + + + + + Basics - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Basics

+

Installation

+

For installation instructies, please see the getting started section.

+

Rendering a template

+

Here's how you create an instance of Smarty in your PHP scripts: +

<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+

+

You now have a Smarty object that you can use to render templates.

+
<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->display('string:The current smarty version is: {$smarty.version}.');
+// or 
+echo $smarty->fetch('string:The current smarty version is: {$smarty.version}.');
+
+

Using file-based templates

+

You probably want to manage your templates as files. Create a subdirectory called 'templates' and +then configure Smarty to use that:

+
<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->setTemplateDir(__DIR__ . '/templates');
+
+

Say you have a template file called 'version.tpl', stored in the 'templates' directory like this: +

<h1>Hi</h1>
+The current smarty version is: {$smarty.version|escape}.
+

+

You can now render this, using: +

<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->setTemplateDir(__DIR__ . '/templates');
+$smarty->display('version.tpl');
+

+

Assigning variables

+

Templates start to become really useful once you add variables to the mix.

+

Create a template called 'footer.tpl' in the 'templates' directory like this: +

<small>Copyright {$companyName|escape}</small>
+

+

Now assign a value to the 'companyName' variable and render your template like this:

+
<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->setTemplateDir(__DIR__ . '/templates');
+$smarty->assign('companyName', 'AC & ME Corp.');
+$smarty->display('footer.tpl');
+
+

Run this, and you will see:

+
<small>Copyright AC &amp; ME Corp.</small>
+
+

Note how the escape modifier +translated the & character into the proper HTML syntax &amp;.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/caching/basics/index.html b/5.0/api/caching/basics/index.html new file mode 100644 index 000000000..22dbac1f9 --- /dev/null +++ b/5.0/api/caching/basics/index.html @@ -0,0 +1,2443 @@ + + + + + + + + + + + + + + + + + + + + + + Basics - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Caching

+

Caching is used to speed up the rendering of a template by saving and re-using the output.

+

If a cached version of the call is available, that is displayed instead of +regenerating the output. Caching can speed things up tremendously, +especially templates with longer computation times.

+

Since templates can include or extend other templates, one +cache file could conceivably be made up of several template files, +config files, etc.

+
+

Note

+

Since templates are dynamic, it is important to be careful what you are +caching and for how long. For instance, if you are displaying the front +page of your website that does not change its content very often, it +might work well to cache this page for an hour or more. On the other +hand, if you are displaying a page with a timetable containing new +information by the minute, it would not make sense to cache this page.

+
+

Setting Up Caching

+

The first thing to do is enable caching by calling Smarty::setCaching() with either +\Smarty\Smarty::CACHING_LIFETIME_CURRENT or \Smarty\Smarty::CACHING_LIFETIME_SAVED. +Or with \Smarty\Smarty::CACHING_OFF to disable caching again.

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// enable caching, using the current lifetime (see below)
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+// enable caching, using the lifetime set when the cache was saved (see below)
+$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
+
+// disable caching
+$smarty->setCaching(Smarty::CACHING_OFF);
+
+$smarty->display('index.tpl');
+
+

With caching enabled, the function call to $smarty->display('index.tpl') will +render the template as usual, but also saves a copy of its output. On the +next call to $smarty->display('index.tpl'), the cached copy will be used +instead of rendering the template again.

+
+

Note

+

By default, Smarty saved its caches as files in a dir called cache relative to the current +directory. The default directory can be changed using $smarty->setCacheDir('/some/cache/dir'); +The files are named similar +to the template name. Although they end in the .php extension, they +are not intended to be directly executable. Do not edit these files!

+
+

Cache lifetime

+

Each cached page has a limited lifetime. The default value is 3600 +seconds, or one hour. After that time expires, the cache is regenerated.

+

You can change the lifetime as follows: +

<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); 
+// or $smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
+
+// set the cache_lifetime to 5 minutes
+$smarty->setCacheLifetime(5 * 60);
+

+

Setting caching to a value of \Smarty\Smarty::CACHING_LIFETIME_CURRENT tells Smarty to use +the current lifetime to determine if the cache has expired.

+

A value of \Smarty\Smarty::CACHING\_LIFETIME\_SAVED tells Smarty to use the lifetime value at the time the +cache was generated. This way you can set the just before rendering a template to have granular control over +when that particular cache expires.

+

An example: +

<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// retain current cache lifetime for each specific display call
+$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
+
+// set the cache_lifetime for index.tpl to 5 minutes
+$smarty->setCacheLifetime(300);
+$smarty->display('index.tpl');
+
+// set the cache_lifetime for home.tpl to 1 hour
+$smarty->setCacheLifetime(3600);
+$smarty->display('home.tpl');
+
+// NOTE: the following $cache_lifetime setting will not work when $caching
+// is set to Smarty::CACHING_LIFETIME_SAVED.
+// The cache lifetime for home.tpl has already been set
+// to 1 hour, and will no longer respect the value of $cache_lifetime.
+// The home.tpl cache will still expire after 1 hour.
+$smarty->setCacheLifetime(30); // 30 seconds
+$smarty->display('home.tpl');
+

+

Compile check

+

By default, every template file and config file that is involved with the cache file +is checked for modification. If any of the files have been modified +since the cache was generated, the cache is immediately regenerated.

+

This is a computational overhead, so for optimum performance, disable this on a production environment:

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+$smarty->setCompileCheck(Smarty::COMPILECHECK_OFF);
+
+$smarty->display('index.tpl');
+
+

Checking if a template is cached

+

Smarty's `isCached() method can be used to test if a +template has a valid cache or not. If you have a cached template that +requires something like a database fetch, you can use this to skip that +process.

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+if (!$smarty->isCached('index.tpl')) {
+    // No cache available, do variable assignments here.
+    $smarty->assign('data', do_expensive_database_calls());
+}
+
+$smarty->display('index.tpl');
+
+

Nocache-blocks

+

You can keep parts of a page dynamic (disable caching) with the +{nocache}{/nocache} block function, +or by using the nocache parameter for most template functions.

+

Let's say the whole page can be cached except for a banner that is +displayed down the side of the page. By using a {nocache}{/nocache} +block for the banner, you can +keep this element dynamic within the cached content.

+

Clearing the cache

+

You can clear all the cache files with Smarty's clearAllCache() method, or individual cache +files with the clearCache() method.

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+// clear only cache for index.tpl
+$smarty->clearCache('index.tpl');
+
+// clear out all cache files
+$smarty->clearAllCache();
+
+// clear out all cache files older than one hour
+$smarty->clearAllCache(3600);
+
+// or, clear all expired caches
+$smarty->clearAllCache(Smarty::CLEAR_EXPIRED);
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/caching/custom-storage-layers/index.html b/5.0/api/caching/custom-storage-layers/index.html new file mode 100644 index 000000000..e7cefa8e1 --- /dev/null +++ b/5.0/api/caching/custom-storage-layers/index.html @@ -0,0 +1,2205 @@ + + + + + + + + + + + + + + + + + + + + + + Custom cache storage layers - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Custom cache storage layers

+

As an alternative to using the default file-based caching mechanism, you +can specify a custom cache implementation that will be used to read, +write and clear cached files.

+

With a custom cache implementation you could replace the slow filesystem by a +faster storage engine, centralize the cache to be accessible to multiple +servers.

+

Smarty requires implementations to extend \Smarty\Cacheresource\Base, but encourages you to either extend +\Smarty\Cacheresource\Custom or \Smarty\Cacheresource\KeyValueStore.

+
    +
  • \Smarty\Cacheresource\Custom is a simple API directing all read, write, +clear calls to your implementation. This API allows you to store +wherever and however you deem fit.
  • +
  • \Smarty\Cacheresource\KeyValueStore allows you to turn any +KeyValue-Store (like APC or Memcache) into a full-featured +CacheResource implementation. Everything around deep +cache-groups like "a|b|c" is being handled for you in a way that +guarantees clearing the cache-group "a" will clear all nested groups +as well - even though KeyValue-Stores don't allow this kind of +hierarchy by nature.
  • +
+

Custom CacheResources must be registered on +runtime with Smarty\Smarty::setCacheResource():

+
<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->setCacheResource(new My_CacheResource_Mysql());
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/caching/multiple-caches-per-template/index.html b/5.0/api/caching/multiple-caches-per-template/index.html new file mode 100644 index 000000000..b4cdaa0e6 --- /dev/null +++ b/5.0/api/caching/multiple-caches-per-template/index.html @@ -0,0 +1,2370 @@ + + + + + + + + + + + + + + + + + + + + + + Multiple caches per template - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Multiple caches per template

+

Introduction

+

You can have multiple cache files for a single call to +display() or fetch().

+

Let's say that +a call to $smarty->display('index.tpl') may have several different output +contents depending on some condition, and you want separate caches for +each one. You can do this by passing a $cache_id as the second +parameter to the function call:

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+$my_cache_id = (int) $_GET['article_id'];
+
+$smarty->display('index.tpl', $my_cache_id);
+
+

Above, we are passing the variable $my_cache_id to +display() as the $cache_id. For each unique value of +$my_cache_id, a separate cache will be generated for index.tpl. In +this example, article_id was passed in the URL and is used as the +$cache_id.

+
+

Note

+

Be very cautious when passing values from a client (web browser) into +Smarty or any PHP application. Although the above example of using the +article_id from the URL looks handy, it could have bad consequences. +The $cache_id is used to create a directory on the file system, so +if the user decided to write a script that sends random article_id's at a rapid pace, +this could possibly cause problems at the server level. +Be sure to sanitize any data passed in before using it. In this example, you might want to check if +the article_id is a valid ID in the database.

+
+

Be sure to pass the same $cache_id as the second parameter to +isCached() and clearCache().

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+$my_cache_id = (int) $_GET['article_id'];
+
+if (!$smarty->isCached('index.tpl', $my_cache_id)) {
+    // ...
+}
+
+$smarty->display('index.tpl', $my_cache_id);
+
+

Clearing specific caches

+

You can clear all caches for a particular $cache_id by passing NULL as +the first parameter to clearCache().

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+// clear all caches with "sports" as the $cache_id
+$smarty->clearCache(null, 'sports');
+
+$smarty->display('index.tpl', 'sports');
+
+

In this manner, you can "group" your caches together by giving them the +same $cache_id.

+

Advanced cache grouping

+

You can do more elaborate grouping by setting up $cache_id groups. +This is accomplished by separating each sub-group with a vertical bar +| in the $cache_id value. You can have as many sub-groups as you +like.

+
    +
  • +

    You can think of cache groups like a directory hierarchy. For + instance, a cache group of 'a|b|c' could be thought of as the + directory structure '/a/b/c/'.

    +
  • +
  • +

    clearCache(null, 'a|b|c') would be like removing the files + '/a/b/c/*'. clearCache(null, 'a|b') would be like removing the + files '/a/b/*'.

    +
  • +
  • +

    If you specify a template name such as + clearCache('foo.tpl', 'a|b|c') then Smarty will attempt to remove + '/a/b/c/foo.tpl'.

    +
  • +
  • +

    You CANNOT remove a specified template name under multiple cache + groups such as '/a/b/*/foo.tpl', the cache grouping works + left-to-right ONLY. You will need to group your templates under a + single cache group hierarchy to be able to clear them as a group.

    +
  • +
+

Cache grouping should not be confused with your template directory +hierarchy, the cache grouping has no knowledge of how your templates are +structured. So for example, if you have a template structure like +themes/blue/index.tpl and you want to be able to clear all the cache +files for the "blue" theme, you will need to create a cache group +structure that mimics your template file structure, such as +display('themes/blue/index.tpl', 'themes|blue'), then clear them with +clearCache(null, 'themes|blue').

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+// clear all caches with 'sports|basketball' as the first two cache_id groups
+$smarty->clearCache(null, 'sports|basketball');
+
+// clear all caches with "sports" as the first cache_id group. This would
+// include "sports|basketball", or "sports|(anything)|(anything)|(anything)|..."
+$smarty->clearCache(null, 'sports');
+
+// clear the foo.tpl cache file with "sports|basketball" as the cache_id
+$smarty->clearCache('foo.tpl', 'sports|basketball');
+
+$smarty->display('index.tpl', 'sports|basketball');
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/configuring/index.html b/5.0/api/configuring/index.html new file mode 100644 index 000000000..3ebd45482 --- /dev/null +++ b/5.0/api/configuring/index.html @@ -0,0 +1,2431 @@ + + + + + + + + + + + + + + + + + + + + + + Configuring Smarty - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + +

Configuring Smarty

+

Setting the template path

+

By default, Smarty looks for templates to render in ./templates.

+

You can change this, or even use multiple paths to use when looking for templates.

+

If you need to change this, you can use setTemplateDir() or addTemplateDir(). +Use getTemplateDir() to retrieve the configured paths.

+
<?php
+
+ // set a single directory where the config files are stored
+$smarty->setTemplateDir('./config');
+
+// set multiple directories where config files are stored
+$smarty->setTemplateDir(['./config', './config_2', './config_3']);
+
+// add directory where config files are stored to the current list of dirs
+$smarty->addTemplateDir('./config_1');
+
+// add multiple directories to the current list of dirs
+$smarty->addTemplateDir([
+    './config_2',
+    './config_3',
+]);
+
+// chaining of method calls
+$smarty->setTemplateDir('./config')
+       ->addTemplateDir('./config_1')
+       ->addTemplateDir('./config_2');
+
+// get all directories where config files are stored
+$template_dirs = $smarty->getTemplateDir();
+var_dump($template_dirs); // array
+
+// get directory identified by key
+$template_dir = $smarty->getTemplateDir(0);
+var_dump($template_dir); // string
+
+

Setting the path for compiled templates

+

Smarty compiles templates to native PHP to be as fast as possible. +The default path where these PHP-files are stored is ./templates_c.

+

If you need to change this, you can use setCompileDir(). +Use getCompileDir() to retrieve the configured path.

+
<?php
+
+// set another path to store compiled templates
+$smarty->setCompileDir('/data/compiled_templates');
+
+// get directory where compiled templates are stored
+$compileDir = $smarty->getCompileDir();
+
+

Setting the config path

+

Smarty can load data from config files. +By default, Smarty loads the config files from ./configs.

+

You can change this, or even use multiple paths to use when looking for config files.

+

If you need to change this, you can use setConfigDir() or addConfigDir(). +Use getConfigDir() to retrieve the configured paths.

+
<?php
+
+ // set a single directory where the config files are stored
+$smarty->setConfigDir('./config');
+
+// set multiple directories where config files are stored
+$smarty->setConfigDir(['./config', './config_2', './config_3']);
+
+// add directory where config files are stored to the current list of dirs
+$smarty->addConfigDir('./config_1');
+
+// add multiple directories to the current list of dirs
+$smarty->addConfigDir([
+    './config_2',
+    './config_3',
+]);
+
+// chaining of method calls
+$smarty->setConfigDir('./config')
+       ->addConfigDir('./config_1', 'one')
+       ->addConfigDir('./config_2', 'two');
+
+// get all directories where config files are stored
+$config_dirs = $smarty->getConfigDir();
+var_dump($config_dirs); // array
+
+// get directory identified by key
+$config_dir = $smarty->getConfigDir(0);
+var_dump($config_dir); // string
+
+

Setting the path for caches

+

Even though Smarty runs templates as native PHP for maximum speed, it still needs to +execute the PHP code on each call. If your data doesn't change all that often, you +may be able to speed up your application even more by using output caching.

+

Output caching can be a tricky subject, so we devoted an entire section to caching. +Be sure to read that if you want to use caching.

+

By default, Smarty stores caches to PHP-files in a subdirectory named ./cache.

+

If you need to change this, you can use setCacheDir(). +Use getCacheDir() to retrieve the configured path.

+
<?php
+
+// set another path to store caches
+$smarty->setCacheDir('/data/caches');
+
+// get directory where cached templates are stored
+$cacheDir = $smarty->getCacheDir();
+
+

Disabling compile check

+

By default, Smarty tests to see if the +current template has changed since the last time +it was compiled. If it has changed, it recompiles that template.

+

Once an application is put into production, this compile-check step +is usually no longer needed and the extra checks can significantly hurt performance. +Be sure to disable compile checking on production for maximum performance. +

<?php
+$smarty->setCompileCheck(\Smarty\Smarty::COMPILECHECK_OFF);
+

+

If caching is enabled and compile-check is +enabled, then the cache files will get regenerated if an involved +template file or config file was updated.

+

Charset encoding

+

There are a variety of encodings for textual data, ISO-8859-1 (Latin1) +and UTF-8 being the most popular. Unless you change \Smarty\Smarty::$_CHARSET, +Smarty recognizes UTF-8 as the internal charset.

+
+

Note

+

ISO-8859-1 has been PHP\'s default internal charset since the +beginning. Unicode has been evolving since 1991. Since then, it has +become the one charset to conquer them all, as it is capable of +encoding most of the known characters even across different character +systems (latin, cyrillic, japanese, ...). UTF-8 is unicode\'s most +used encoding, as it allows referencing the thousands of character +with the smallest size overhead possible.

+

Since unicode and UTF-8 are very widespread nowadays, their use is +strongly encouraged.

+

Note

+

Smarty\'s internals and core plugins are truly UTF-8 compatible since +Smarty 3.1.

+
+
<?php
+
+// use japanese character encoding
+mb_internal_charset('EUC-JP');
+
+\Smarty\Smarty::$_CHARSET = 'EUC-JP';
+$smarty = new \Smarty\Smarty();
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/extending/block-tags/index.html b/5.0/api/extending/block-tags/index.html new file mode 100644 index 000000000..a678e608b --- /dev/null +++ b/5.0/api/extending/block-tags/index.html @@ -0,0 +1,2233 @@ + + + + + + + + + + + + + + + + + + + + + + Custom block tags - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Custom block tags

+

Block tags are tags of the form: {func} .. {/func}. In other +words, they enclose a template block and operate on the contents of this +block.

+

Block functions take precedence over normal tags of the same name, that is, you +cannot have both custom tag {func} and block tag {func}..{/func}.

+
    +
  • +

    By default, your function implementation is called twice by Smarty: + once for the opening tag, and once for the closing tag. (See + $repeat below on how to change this.)

    +
  • +
  • +

    Only the opening tag of the block has attributes. All attributes are contained in the $params + variable as an associative array. The opening tag attributes are + also accessible to your function when processing the closing tag.

    +
  • +
  • +

    The value of the $content variable depends on whether your + function is called for the opening or closing tag. In case of the + opening tag, it will be NULL, and in case of the closing tag it will + be the contents of the template block. Note that the template block + will have already been processed by Smarty, so all you will receive + is the template output, not the template source.

    +
  • +
  • +

    The parameter $repeat is passed by reference to the function + implementation and provides a possibility for it to control how many + times the block is displayed. By default $repeat is TRUE at the + first call of the block function (the opening tag) and FALSE on all + subsequent calls to the block function (the block's closing tag). + Each time the function implementation returns with $repeat being + TRUE, the contents between {func}...{/func} are evaluated and the + function implementation is called again with the new block contents + in the parameter $content.

    +
  • +
+

Example: +

<?php
+
+function smarty_block_translate($params, $content, \Smarty\Template $template, &$repeat) {
+    // only output on the closing tag
+    if (!$repeat){
+        if (isset($content)) {
+            $lang = $params['lang'];
+            // do some intelligent translation thing here with $content
+            return $translation;
+        }
+    }
+}
+
+$smarty->registerPlugin(Smarty\Smarty::PLUGIN_BLOCK, 'translate', 'smarty_block_translate');
+

+

This can now be used in your templates as follows:

+
{translate lang='nl'}
+    Quia omnis nulla omnis iusto est id et.
+{/translate}
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/extending/extensions/index.html b/5.0/api/extending/extensions/index.html new file mode 100644 index 000000000..a73478b33 --- /dev/null +++ b/5.0/api/extending/extensions/index.html @@ -0,0 +1,2230 @@ + + + + + + + + + + + + + + + + + + + + + + Creating an extension - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Creating an extension

+

In order to organize your custom tags and modifiers, you can create an Extension. +In fact, most of Smarty itself is organized into two extensions:

+
    +
  • the core extension, which provides the basic language tags such as {if}, {for} and {assign}.
  • +
  • the default extension, which provides all default modifiers such as |escape, |nl2br and |number_format + and tags such as {html_image}, {mailto} and {textformat} that are enabled by default, but not necessarily universal.
  • +
+
+

Note

+

There is also the 'BCPluginsAdapter' extension, which does not add any new functionality, but +wraps calls to deprecated methods such as Smarty\Smarty::addPluginsDir() and Smarty\Smarty::loadFilter().

+
+

In order to write your own custom extension, you must write a class that implements Smarty\Extension\ExtensionInterface. +However, it is usually easier to extend Smarty\Extension\Base which provides empty implementation for each of the methods +required by Smarty\Extension\ExtensionInterface. This allows you to only override the method(s) you need.

+

Example: +

<?php
+
+use Smarty\Extension\Base;
+
+class MyExtension extends Base {
+
+    public function getModifierCompiler(string $modifier): ?\Smarty\Compile\Modifier\ModifierCompilerInterface {
+
+        switch ($modifier) {
+            case 'array_escape': return new MyArrayEscapeModifierCompiler();
+            case 'array_unescape': return new MyArrayUnescapeModifierCompiler();
+        }
+
+        return null;
+    }
+}
+
+Another example, that would allow you to use any valid PHP callable as a modifier in your templates:

+
<?php
+
+use Smarty\Extension\Base;
+
+class MyCallablePassThroughExtension extends Base {
+
+    public function getModifierCallback(string $modifierName) {
+
+        if (is_callable($modifierName)) {
+            return $modifierName;
+        }
+
+        return null;
+    }
+}
+
+

Writing an extension allows you to add a group of tags, block tags and modifiers to the Smarty language. +It also allows you to register pre-, post- and output-filters in a structured way. +The files in src/Extension/ in the smarty/smarty dir should give you all the information you need to start +writing your own extension.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/extending/introduction/index.html b/5.0/api/extending/introduction/index.html new file mode 100644 index 000000000..fc0e2c218 --- /dev/null +++ b/5.0/api/extending/introduction/index.html @@ -0,0 +1,2181 @@ + + + + + + + + + + + + + + + + + + + + + + Introduction - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Extending Smarty

+

By default, Smarty is already very complete and powerful. However, you can unlock its real potential by +extending Smarty.

+

There are various ways to extend Smarty for it to suit your needs. You can create custom +tags, block tags and modifiers by registering a method as a plugin.

+

If this becomes too messy, you can group your custom tags, modifiers, and more into an Extension.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/extending/modifiers/index.html b/5.0/api/extending/modifiers/index.html new file mode 100644 index 000000000..fc88da26d --- /dev/null +++ b/5.0/api/extending/modifiers/index.html @@ -0,0 +1,2195 @@ + + + + + + + + + + + + + + + + + + + + + + Custom modifiers - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Custom modifiers

+

Modifiers are little functions that are applied +to a variable in the template before it is displayed or used in some +other context. Smarty comes with a bunch of modifiers, but you can +easily add your own.

+

In order to do so, you must write a function that accepts as its first parameter the value on which the +modifier is to operate. The rest of the parameters are optional, depending on what kind of operation is to be performed.

+

The modifier has to return the result of its processing.

+

For example: +

<?php
+
+function smarty_modifier_substr($string, $offset, $length) {
+    return substr($string, $offset, $length);
+}
+
+$smarty->registerPlugin(Smarty\Smarty::PLUGIN_MODIFIER, 'substr', 'smarty_modifier_substr');
+

+

You can now use this in your templates as follows: +

{$applicationName|substr:0:20}
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/extending/tags/index.html b/5.0/api/extending/tags/index.html new file mode 100644 index 000000000..52ca06c5a --- /dev/null +++ b/5.0/api/extending/tags/index.html @@ -0,0 +1,2298 @@ + + + + + + + + + + + + + + + + + + + + + + Custom tags - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Custom tags

+

You can add your own tags to the Smarty language.

+

Runtime tags

+

Usually, you'll add a runtime tag. Adding a runtime tag requires you to provide a callback function that accepts +two parameters:

+
    +
  • $params: all attributes from the template as an associative array.
  • +
  • $template: a Smarty\Template object representing the template where tag was used.
  • +
+

The output (return value) of the function will be substituted in place +of the tag in the template.

+

If the function needs to assign some variables to the template or use +some other Smarty-provided functionality, it can use the supplied +$template object to do so.

+
<?php
+
+function smarty_tag_eightball($params, \Smarty\Template $template): string {
+    $answers = [
+        'Yes',
+        'No',
+        'No way',
+        'Outlook not so good',
+        'Ask again soon',
+        'Maybe in your reality'
+    ];
+
+    $result = array_rand($answers);
+    return $answers[$result];
+}
+
+$smarty->registerPlugin(Smarty\Smarty::PLUGIN_FUNCTION, 'eightball', 'smarty_tag_eightball');
+
+

Which can now be used in the template as:

+
Question: Will we ever have time travel?
+Answer: {eightball}.
+
+

Compiler tags

+

Compiler tags are called only during compilation of the template.

+

They are useful for injecting PHP code or time-sensitive static content +into the template. If there is both a compiler function and a runtime tag registered under the same name, +the compiler function has precedence.

+

The compiler function is passed two parameters: the params array which +contains precompiled strings for the attribute values and the Smarty +object. It's supposed to return the code to be injected into the +compiled template including the surrounding PHP tags.

+

Example: +

<?php
+
+function smarty_compiler_tplheader($params, Smarty $smarty) {
+    return "<?php\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';\n?>";
+}
+
+$smarty->registerPlugin(Smarty\Smarty::PLUGIN_COMPILER, 'tplheader', 'smarty_compiler_tplheader');
+

+

This function can be called from the template as:

+
{* this function gets executed at compile time only *}
+{tplheader}
+
+

The resulting PHP code in the compiled template would be something like +this:

+
<?php
+echo 'index.tpl compiled at 2023-02-20 20:02';
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/filters/output-filters/index.html b/5.0/api/filters/output-filters/index.html new file mode 100644 index 000000000..7f6b7c922 --- /dev/null +++ b/5.0/api/filters/output-filters/index.html @@ -0,0 +1,2205 @@ + + + + + + + + + + + + + + + + + + + + + + Output filters - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Output filters

+

When a template is rendered, its output can be sent through one or more +output filters.

+
+

Note +This differs from prefilters and +postfilters because, pre- and postfilters +operate on compiled templates before they are saved to the disk, whereas +output filters operate on the template output when it is executed.

+
+

Smarty will pass the template output as the first argument, and expect the function +to return the result of the processing.

+

Output filters can be either added as part of an Extension or +registered as shown below.

+

This will provide a rudimentary protection against spambots: +

<?php
+
+function protect_email($tpl_output, \Smarty\Template\ $template)
+{
+    return preg_replace(
+        '!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
+        '$1%40$2', 
+        $tpl_output
+    );
+}
+
+// register the outputfilter
+$smarty->registerFilter("output", "protect_email");
+$smarty->display("index.tpl');
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/filters/postfilters/index.html b/5.0/api/filters/postfilters/index.html new file mode 100644 index 000000000..1c7a7929e --- /dev/null +++ b/5.0/api/filters/postfilters/index.html @@ -0,0 +1,2199 @@ + + + + + + + + + + + + + + + + + + + + + + Postfilters - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Postfilters

+

Template postfilters are PHP functions that your templates are ran +through after they are compiled.

+

Smarty will +pass the compiled template code as the first argument, and expect the +function to return the result of the processing, which must also be valid PHP code.

+

Prefilters can be either added as part of an Extension or +registered as shown below.

+
<?php
+
+function add_header_comment($tpl_source, \Smarty\Template\ $template)
+{
+    return "<?php echo \"<!-- Created by Smarty! -->\n\"; ?>\n".$tpl_source;
+}
+
+// register the postfilter
+$smarty->registerFilter('post', 'add_header_comment');
+$smarty->display('index.tpl');
+
+

The postfilter above will make the compiled Smarty template index.tpl +look like:

+
<!-- Created by Smarty! -->
+{* rest of template content... *}
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/filters/prefilters/index.html b/5.0/api/filters/prefilters/index.html new file mode 100644 index 000000000..2ee3f21c3 --- /dev/null +++ b/5.0/api/filters/prefilters/index.html @@ -0,0 +1,2196 @@ + + + + + + + + + + + + + + + + + + + + + + Prefilters - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Prefilters

+

Template prefilters are PHP functions that your templates are ran +through before they are compiled. This is good for preprocessing your +templates to remove unwanted comments, keeping an eye on what people are +putting in their templates, etc.

+

Smarty will pass the template source code as the first argument, and +expect the function to return the resulting template source code.

+

Prefilters can be either added as part of an Extension or +registered as shown below.

+

This will remove all the html comments in the template source: +

<?php
+
+function remove_dw_comments($tpl_source, \Smarty\Template\ $template)
+{
+    return preg_replace("/<!--#.*-->/U",'',$tpl_source);
+}
+
+// register the prefilter
+$smarty->registerFilter('pre', 'remove_dw_comments');
+$smarty->display('index.tpl');
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/inheritance/index.html b/5.0/api/inheritance/index.html new file mode 100644 index 000000000..0eaa563a2 --- /dev/null +++ b/5.0/api/inheritance/index.html @@ -0,0 +1,2351 @@ + + + + + + + + + + + + + + + + + + + + + + Template inheritance - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Template Inheritance

+

Inheritance allows you to define base templates that can +be extended by child templates. Extending means that the child template +can override all or some of the named block areas in the base template.

+

When you render the child template, the result will as if you rendered +the base template, with only the block(s) that you have overridden in the +child templates differing.

+
    +
  • +

    The inheritance tree can be as deep as you want, meaning you can + extend a file that extends another one that extends another one and + so on.

    +
  • +
  • +

    The child templates can not define any content besides what's + inside {block} tags they override. + Anything outside of {block} tags will + be removed.

    +
  • +
  • +

    Template inheritance is a compile time process which creates a + single compiled template file. Compared to corresponding solutions + based on subtemplates included with the + {include} tag it does have much + better performance when rendering.

    +
  • +
+

Basic inheritance

+

First, create a base template with one or more blocks. +Then, create a child template. The child template +must have an {extends} tag on its first line.

+

The child template can redefine one or more blocks defined in the base template.

+

See below for a simple example.

+

layout.tpl (base)

+
<html>
+    <head>
+      <title>{block name=title}Default Page Title{/block}</title>
+      {block name=head}{/block}
+    </head>
+    <body>
+        {block name=body}{/block}
+    </body>
+</html>
+
+

myproject.tpl (child)

+
{extends file='layout.tpl'}
+{block name=head}
+  <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
+  <script src="/js/mypage.js"></script>
+{/block}
+
+

mypage.tpl (grandchild)

+
{extends file='myproject.tpl'}
+{block name=title}My Page Title{/block}
+{block name=head}
+  <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
+  <script src="/js/mypage.js"></script>
+{/block}
+{block name=body}My HTML Page Body goes here{/block}
+
+

To render the above, you would use:

+
<?php
+$smarty->display('mypage.tpl');
+
+

The resulting output is:

+
<html>
+    <head>
+      <title>My Page Title</title>
+      <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
+      <script src="/js/mypage.js"></script>
+    </head>
+    <body>
+     My HTML Page Body goes here
+    </body>
+</html>
+
+
+

Note

+

When compile-check is enabled, all files +in the inheritance tree +are checked for modifications upon each invocation. You may want to +disable compile-check on production servers for this reason.

+

Note

+

If you have a subtemplate which is included with +{include} and it contains +{block} areas it works only if the +{include} itself is called from within +a surrounding {block}. In the final +parent template you may need a dummy +{block} for it.

+
+

Using append and prepend

+

The content of {block} tags from child +and parent templates can be merged by the append or prepend +{block} tag option flags and +{$smarty.block.parent} or {$smarty.block.child} placeholders.

+

Extends resource type

+

Instead of using {extends} tags in the +template files you can define the inheritance tree in your PHP script by +using the extends: resource type.

+

The code below will return same result as the example above.

+
<?php
+$smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl'); 
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/rendering/index.html b/5.0/api/rendering/index.html new file mode 100644 index 000000000..c9faa9e86 --- /dev/null +++ b/5.0/api/rendering/index.html @@ -0,0 +1,2315 @@ + + + + + + + + + + + + + + + + + + + + + + Rendering a template - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Rendering templates

+

Fetching or rendering templates directly

+

As explained in basics, you can use $smarty->fetch() or $smarty->display() +to render a template directly.

+
<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->display('homepage.tpl');
+
+// or
+
+$output = $smarty->fetch('homepage.tpl');
+
+

When you use display(), Smarty renders the template to the standard output stream. +fetch() returns the output instead of echoing it.

+

The example above uses simple filenames to load the template. Smarty also supports +loading templates from resources.

+

Creating a template object

+

You can also create a template object which later can be prepared first, +and rendered later. This can be useful, for example if you plan to re-use several +templates.

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// create template object with its private variable scope
+$tpl = $smarty->createTemplate('index.tpl');
+
+// assign a variable (available only to this template)
+$tpl->assign('title', 'My Homepage!');
+
+// display the template
+$tpl->display();
+
+

More on assigning variables in using data in templates.

+

Testing if a template exists

+

You can use templateExists() to check whether a template exists before you attempt to use it.

+

It accepts either a path to the template on the filesystem or a +resource string specifying the template.

+

This example uses $_GET['page'] to +{include} a content template. If the +template does not exist then an error page is displayed instead. First, +the page_container.tpl

+
<html>
+    <head>
+        <title>{$title|escape}</title>
+    </head>
+    <body>
+        {* include middle content page *}
+        {include file=$content_template}
+    </body>
+</html>
+
+

And the php script:

+
<?php
+
+// set the filename eg index.inc.tpl
+$mid_template = $_GET['page'].'.inc.tpl';
+
+if (!$smarty->templateExists($mid_template)){
+    $mid_template = 'page_not_found.tpl';
+}
+$smarty->assign('content_template', $mid_template);
+
+$smarty->display('page_container.tpl');
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/resources/index.html b/5.0/api/resources/index.html new file mode 100644 index 000000000..2708efd08 --- /dev/null +++ b/5.0/api/resources/index.html @@ -0,0 +1,2625 @@ + + + + + + + + + + + + + + + + + + + + + + Template resources - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + +

Template resources

+

The filesystem resource

+

So far in our examples, we have used simple filenames or paths when loading a template.

+

For example, to load a template file called homepage.tpl, from the filesystem, you could write: +

<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->display('homepage.tpl');
+

+

The filesystem is the default resource. Templates, however, may come +from a variety of sources. When you render a template, or +when you include a template from within another template, you supply a +resource type, followed by : and the appropriate path and template name.

+

If a resource is not explicitly given, the default resource type is assumed. +The resource type for the filesystem is file, which means that the previous example +can be rewritten as follows: +

<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->display('file:homepage.tpl');
+

+

The file resource pulls templates source files from the directories +specified using Smarty::setTemplateDir() (see Configuring Smarty).

+

setTemplateDir accepts a single path, but can also ben called with an array of paths. +In that case, the list of directories is traversed in the order they appear in the array. The +first template found is the one to process.

+

Templates from a specific directory

+

Smarty 3.1 introduced the bracket-syntax for specifying an element from +Smarty::setTemplateDir(). This allows websites +employing multiple sets of templates better control over which template +to access.

+

The bracket-syntax can be used as follows: +

<?php
+
+// setup template directories
+$smarty->setTemplateDir([
+    './templates',            // element: 0, index: 0
+    './templates_2',          // element: 1, index: 1
+    '10' => 'templates_10',   // element: 2, index: '10'
+    'foo' => 'templates_foo', // element: 3, index: 'foo'
+]);
+
+/*
+  assume the template structure
+  ./templates/foo.tpl
+  ./templates_2/foo.tpl
+  ./templates_2/bar.tpl
+  ./templates_10/foo.tpl
+  ./templates_10/bar.tpl
+  ./templates_foo/foo.tpl
+*/
+
+// regular access
+$smarty->display('file:foo.tpl'); 
+// will load ./templates/foo.tpl
+
+// using numeric index
+$smarty->display('file:[1]foo.tpl'); 
+// will load ./templates_2/foo.tpl
+
+// using numeric string index
+$smarty->display('file:[10]foo.tpl'); 
+// will load ./templates_10/foo.tpl
+
+// using string index
+$smarty->display('file:[foo]foo.tpl'); 
+// will load ./templates_foo/foo.tpl
+
+// using "unknown" numeric index (using element number)
+$smarty->display('file:[2]foo.tpl'); 
+// will load ./templates_10/foo.tpl
+

+

And, from within a Smarty template:

+
{include file="file:foo.tpl"}
+{* will load ./templates/foo.tpl *}
+
+{include file="file:[1]foo.tpl"}
+{* will load ./templates_2/foo.tpl *}
+
+{include file="file:[foo]foo.tpl"}
+{* will load ./templates_foo/foo.tpl *}
+
+

Using absolute paths

+

Templates outside the specified template directories +require the file: template resource type, followed by the absolute +path to the template (with leading slash).

+
<?php
+$smarty->display('file:/export/templates/index.tpl');
+$smarty->display('file:/path/to/my/templates/menu.tpl');
+````
+
+And from within a Smarty template:
+```smarty
+{include file='file:/usr/local/share/templates/navigation.tpl'}
+
+
+

Note

+

With Security enabled, access to +templates outside of the specified templates directories is +not allowed unless you whitelist those directories.

+
+

Windows file paths

+

If you are running on Windows, file paths usually include a drive +letter (such as C:) at the beginning of the pathname. Be sure to use file: in +the path to avoid namespace conflicts and get the desired results. +

<?php
+$smarty->display('file:C:/export/templates/index.tpl');
+$smarty->display('file:F:/path/to/my/templates/menu.tpl');
+

+

And from within Smarty template: +

{include file='file:D:/usr/local/share/templates/navigation.tpl'}
+

+

Handling missing templates

+

If the file resource cannot find the requested template, it will check if there is +a default template handler to call. By default, there is none, and Smarty will return an error, +but you can register a default template handler calling Smarty::registerDefaultTemplateHandler +with any callable.

+
<?php
+
+$smarty->registerDefaultTemplateHandler([$this, 'handleMissingTemplate']);
+
+// ...
+
+public function handleMissingTemplate($type, $name, &$content, &$modified, Smarty $smarty) {
+    if (/* ... */) {
+        // return corrected filepath
+        return "/tmp/some/foobar.tpl";
+    } elseif (/* ... */) {
+        // return a template directly
+        $content = "the template source";
+        $modified = time();
+        return true;
+    } else {
+        // tell smarty that we failed
+        return false;
+    }
+}
+
+

The string and eval resources

+

Smarty can render templates from a string by using the string: or +eval: resource.

+
    +
  • +

    The string: resource behaves much the same as a template file. The + template source is compiled from a string and stores the compiled + template code for later reuse. Each unique template string will + create a new compiled template file. If your template strings are + accessed frequently, this is a good choice. If you have frequently + changing template strings (or strings with low reuse value), the + eval: resource may be a better choice, as it doesn\'t save + compiled templates to disk.

    +
  • +
  • +

    The eval: resource evaluates the template source every time a page + is rendered. This is a good choice for strings with low reuse value. + If the same string is accessed frequently, the string: resource + may be a better choice.

    +
  • +
+
+

Note

+

With a string: resource type, each unique string generates a +compiled file. Smarty cannot detect a string that has changed, and +therefore will generate a new compiled file for each unique string. It +is important to choose the correct resource so that you do not fill +your disk space with wasted compiled strings.

+
+

<?php
+$smarty->assign('foo', 'value');
+$template_string = 'display {$foo} here';
+$smarty->display('string:' . $template_string); // compiles for later reuse
+$smarty->display('eval:' . $template_string); // compiles every time
+
+From within a Smarty template: +
{include file="string:$template_string"} {* compiles for later reuse *}
+{include file="eval:$template_string"} {* compiles every time *}
+

+

Both string: and eval: resources may be encoded with +urlencode() or +base64_encode(). This is not necessary +for the usual use of string: and eval:, but is required when using +either of them in conjunction with the extends resource.

+
 <?php
+ $smarty->assign('foo','value');
+ $template_string_urlencode = urlencode('display {$foo} here');
+ $template_string_base64 = base64_encode('display {$foo} here');
+ $smarty->display('eval:urlencode:' . $template_string_urlencode); // will decode string using urldecode()
+ $smarty->display('eval:base64:' . $template_string_base64); // will decode string using base64_decode()
+
+

From within a Smarty template: +

 {include file="string:urlencode:$template_string_urlencode"} {* will decode string using urldecode() *}
+ {include file="eval:base64:$template_string_base64"} {* will decode string using base64_decode() *}
+

+

The extends resource

+

The extends: resource is used to define child/parent relationships. For details see section of +Template inheritance.

+
+

Note

+

Using the extends resource is usually not necessary. If you have a choice, it is normally more flexible and +intuitive to handle inheritance chains from within the templates using the {extends} tag.

+
+

When string: and eval: templates are used, make sure they are properly url or base64 encoded.

+

The templates within an inheritance chain are not compiled separately. Only a single compiled template will be generated. +(If an eval: resource is found within an inheritance chain, its "don't save a compile file" property is superseded by +the extends: resource.)

+

Example: +

<?php
+$smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl'); 
+
+// inheritance from multiple template sources
+$smarty->display('extends:db:parent.tpl|file:child.tpl|grandchild.tpl|eval:{block name="fooBazVar_"}hello world{/block}'); 
+

+

The stream resource

+

Smarty allow you to use PHP streams +as a template resource. Smarty will first look for a registered template resource. If nothing is +found, it will check if a PHP stream is available. If a stream is available, Smarty will use it +to fetch the template.

+

For example, +

<?php
+stream_wrapper_register('myresource', MyResourceStream::class);
+$smarty->display('myresource:bar.tpl');
+

+

Or, from within a template: +

 {include file="myresource:bar.tpl"}
+

+

Adding your own resource type

+

You can create a class that extends Smarty\Resource\CustomPlugin to add your own resource type, +for example to load template from a database.

+

For example: +

<?php
+class HelloWorldResource extends Smarty\Resource\CustomPlugin {
+
+    protected function fetch($name, &$source, &$mtime) {
+        $source = '{$x="hello world"}{$x}'; // load your template here based on $name
+        $mtime = time();
+    }
+
+}
+
+// ..
+
+$smarty->registerResource('helloworld', new HelloWorldResource());
+

+

If a Resource's templates should not be run through the Smarty +compiler, the Custom Resource may extend \Smarty\Resource\UncompiledPlugin. +The Resource Handler must then implement the function +renderUncompiled(\Smarty\Template $_template). $_template is +a reference to the current template and contains all assigned variables +which the implementor can access via +$_template->getSmarty()->getTemplateVars(). These Resources simply echo +their rendered content to the output stream. The rendered output will be +output-cached if the Smarty instance was configured accordingly. See +src/Resource/PhpPlugin.php for an example.

+

If the Resource's compiled templates should not be cached on disk, the +Custom Resource may extend \Smarty\Resource\RecompiledPlugin. These Resources +are compiled every time they are accessed. This may be an expensive +overhead. See src/Resource/StringEval.php for an +example.

+

Changing the default resource type

+

The default resource type is file. If you want to change it, use Smarty::setDefaultResourceType.

+

The following example will change the default resource type to mysql: +

<?php
+$smarty->setDefaultResourceType('mysql');
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/security/index.html b/5.0/api/security/index.html new file mode 100644 index 000000000..8f4f8c0ae --- /dev/null +++ b/5.0/api/security/index.html @@ -0,0 +1,2289 @@ + + + + + + + + + + + + + + + + + + + + Security - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Security

+

Security is good for situations when you have untrusted parties editing +the templates, and you want to reduce the risk of system +security compromises through the template language.

+

The settings of the security policy are defined by overriding public properties of an +instance of the \Smarty\Security class. These are the possible settings:

+
    +
  • $secure_dir is an array of template directories that are + considered secure. A directory configured using $smarty->setTemplateDir() is + considered secure implicitly. The default is an empty array.
  • +
  • $trusted_uri is an array of regular expressions matching URIs that + are considered trusted. This security directive is used by + {fetch} and + {html_image}. URIs passed to + these functions are reduced to {$PROTOCOL}://{$HOSTNAME} to allow + simple regular expressions (without having to deal with edge cases + like authentication-tokens).
  • +
+

The expression '#https?://.*smarty.net$#i' would allow accessing + the following URIs:

+
-   `http://smarty.net/foo`
+-   `http://smarty.net/foo`
+-   `http://www.smarty.net/foo`
+-   `http://smarty.net/foo`
+-   `https://foo.bar.www.smarty.net/foo/bla?blubb=1`
+
+

but deny access to these URIs:

+
-   `http://smarty.com/foo` (not matching top-level domain \"com\")
+-   `ftp://www.smarty.net/foo` (not matching protocol \"ftp\")
+-   `http://www.smarty.net.otherdomain.com/foo` (not matching end of
+    domain \"smarty.net\")
+
+
    +
  • +

    $static_classes is an array of classes that are considered + trusted. The default is an empty array which allows access to all + static classes. To disable access to all static classes set + $static_classes = null.

    +
  • +
  • +

    $streams is an array of streams that are considered trusted and + can be used from within template. To disable access to all streams + set $streams = null. An empty array ( $streams = [] ) will + allow all streams. The default is array('file').

    +
  • +
  • +

    $allowed_modifiers is an array of (registered / autoloaded) + modifiers that should be accessible to the template. If this array + is non-empty, only the herein listed modifiers may be used. This is + a whitelist.

    +
  • +
  • +

    $disabled_modifiers is an array of (registered / autoloaded) + modifiers that may not be accessible to the template.

    +
  • +
  • +

    $allowed_tags is a boolean flag which controls if constants can + function-, block and filter plugins that should be accessible to the + template. If this array is non-empty, only the herein listed + modifiers may be used. This is a whitelist.

    +
  • +
  • +

    $disabled_tags is an array of (registered / autoloaded) function-, + block and filter plugins that may not be accessible to the template.

    +
  • +
  • +

    $allow_constants is a boolean flag which controls if constants can + be accessed by the template. The default is "true".

    +
  • +
  • +

    $allow_super_globals is a boolean flag which controls if the PHP + super globals can be accessed by the template. The default is + "true".

    +
  • +
+

If security is enabled, no private methods, functions or properties of +static classes or assigned objects can be accessed (beginning with +'_') by the template.

+

To customize the security policy settings you can extend the +\Smarty\Security class or create an instance of it.

+
<?php
+
+use Smarty\Smarty;
+
+class My_Security_Policy extends \Smarty\Security {
+  public $allow_constants = false;
+}
+
+$smarty = new Smarty();
+
+$smarty->enableSecurity('My_Security_Policy');
+
+
<?php
+
+use Smarty\Smarty;
+
+$smarty = new Smarty();
+
+$my_security_policy = new \Smarty\Security($smarty);
+$my_security_policy->allow_constants = false;
+
+$smarty->enableSecurity($my_security_policy);
+
+
<?php
+
+use Smarty\Smarty;
+
+$smarty = new Smarty();
+
+// enable default security
+$smarty->enableSecurity();
+
+
+

Note

+

Most security policy settings are only checked when the template gets +compiled. For that reason you should delete all cached and compiled +template files when you change your security settings.

+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/variables/assigning/index.html b/5.0/api/variables/assigning/index.html new file mode 100644 index 000000000..f0475eb9d --- /dev/null +++ b/5.0/api/variables/assigning/index.html @@ -0,0 +1,2391 @@ + + + + + + + + + + + + + + + + + + + + + + Assigning variables - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Assigning variables

+

Templates start to become really useful once you know how to use variables.

+

Basic assigning

+

Let's revisit the example from the basics section. The following script assigns a value to +the 'companyName' variable and renders the template:

+
<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->assign('companyName', 'AC & ME Corp.');
+
+$smarty->display('footer.tpl');
+
+

footer.tpl: +

<small>Copyright {$companyName|escape}</small>
+

+

Smarty will apply the escape modifier +to the value assigned to the variable +companyName and replace {$companyName|escape} with the result.

+
<small>Copyright AC &amp; ME Corp.</small>
+
+

Using $smarty->assign() is the most common way of assigning data to templates, but there are several other methods.

+

Appending data to an existing variable

+

Using append(), you can add data to an existing variable, usually an array.

+

If you append to a string value, it is converted to an array value and +then appended to. You can explicitly pass name/value pairs, or +associative arrays containing the name/value pairs. If you pass the +optional third parameter of TRUE, the value will be merged with the +current array instead of appended.

+

Examples:

+
<?php
+// This is effectively the same as assign()
+$smarty->append('foo', 'Fred');
+// After this line, foo will now be seen as an array in the template
+$smarty->append('foo', 'Albert');
+
+$array = [1 => 'one', 2 => 'two'];
+$smarty->append('X', $array);
+$array2 = [3 => 'three', 4 => 'four'];
+// The following line will add a second element to the X array
+$smarty->append('X', $array2);
+
+// passing an associative array
+$smarty->append(['city' => 'Lincoln', 'state' => 'Nebraska']);
+
+

Assigning to template objects

+

When you use a template objects, as explained in rendering a template, +you can assign data to the template objects directly instead of assigning it to Smarty. This way, you can use different +sets of data for different templates.

+

For example: +

<?php
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$tplBlue = $smarty->createTemplate('blue.tpl');
+$tplBlue->assign('name', 'The one');
+$tplBlue->display();
+
+$tplRed = $smarty->createTemplate('red.tpl');
+$tplRed->assign('name', 'Neo');
+$tplRed->display();
+

+

Using data objects

+

For more complex use cases, Smarty supports the concept of data objects. +Data objects are containers to hold data. Data objects can be attached to templates when creating them. +This allows for fine-grained re-use of data.

+

For example: +

<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// create a data object
+$data = $smarty->createData();
+
+// assign variable to the data object
+$data->assign('name', 'Neo');
+
+// create template object which will use variables from the data object
+$tpl = $smarty->createTemplate('index.tpl', $data);
+
+// display the template
+$tpl->display();
+

+

Clearing assigned data

+

When re-using templates, you may need to clear data assigned in a previous run. Use clearAllAssign() to +clear the values of all assigned variables on data objects, template objects or the Smarty object.

+

Examples: +

<?php
+// assigning data to the Smarty object
+$smarty->assign('Name', 'Fred');
+// ...
+$smarty->clearAllAssign();
+
+// using a data object
+$data = $smarty->createData();
+$data->assign('name', 'Neo');
+// ...
+$data->clearAllAssign();
+
+// using a template
+$tplBlue = $smarty->createTemplate('blue.tpl');
+$tplBlue->assign('name', 'The one');
+// ...
+$tplBlue->clearAllAssign();
+

+

Note that there it's only useful to clear assigned data if you:

+
    +
  1. repeatedly re-use templates, and
  2. +
  3. the variables used may change on each repetition
  4. +
+

If your script simply runs once and then ends, or you always assign the same variables, clearing assigned data +is of no use.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/variables/config-files/index.html b/5.0/api/variables/config-files/index.html new file mode 100644 index 000000000..40f03bc7f --- /dev/null +++ b/5.0/api/variables/config-files/index.html @@ -0,0 +1,2345 @@ + + + + + + + + + + + + + + + + + + + + + + Config files - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Loading data from config files

+

Instead of assigning data to templates from PHP, you can also +use a config file.

+

Example config file

+

Config files are best suited to manage template settings +from one file. One example is a multi-language application. +Instead of writing multiple templates to support different languages, +you can write a single template file and load your language dependent strings +from config files.

+

Example lang.en.ini: +

# global variables
+pageTitle = "Main Menu"
+
+[Customer]
+pageTitle = "Customer Info"
+
+[Login]
+pageTitle = "Login"
+focus = "username"
+Intro = """This is a value that spans more
+           than one line. you must enclose
+           it in triple quotes."""
+

+

Values of config file variables can be in +quotes, but not necessary. You can use either single or double quotes. +If you have a value that spans more than one line, enclose the entire +value with triple quotes ("""). You can put comments into config +files by any syntax that is not a valid config file syntax. We recommend +using a # (hash) at the beginning of the line.

+

The example config file above has two sections. Section names are +enclosed in [brackets]. Section names can be arbitrary strings not +containing [ or ] symbols. The variable at the top is a global +variable. Global variables are always +loaded from the config file. If a particular section is loaded, then the +global variables and the variables from that section are also loaded. If +a variable exists both as a global and in a section, the section +variable is used.

+

Loading a config file

+

Config files are loaded into templates with the built-in template +function {config_load} or by calling +configLoad() from PHP:

+
<?php
+$smarty->configLoad('lang.en.ini');
+
+

Load a specific section with:

+
<?php
+$smarty->configLoad('lang.en.ini', 'Customer');
+
+

Note that the global section will always be loaded.

+

Retrieving config variables in PHP

+

Loading from a resource

+

Config files (or resources) are loaded by the same resource facilities +as templates. That means that a config file can also be loaded from a db. See resources +for more information.

+

Config overwrite

+

If you name two variables the same within a section, +the last one will be used unless you call: +

<?php
+$smarty->setConfigOverwrite(false);
+
+When config overwrite is disabled, Smarty will create arrays of config file variables when it encounters +multiple entries with the same name.

+

See also {config_load}, +$config_overwrite, +$default_config_handler_func, +getConfigVars(), +clearConfig() and +configLoad()

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/variables/objects/index.html b/5.0/api/variables/objects/index.html new file mode 100644 index 000000000..12c724818 --- /dev/null +++ b/5.0/api/variables/objects/index.html @@ -0,0 +1,2321 @@ + + + + + + + + + + + + + + + + + + + + + + Objects - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Objects

+

Smarty allows access to PHP objects through +the templates.

+
+

Note

+

When you assign/register objects to templates, be sure that all +properties and methods accessed from the template are for presentation +purposes only. It is very easy to inject application logic through +objects, and this leads to poor designs that are difficult to manage. +See the Best Practices section of the Smarty website.

+
+

There are two ways to access them.

+

Assign the object

+

You can assign objects to a template and access them much like any other assigned variable.

+

Example: +

<?php
+// the object
+
+class My_Object {
+    public function meth1($params, $smarty_obj) {
+        return 'this is my meth1';
+    }
+}
+
+// We can also assign objects. assign_by_ref when possible.
+$smarty->assign('myobj', new My_Object());
+
+$smarty->display('index.tpl');
+

+

And here's how to access your object in index.tpl:

+
{$myobj->meth1('foo',$bar)}
+
+

Register the object

+

Registerd objects use a different template syntax. Also, a registered object +can be restricted to certain methods or +properties. However, a registered object cannot be looped over or +assigned in arrays of objects, etc.

+

If security is enabled, no private methods or functions can be accessed +(beginning with '_'). If a method and property of the same name exist, +the method will be used.

+

You can restrict the methods and properties that can be accessed by +listing them in an array as the third registration parameter.

+

By default, parameters passed to objects through the templates are +passed the same way custom functions get +them. An associative array is passed as the first parameter, and the +smarty object as the second. If you want the parameters passed one at a +time for each argument like traditional object parameter passing, set +the fourth registration parameter to FALSE.

+

The optional fifth parameter has only effect with format being TRUE +and contains a list of methods that should be treated as blocks. That +means these methods have a closing tag in the template +({foobar->meth2}...{/foobar->meth2}) and the parameters to the methods +have the same synopsis as the parameters for +block tags: They get the four +parameters $params, $content, $smarty and &$repeat and they also +behave like block tags.

+
<?php
+// the object
+
+class My_Object {
+    function meth1($params, $smarty_obj) {
+        return 'this is my meth1';
+    }
+}
+
+$myobj = new My_Object;
+
+// registering the object
+$smarty->registerObject('foobar', $myobj);
+
+// if we want to restrict access to certain methods or properties, list them
+$smarty->registerObject('foobar', $myobj, array('meth1','meth2','prop1'));
+
+// if you want to use the traditional object parameter format, pass a boolean of false
+$smarty->registerObject('foobar', $myobj, null, false);
+
+$smarty->display('index.tpl');
+
+

And here's how to access your objects in index.tpl:

+
{* access our registered object *}
+{foobar->meth1 p1='foo' p2=$bar}
+
+{* you can also assign the output *}
+{foobar->meth1 p1='foo' p2=$bar assign='output'}
+the output was {$output}
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/variables/static-class-methods/index.html b/5.0/api/variables/static-class-methods/index.html new file mode 100644 index 000000000..53524db15 --- /dev/null +++ b/5.0/api/variables/static-class-methods/index.html @@ -0,0 +1,2248 @@ + + + + + + + + + + + + + + + + + + + + + + Static class methods - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Static Classes

+

You can directly access static classes. The syntax is roughly the same as in +PHP.

+
+

Note

+

Direct access to PHP classes is not recommended. This ties the +underlying application code structure directly to the presentation, +and also complicates template syntax. It is recommended to register +plugins which insulate templates from PHP classes/objects. Use at your +own discretion.

+
+

Examples

+

class constant BAR +

{assign var=foo value=myclass::BAR}
+

+

method result +

{assign var=foo value=myclass::method()} 
+

+

method chaining +

{assign var=foo value=myclass::method1()->method2}
+

+

property bar of class myclass +

{assign var=foo value=myclass::$bar} 
+

+

using Smarty variable bar as class name +

{assign var=foo value=$bar::method}
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/api/variables/streams/index.html b/5.0/api/variables/streams/index.html new file mode 100644 index 000000000..8243cb9ec --- /dev/null +++ b/5.0/api/variables/streams/index.html @@ -0,0 +1,2183 @@ + + + + + + + + + + + + + + + + + + + + + + Using streams - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Streams

+

You can also use streams to call variables. {$foo:bar} will use the +foo://bar stream to get the template variable.

+

Using a PHP stream for a template variable resource from within a +template.

+
{$foo:bar}
+
+

See also Template Resources

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/appendixes/tips/index.html b/5.0/appendixes/tips/index.html new file mode 100644 index 000000000..a8a000e98 --- /dev/null +++ b/5.0/appendixes/tips/index.html @@ -0,0 +1,2391 @@ + + + + + + + + + + + + + + + + + + Tips & Tricks - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + +

Tips & Tricks

+

Blank Variable Handling

+

There may be times when you want to print a default value for an empty +variable instead of printing nothing, such as printing &nbsp; so that +html table backgrounds work properly. Many would use an +{if} statement to handle this, but there is a +shorthand way with Smarty, using the +default variable modifier.

+
+

Note

+

"Undefined variable" errors will show an E_NOTICE if not disabled in +PHP's error_reporting() level or +Smarty's $error_reporting property and +a variable had not been assigned to Smarty.

+
+
    {* the long way *}
+    {if $title eq ''}
+       &nbsp;
+    {else}
+       {$title}
+    {/if}
+
+    {* the short way *}
+    {$title|default:'&nbsp;'}
+
+

See also default modifier and default +variable handling.

+

Default Variable Handling

+

If a variable is used frequently throughout your templates, applying the +default modifier every time it is +mentioned can get a bit ugly. You can remedy this by assigning the +variable its default value with the +{assign} function.

+
{* do this somewhere at the top of your template *}
+{assign var='title' value=$title|default:'no title'}
+
+{* if $title was empty, it now contains the value "no title" when you use it *}
+{$title}
+
+

See also default modifier and blank +variable handling.

+

Passing variable title to header template

+

When the majority of your templates use the same headers and footers, it +is common to split those out into their own templates and +{include} them. But what if the header +needs to have a different title, depending on what page you are coming +from? You can pass the title to the header as an +attribute when it is included.

+

mainpage.tpl - When the main page is drawn, the title of "Main Page" +is passed to the header.tpl, and will subsequently be used as the +title.

+
{include file='header.tpl' title='Main Page'}
+{* template body goes here *}
+{include file='footer.tpl'}
+
+

archives.tpl - When the archives page is drawn, the title will be +"Archives". Notice in the archive example, we are using a variable from +the archives_page.conf file instead of a hard coded variable.

+
{config_load file='archive_page.conf'}
+
+{include file='header.tpl' title=#archivePageTitle#}
+{* template body goes here *}
+{include file='footer.tpl'}
+
+

header.tpl - Notice that "Smarty News" is printed if the $title +variable is not set, using the default +variable modifier.

+
<html>
+    <head>
+        <title>{$title|default:'Smarty News'}</title>
+    </head>
+<body>
+
+

footer.tpl

+
    </body>
+</html>
+
+

Dates

+

As a rule of thumb, always pass dates to Smarty as +timestamps. This allows template designers to +use the date_format modifier for +full control over date formatting, and also makes it easy to compare +dates if necessary.

+
{$startDate|date_format}
+
+

This will output:

+
Jan 4, 2009
+
+
{$startDate|date_format:"%Y/%m/%d"}
+
+

This will output:

+
2009/01/04
+
+

Dates can be compared in the template by timestamps with:

+
{if $order_date < $invoice_date}
+   ...do something..
+{/if}
+
+

When using {html_select_date} +in a template, the programmer will most likely want to convert the +output from the form back into timestamp format. Here is a function to +help you with that.

+
<?php
+
+// this assumes your form elements are named
+// startDate_Day, startDate_Month, startDate_Year
+
+$startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day);
+
+function makeTimeStamp($year='', $month='', $day='')
+{
+   if(empty($year)) {
+       $year = strftime('%Y');
+   }
+   if(empty($month)) {
+       $month = strftime('%m');
+   }
+   if(empty($day)) {
+       $day = strftime('%d');
+   }
+
+   return mktime(0, 0, 0, $month, $day, $year);
+}
+
+

See also {html_select_date}, +{html_select_time}, +date_format and +$smarty.now,

+

Componentized Templates

+

Traditionally, programming templates into your applications goes as +follows: First, you accumulate your variables within your PHP +application, (maybe with database queries.) Then, you instantiate your +Smarty object, assign() the variables and +display() the template. So lets say for example we +have a stock ticker on our template. We would collect the stock data in +our application, then assign these variables in the template and display +it. Now wouldn't it be nice if you could add this stock ticker to any +application by merely including the template, and not worry about +fetching the data up front?

+

You can do this by writing a custom plugin for fetching the content and +assigning it to a template variable.

+

function.load_ticker.php

+
<?php
+
+// setup our function for fetching stock data
+function fetch_ticker($symbol)
+{
+   // put logic here that fetches $ticker_info
+   // from some ticker resource
+   return $ticker_info;
+}
+
+function smarty_function_load_ticker($params, $smarty)
+{
+   // call the function
+   $ticker_info = fetch_ticker($params['symbol']);
+
+   // assign template variable
+   $smarty->assign($params['assign'], $ticker_info);
+}
+
+

index.tpl

+
{load_ticker symbol='SMARTY' assign='ticker'}
+
+Stock Name: {$ticker.name} Stock Price: {$ticker.price}
+
+

See also: {include}.

+

Obfuscating E-mail Addresses

+

Do you ever wonder how your email address gets on so many spam mailing +lists? One way spammers collect email addresses is from web pages. To +help combat this problem, you can make your email address show up in +scrambled javascript in the HTML source, yet it it will look and work +correctly in the browser. This is done with the +{mailto} plugin.

+
<div id="contact">Send inquiries to
+{mailto address=$EmailAddress encode='javascript' subject='Hello'}
+</div>
+
+
+

Note

+

This method isn\'t 100% foolproof. A spammer could conceivably program +his e-mail collector to decode these values, but not likely.... +hopefully..yet ... wheres that quantum computer :-?.

+
+

See also escape modifier and +{mailto}.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/appendixes/troubleshooting/index.html b/5.0/appendixes/troubleshooting/index.html new file mode 100644 index 000000000..24ae2a398 --- /dev/null +++ b/5.0/appendixes/troubleshooting/index.html @@ -0,0 +1,2259 @@ + + + + + + + + + + + + + + + + + + Troubleshooting - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Troubleshooting

+

Smarty/PHP errors

+

Smarty can catch many errors such as missing tag attributes or malformed +variable names. If this happens, you will see an error similar to the +following:

+
Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'
+       in /path/to/smarty/Smarty.class.php on line 1041
+
+Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
+       in /path/to/smarty/Smarty.class.php on line 1041
+
+

Smarty shows you the template name, the line number and the error. After +that, the error consists of the actual line number in the Smarty class +that the error occurred.

+

There are certain errors that Smarty cannot catch, such as missing close +tags. These types of errors usually end up in PHP compile-time parsing +errors.

+

Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75

+

When you encounter a PHP parsing error, the error line number will +correspond to the compiled PHP script, NOT the template itself. Usually +you can look at the template and spot the syntax error. Here are some +common things to look for: missing close tags for +{if}{/if} or +{section}{/section}, +or syntax of logic within an {if} tag. If you can\'t find the error, you might have to +open the compiled PHP file and go to the line number to figure out where +the corresponding error is in the template.

+

Warning: Smarty error: unable to read resource: "index.tpl" in...
+
+or +
Warning: Smarty error: unable to read resource: "site.conf" in...
+

+
    +
  • +

    The $template_dir is incorrect, doesn't + exist or the file index.tpl is not in the templates/ directory

    +
  • +
  • +

    A {config_load} function is + within a template (or configLoad() has been + called) and either $config_dir is + incorrect, does not exist or site.conf is not in the directory.

    +
  • +
+
Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist,
+or is not a directory...
+
+
    +
  • Either the $compile_diris incorrectly + set, the directory does not exist, or templates_c is a file and + not a directory.
  • +
+
Fatal error: Smarty error: unable to write to $compile_dir '....
+
+ +
Fatal error: Smarty error: the $cache_dir 'cache' does not exist,
+or is not a directory. in /..
+
+
    +
  • This means that $caching is enabled and + either; the $cache_dir is incorrectly set, + the directory does not exist, or cache/ is a file and not a + directory.
  • +
+
Fatal error: Smarty error: unable to write to $cache_dir '/...
+
+ +
Warning: filemtime(): stat failed for /path/to/smarty/cache/3ab50a623e65185c49bf17c63c90cc56070ea85c.one.tpl.php 
+in /path/to/smarty/libs/sysplugins/smarty_resource.php
+
+
    +
  • This means that your application registered a custom error handler + (using set_error_handler()) + which is not respecting the given $errno as it should. If, for + whatever reason, this is the desired behaviour of your custom error + handler, please call + muteExpectedErrors() after you've + registered your custom error handler.
  • +
+

See also debugging.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/assets/images/favicon.png b/5.0/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf13b9f9d978896599290a74f77d5dbe7d1655c GIT binary patch literal 1870 zcmV-U2eJ5xP)Gc)JR9QMau)O=X#!i9;T z37kk-upj^(fsR36MHs_+1RCI)NNu9}lD0S{B^g8PN?Ww(5|~L#Ng*g{WsqleV}|#l zz8@ri&cTzw_h33bHI+12+kK6WN$h#n5cD8OQt`5kw6p~9H3()bUQ8OS4Q4HTQ=1Ol z_JAocz`fLbT2^{`8n~UAo=#AUOf=SOq4pYkt;XbC&f#7lb$*7=$na!mWCQ`dBQsO0 zLFBSPj*N?#u5&pf2t4XjEGH|=pPQ8xh7tpx;US5Cx_Ju;!O`ya-yF`)b%TEt5>eP1ZX~}sjjA%FJF?h7cX8=b!DZl<6%Cv z*G0uvvU+vmnpLZ2paivG-(cd*y3$hCIcsZcYOGh{$&)A6*XX&kXZd3G8m)G$Zz-LV z^GF3VAW^Mdv!)4OM8EgqRiz~*Cji;uzl2uC9^=8I84vNp;ltJ|q-*uQwGp2ma6cY7 z;`%`!9UXO@fr&Ebapfs34OmS9^u6$)bJxrucutf>`dKPKT%%*d3XlFVKunp9 zasduxjrjs>f8V=D|J=XNZp;_Zy^WgQ$9WDjgY=z@stwiEBm9u5*|34&1Na8BMjjgf3+SHcr`5~>oz1Y?SW^=K z^bTyO6>Gar#P_W2gEMwq)ot3; zREHn~U&Dp0l6YT0&k-wLwYjb?5zGK`W6S2v+K>AM(95m2C20L|3m~rN8dprPr@t)5lsk9Hu*W z?pS990s;Ez=+Rj{x7p``4>+c0G5^pYnB1^!TL=(?HLHZ+HicG{~4F1d^5Awl_2!1jICM-!9eoLhbbT^;yHcefyTAaqRcY zmuctDopPT!%k+}x%lZRKnzykr2}}XfG_ne?nRQO~?%hkzo;@RN{P6o`&mMUWBYMTe z6i8ChtjX&gXl`nvrU>jah)2iNM%JdjqoaeaU%yVn!^70x-flljp6Q5tK}5}&X8&&G zX3fpb3E(!rH=zVI_9Gjl45w@{(ITqngWFe7@9{mX;tO25Z_8 zQHEpI+FkTU#4xu>RkN>b3Tnc3UpWzPXWm#o55GKF09j^Mh~)K7{QqbO_~(@CVq! zS<8954|P8mXN2MRs86xZ&Q4EfM@JB94b=(YGuk)s&^jiSF=t3*oNK3`rD{H`yQ?d; ztE=laAUoZx5?RC8*WKOj`%LXEkgDd>&^Q4M^z`%u0rg-It=hLCVsq!Z%^6eB-OvOT zFZ28TN&cRmgU}Elrnk43)!>Z1FCPL2K$7}gwzIc48NX}#!A1BpJP?#v5wkNprhV** z?Cpalt1oH&{r!o3eSKc&ap)iz2BTn_VV`4>9M^b3;(YY}4>#ML6{~(4mH+?%07*qo IM6N<$f(jP3KmY&$ literal 0 HcmV?d00001 diff --git a/5.0/assets/javascripts/bundle.6df46069.min.js b/5.0/assets/javascripts/bundle.6df46069.min.js new file mode 100644 index 000000000..02c8d5fb7 --- /dev/null +++ b/5.0/assets/javascripts/bundle.6df46069.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Hi=Object.create;var xr=Object.defineProperty;var Pi=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames,Ht=Object.getOwnPropertySymbols,Ii=Object.getPrototypeOf,Er=Object.prototype.hasOwnProperty,an=Object.prototype.propertyIsEnumerable;var on=(e,t,r)=>t in e?xr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))Er.call(t,r)&&on(e,r,t[r]);if(Ht)for(var r of Ht(t))an.call(t,r)&&on(e,r,t[r]);return e};var sn=(e,t)=>{var r={};for(var n in e)Er.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ht)for(var n of Ht(e))t.indexOf(n)<0&&an.call(e,n)&&(r[n]=e[n]);return r};var Pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Fi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of $i(t))!Er.call(e,o)&&o!==r&&xr(e,o,{get:()=>t[o],enumerable:!(n=Pi(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Hi(Ii(e)):{},Fi(t||!e||!e.__esModule?xr(r,"default",{value:e,enumerable:!0}):r,e));var fn=Pt((wr,cn)=>{(function(e,t){typeof wr=="object"&&typeof cn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(wr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(T){return!!(T&&T!==document&&T.nodeName!=="HTML"&&T.nodeName!=="BODY"&&"classList"in T&&"contains"in T.classList)}function f(T){var Ke=T.type,De=T.tagName;return!!(De==="INPUT"&&a[Ke]&&!T.readOnly||De==="TEXTAREA"&&!T.readOnly||T.isContentEditable)}function c(T){T.classList.contains("focus-visible")||(T.classList.add("focus-visible"),T.setAttribute("data-focus-visible-added",""))}function u(T){T.hasAttribute("data-focus-visible-added")&&(T.classList.remove("focus-visible"),T.removeAttribute("data-focus-visible-added"))}function p(T){T.metaKey||T.altKey||T.ctrlKey||(s(r.activeElement)&&c(r.activeElement),n=!0)}function m(T){n=!1}function d(T){s(T.target)&&(n||f(T.target))&&c(T.target)}function h(T){s(T.target)&&(T.target.classList.contains("focus-visible")||T.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(T.target))}function v(T){document.visibilityState==="hidden"&&(o&&(n=!0),B())}function B(){document.addEventListener("mousemove",z),document.addEventListener("mousedown",z),document.addEventListener("mouseup",z),document.addEventListener("pointermove",z),document.addEventListener("pointerdown",z),document.addEventListener("pointerup",z),document.addEventListener("touchmove",z),document.addEventListener("touchstart",z),document.addEventListener("touchend",z)}function ne(){document.removeEventListener("mousemove",z),document.removeEventListener("mousedown",z),document.removeEventListener("mouseup",z),document.removeEventListener("pointermove",z),document.removeEventListener("pointerdown",z),document.removeEventListener("pointerup",z),document.removeEventListener("touchmove",z),document.removeEventListener("touchstart",z),document.removeEventListener("touchend",z)}function z(T){T.target.nodeName&&T.target.nodeName.toLowerCase()==="html"||(n=!1,ne())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),B(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var un=Pt(Sr=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(c){return!1}},r=t(),n=function(c){var u={next:function(){var p=c.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(c){return encodeURIComponent(c).replace(/%20/g,"+")},i=function(c){return decodeURIComponent(String(c).replace(/\+/g," "))},a=function(){var c=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof c){var d=this;p.forEach(function(ne,z){d.append(z,ne)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),c._entries&&(c._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Sr);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(f,c){typeof f!="string"&&(f=String(f)),c&&typeof c!="string"&&(c=String(c));var u=document,p;if(c&&(e.location===void 0||c!==e.location.href)){c=c.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=c,u.head.appendChild(p);try{if(p.href.indexOf(c)!==0)throw new Error(p.href)}catch(T){throw new Error("URL unable to set base "+c+" due to "+T)}}var m=u.createElement("a");m.href=f,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=f,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!c)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,B=!0,ne=this;["append","delete","set"].forEach(function(T){var Ke=h[T];h[T]=function(){Ke.apply(h,arguments),v&&(B=!1,ne.search=h.toString(),B=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var z=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==z&&(z=this.search,B&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},a=i.prototype,s=function(f){Object.defineProperty(a,f,{get:function(){return this._anchorElement[f]},set:function(c){this._anchorElement[f]=c},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(f){s(f)}),Object.defineProperty(a,"search",{get:function(){return this._anchorElement.search},set:function(f){this._anchorElement.search=f,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(a,{toString:{get:function(){var f=this;return function(){return f.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(f){this._anchorElement.href=f,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(f){this._anchorElement.pathname=f},enumerable:!0},origin:{get:function(){var f={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],c=this._anchorElement.port!=f&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(c?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(f){},enumerable:!0},username:{get:function(){return""},set:function(f){},enumerable:!0}}),i.createObjectURL=function(f){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(f){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Sr)});var Qr=Pt((Lt,Kr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Lt=="object"&&typeof Kr=="object"?Kr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Lt=="object"?Lt.ClipboardJS=r():t.ClipboardJS=r()})(Lt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return ki}});var a=i(279),s=i.n(a),f=i(370),c=i.n(f),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(O){return!1}}var d=function(O){var w=p()(O);return m("cut"),w},h=d;function v(j){var O=document.documentElement.getAttribute("dir")==="rtl",w=document.createElement("textarea");w.style.fontSize="12pt",w.style.border="0",w.style.padding="0",w.style.margin="0",w.style.position="absolute",w.style[O?"right":"left"]="-9999px";var k=window.pageYOffset||document.documentElement.scrollTop;return w.style.top="".concat(k,"px"),w.setAttribute("readonly",""),w.value=j,w}var B=function(O,w){var k=v(O);w.container.appendChild(k);var F=p()(k);return m("copy"),k.remove(),F},ne=function(O){var w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},k="";return typeof O=="string"?k=B(O,w):O instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(O==null?void 0:O.type)?k=B(O.value,w):(k=p()(O),m("copy")),k},z=ne;function T(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?T=function(w){return typeof w}:T=function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},T(j)}var Ke=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=O.action,k=w===void 0?"copy":w,F=O.container,q=O.target,Le=O.text;if(k!=="copy"&&k!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&T(q)==="object"&&q.nodeType===1){if(k==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(k==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Le)return z(Le,{container:F});if(q)return k==="cut"?h(q):z(q,{container:F})},De=Ke;function Fe(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Fe=function(w){return typeof w}:Fe=function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},Fe(j)}function Ti(j,O){if(!(j instanceof O))throw new TypeError("Cannot call a class as a function")}function nn(j,O){for(var w=0;w0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof F.action=="function"?F.action:this.defaultAction,this.target=typeof F.target=="function"?F.target:this.defaultTarget,this.text=typeof F.text=="function"?F.text:this.defaultText,this.container=Fe(F.container)==="object"?F.container:document.body}},{key:"listenClick",value:function(F){var q=this;this.listener=c()(F,"click",function(Le){return q.onClick(Le)})}},{key:"onClick",value:function(F){var q=F.delegateTarget||F.currentTarget,Le=this.action(q)||"copy",kt=De({action:Le,container:this.container,target:this.target(q),text:this.text(q)});this.emit(kt?"success":"error",{action:Le,text:kt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(F){return yr("action",F)}},{key:"defaultTarget",value:function(F){var q=yr("target",F);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(F){return yr("text",F)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(F){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return z(F,q)}},{key:"cut",value:function(F){return h(F)}},{key:"isSupported",value:function(){var F=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof F=="string"?[F]:F,Le=!!document.queryCommandSupported;return q.forEach(function(kt){Le=Le&&!!document.queryCommandSupported(kt)}),Le}}]),w}(s()),ki=Ri},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,f){for(;s&&s.nodeType!==o;){if(typeof s.matches=="function"&&s.matches(f))return s;s=s.parentNode}}n.exports=a},438:function(n,o,i){var a=i(828);function s(u,p,m,d,h){var v=c.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function f(u,p,m,d,h){return typeof u.addEventListener=="function"?s.apply(null,arguments):typeof m=="function"?s.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return s(v,p,m,d,h)}))}function c(u,p,m,d){return function(h){h.delegateTarget=a(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=f},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(n,o,i){var a=i(879),s=i(438);function f(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!a.string(d))throw new TypeError("Second argument must be a String");if(!a.fn(h))throw new TypeError("Third argument must be a Function");if(a.node(m))return c(m,d,h);if(a.nodeList(m))return u(m,d,h);if(a.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return s(document.body,m,d,h)}n.exports=f},817:function(n){function o(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var f=window.getSelection(),c=document.createRange();c.selectNodeContents(i),f.removeAllRanges(),f.addRange(c),a=f.toString()}return a}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,a,s){var f=this.e||(this.e={});return(f[i]||(f[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var f=this;function c(){f.off(i,c),a.apply(s,arguments)}return c._=a,this.on(i,c,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),f=0,c=s.length;for(f;f{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var is=/["'&<>]/;Jo.exports=as;function as(e){var t=""+e,r=is.exec(t);if(!r)return t;var n,o="",i=0,a=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],a;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||s(m,d)})})}function s(m,d){try{f(n[m](d))}catch(h){p(i[0][3],h)}}function f(m){m.value instanceof Ze?Promise.resolve(m.value.v).then(c,u):p(i[0][2],m)}function c(m){s("next",m)}function u(m){s("throw",m)}function p(m,d){m(d),i.shift(),i.length&&s(i[0][0],i[0][1])}}function mn(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof xe=="function"?xe(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(a){return new Promise(function(s,f){a=e[i](a),o(s,f,a.done,a.value)})}}function o(i,a,s,f){Promise.resolve(f).then(function(c){i({value:c,done:s})},a)}}function A(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var It=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var je=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var s=xe(a),f=s.next();!f.done;f=s.next()){var c=f.value;c.remove(this)}}catch(v){t={error:v}}finally{try{f&&!f.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}else a.remove(this);var u=this.initialTeardown;if(A(u))try{u()}catch(v){i=v instanceof It?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=xe(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{dn(h)}catch(v){i=i!=null?i:[],v instanceof It?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new It(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)dn(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Or=je.EMPTY;function Ft(e){return e instanceof je||e&&"closed"in e&&A(e.remove)&&A(e.add)&&A(e.unsubscribe)}function dn(e){A(e)?e():e.unsubscribe()}var Ae={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,s=o.observers;return i||a?Or:(this.currentObservers=null,s.push(r),new je(function(){n.currentObservers=null,Ve(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new U;return r.source=this,r},t.create=function(r,n){return new wn(r,n)},t}(U);var wn=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Or},t}(E);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,a=n._infiniteTimeWindow,s=n._timestampProvider,f=n._windowTime;o||(i.push(r),!a&&i.push(s.now()+f)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,a=o._buffer,s=a.slice(),f=0;f0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var a=r.actions;n!=null&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Wt);var On=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Dt);var we=new On(Tn);var R=new U(function(e){return e.complete()});function Vt(e){return e&&A(e.schedule)}function kr(e){return e[e.length-1]}function Qe(e){return A(kr(e))?e.pop():void 0}function Se(e){return Vt(kr(e))?e.pop():void 0}function zt(e,t){return typeof kr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Nt(e){return A(e==null?void 0:e.then)}function qt(e){return A(e[ft])}function Kt(e){return Symbol.asyncIterator&&A(e==null?void 0:e[Symbol.asyncIterator])}function Qt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ki(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Yt=Ki();function Gt(e){return A(e==null?void 0:e[Yt])}function Bt(e){return ln(this,arguments,function(){var r,n,o,i;return $t(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,Ze(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,Ze(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,Ze(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Jt(e){return A(e==null?void 0:e.getReader)}function $(e){if(e instanceof U)return e;if(e!=null){if(qt(e))return Qi(e);if(pt(e))return Yi(e);if(Nt(e))return Gi(e);if(Kt(e))return _n(e);if(Gt(e))return Bi(e);if(Jt(e))return Ji(e)}throw Qt(e)}function Qi(e){return new U(function(t){var r=e[ft]();if(A(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Yi(e){return new U(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?_(function(o,i){return e(o,i,n)}):de,Oe(1),r?Pe(t):zn(function(){return new Zt}))}}function Nn(){for(var e=[],t=0;t=2,!0))}function ue(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new E}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,f=s===void 0?!0:s;return function(c){var u,p,m,d=0,h=!1,v=!1,B=function(){p==null||p.unsubscribe(),p=void 0},ne=function(){B(),u=m=void 0,h=v=!1},z=function(){var T=u;ne(),T==null||T.unsubscribe()};return g(function(T,Ke){d++,!v&&!h&&B();var De=m=m!=null?m:r();Ke.add(function(){d--,d===0&&!v&&!h&&(p=jr(z,f))}),De.subscribe(Ke),!u&&d>0&&(u=new tt({next:function(Fe){return De.next(Fe)},error:function(Fe){v=!0,B(),p=jr(ne,o,Fe),De.error(Fe)},complete:function(){h=!0,B(),p=jr(ne,a),De.complete()}}),$(T).subscribe(u))})(c)}}function jr(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function V(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function rr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(He(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),N(e===_e()),G())}function Je(e){return{x:e.offsetLeft,y:e.offsetTop}}function Yn(e){return L(b(window,"load"),b(window,"resize")).pipe(Re(0,we),l(()=>Je(e)),N(Je(e)))}function nr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Re(0,we),l(()=>nr(e)),N(nr(e)))}var Bn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!zr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),xa?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!zr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=ya.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Jn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Zn=typeof WeakMap!="undefined"?new WeakMap:new Bn,eo=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Ea.getInstance(),n=new Ra(t,r,this);Zn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){eo.prototype[e]=function(){var t;return(t=Zn.get(this))[e].apply(t,arguments)}});var ka=function(){return typeof or.ResizeObserver!="undefined"?or.ResizeObserver:eo}(),to=ka;var ro=new E,Ha=I(()=>H(new to(e=>{for(let t of e)ro.next(t)}))).pipe(x(e=>L(Te,H(e)).pipe(C(()=>e.disconnect()))),J(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ge(e){return Ha.pipe(S(t=>t.observe(e)),x(t=>ro.pipe(_(({target:r})=>r===e),C(()=>t.unobserve(e)),l(()=>he(e)))),N(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function sr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var no=new E,Pa=I(()=>H(new IntersectionObserver(e=>{for(let t of e)no.next(t)},{threshold:0}))).pipe(x(e=>L(Te,H(e)).pipe(C(()=>e.disconnect()))),J(1));function cr(e){return Pa.pipe(S(t=>t.observe(e)),x(t=>no.pipe(_(({target:r})=>r===e),C(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function oo(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),G())}var fr={drawer:V("[data-md-toggle=drawer]"),search:V("[data-md-toggle=search]")};function io(e){return fr[e].checked}function qe(e,t){fr[e].checked!==t&&fr[e].click()}function Ue(e){let t=fr[e];return b(t,"change").pipe(l(()=>t.checked),N(t.checked))}function $a(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ia(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(N(!1))}function ao(){let e=b(window,"keydown").pipe(_(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:io("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),_(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!$a(n,r)}return!0}),ue());return Ia().pipe(x(t=>t?R:e))}function Me(){return new URL(location.href)}function ot(e){location.href=e.href}function so(){return new E}function co(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)co(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)co(n,o);return n}function ur(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function fo(){return location.hash.substring(1)}function uo(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Fa(){return b(window,"hashchange").pipe(l(fo),N(fo()),_(e=>e.length>0),J(1))}function po(){return Fa().pipe(l(e=>ce(`[id="${e}"]`)),_(e=>typeof e!="undefined"))}function Nr(e){let t=matchMedia(e);return er(r=>t.addListener(()=>r(t.matches))).pipe(N(t.matches))}function lo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(N(e.matches))}function qr(e,t){return e.pipe(x(r=>r?t():R))}function pr(e,t={credentials:"same-origin"}){return pe(fetch(`${e}`,t)).pipe(fe(()=>R),x(r=>r.status!==200?Tt(()=>new Error(r.statusText)):H(r)))}function We(e,t){return pr(e,t).pipe(x(r=>r.json()),J(1))}function mo(e,t){let r=new DOMParser;return pr(e,t).pipe(x(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),J(1))}function lr(e){let t=M("script",{src:e});return I(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(x(()=>Tt(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),C(()=>document.head.removeChild(t)),Oe(1))))}function ho(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function bo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(ho),N(ho()))}function vo(){return{width:innerWidth,height:innerHeight}}function go(){return b(window,"resize",{passive:!0}).pipe(l(vo),N(vo()))}function yo(){return Q([bo(),go()]).pipe(l(([e,t])=>({offset:e,size:t})),J(1))}function mr(e,{viewport$:t,header$:r}){let n=t.pipe(X("size")),o=Q([n,r]).pipe(l(()=>Je(e)));return Q([r,t,o]).pipe(l(([{height:i},{offset:a,size:s},{x:f,y:c}])=>({offset:{x:a.x-f,y:a.y-c+i},size:s})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(a=>{let s=document.createElement("script");s.src=i,s.onload=a,document.body.appendChild(s)})),Promise.resolve())}var r=class{constructor(n){this.url=n,this.onerror=null,this.onmessage=null,this.onmessageerror=null,this.m=a=>{a.source===this.w&&(a.stopImmediatePropagation(),this.dispatchEvent(new MessageEvent("message",{data:a.data})),this.onmessage&&this.onmessage(a))},this.e=(a,s,f,c,u)=>{if(s===this.url.toString()){let p=new ErrorEvent("error",{message:a,filename:s,lineno:f,colno:c,error:u});this.dispatchEvent(p),this.onerror&&this.onerror(p)}};let o=new EventTarget;this.addEventListener=o.addEventListener.bind(o),this.removeEventListener=o.removeEventListener.bind(o),this.dispatchEvent=o.dispatchEvent.bind(o);let i=document.createElement("iframe");i.width=i.height=i.frameBorder="0",document.body.appendChild(this.iframe=i),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Debugging Console

+

There is a debugging console included with Smarty. The console informs +you of all the included templates, +assigned variables and +config file variables for the current +invocation of the template. A template file named debug.tpl is +included with the distribution of Smarty which controls the formatting +of the console.

+

Set $debugging to TRUE in Smarty, and if needed +set $debug_tpl to the template resource +path to debug.tpl. When you load the page, a Javascript console window will pop +up and give you the names of all the included templates and assigned +variables for the current page.

+

To see the available variables for a particular template, see the +{debug} template function. To disable the +debugging console, set $debugging to FALSE. You +can also temporarily turn on the debugging console by putting +SMARTY_DEBUG in the URL if you enable this option with +$debugging_ctrl.

+
+

Note

+

The debugging console does not work when you use the +fetch() API, only when using +display(). It is a set of javascript statements +added to the very bottom of the generated template. If you do not like +javascript, you can edit the debug.tpl template to format the output +however you like. Debug data is not cached and debug.tpl info is not +included in the output of the debug console.

+

Note

+

The load times of each template and config file are in seconds, or +fractions thereof.

+
+

See also troubleshooting.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/config-files/index.html b/5.0/designers/config-files/index.html new file mode 100644 index 000000000..5125481c4 --- /dev/null +++ b/5.0/designers/config-files/index.html @@ -0,0 +1,2237 @@ + + + + + + + + + + + + + + + + + + + + + + Config Files - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Config Files

+

Config files are handy for designers to manage global template variables +from one file. One example is template colors. Normally if you wanted to +change the color scheme of an application, you would have to go through +each and every template file and change the colors. With a config file, +the colors can be kept in one place, and only one file needs to be +updated.

+
# global variables
+pageTitle = "Main Menu"
+bodyBgColor = #000000
+tableBgColor = #000000
+rowBgColor = #00ff00
+
+[Customer]
+pageTitle = "Customer Info"
+
+[Login]
+pageTitle = "Login"
+focus = "username"
+Intro = """This is a value that spans more
+           than one line. you must enclose
+           it in triple quotes."""
+
+# hidden section
+[.Database]
+host=my.example.com
+db=ADDRESSBOOK
+user=php-user
+pass=foobar
+
+

Values of config file variables can be in +quotes, but not necessary. You can use either single or double quotes. +If you have a value that spans more than one line, enclose the entire +value with triple quotes ("""). You can put comments into config +files by any syntax that is not a valid config file syntax. We recommend +using a # (hash) at the beginning of the line.

+

The example config file above has two sections. Section names are +enclosed in [brackets]. Section names can be arbitrary strings not +containing [ or ] symbols. The four variables at the top are global +variables, or variables not within a section. These variables are always +loaded from the config file. If a particular section is loaded, then the +global variables and the variables from that section are also loaded. If +a variable exists both as a global and in a section, the section +variable is used. If you name two variables the same within a section, +the last one will be used unless +$config_overwrite is disabled.

+

Config files are loaded into templates with the built-in template +function {config_load} or the API +configLoad() function.

+

You can hide variables or entire sections by prepending the variable +name or section name with a period(.) eg [.hidden]. This is useful if +your application reads the config files and gets sensitive data from +them that the template engine does not need. If you have third parties +doing template editing, you can be certain that they cannot read +sensitive data from the config file by loading it into the template.

+

Config files (or resources) are loaded by the same resource facilities +as templates. That means that a config file can also be loaded from a db +$smarty->configLoad("db:my.conf").

+

See also {config_load}, +$config_overwrite, +$default_config_handler_func, +getConfigVars(), +clearConfig() and +configLoad()

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-basic-syntax/index.html b/5.0/designers/language-basic-syntax/index.html new file mode 100644 index 000000000..02312d6c9 --- /dev/null +++ b/5.0/designers/language-basic-syntax/index.html @@ -0,0 +1,2204 @@ + + + + + + + + + + + + + + + + + + + + + + Introduction - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Basic Syntax

+

A simple Smarty template could look like this: +

<h1>{$title|escape}</h1>
+<ul>
+    {foreach $cities as $city}
+        <li>{$city.name|escape} ({$city.population})</li>
+    {foreachelse}
+        <li>no cities found</li>        
+    {/foreach}
+</ul>
+

+

All Smarty template tags are enclosed within delimiters. By default +these are { and }, but they can be +changed.

+

For the examples in this manual, we will assume that you are using the +default delimiters. In Smarty, all content outside of delimiters is +displayed as static content, or unchanged. When Smarty encounters +template tags, it attempts to interpret them, and displays the +appropriate output in their place.

+

The basis components of the Smarty syntax are:

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-basic-syntax/language-escaping/index.html b/5.0/designers/language-basic-syntax/language-escaping/index.html new file mode 100644 index 000000000..ae406951b --- /dev/null +++ b/5.0/designers/language-basic-syntax/language-escaping/index.html @@ -0,0 +1,2288 @@ + + + + + + + + + + + + + + + + + + + + + + Escaping Smarty parsing - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Escaping Smarty parsing

+

It is sometimes desirable or even necessary to have Smarty ignore +sections it would otherwise parse. A classic example is embedding +Javascript or CSS code in a template. The problem arises as those +languages use the { and } characters which are also the default +delimiters for Smarty.

+
+

Note

+

A good practice for avoiding escapement altogether is by separating +your Javascript/CSS into their own files and use standard HTML methods +to access them. This will also take advantage of browser script +caching. When you need to embed Smarty variables/functions into your +Javascript/CSS, then the following applies.

+
+

In Smarty templates, the { and } braces will be ignored so long as they +are surrounded by white space. This behavior can be disabled by setting +the Smarty class variable $auto_literal to +false.

+

Examples

+
<script>
+   // the following braces are ignored by Smarty
+   // since they are surrounded by whitespace
+   function foobar {
+    alert('foobar!');
+   }
+   // this one will need literal escapement
+   {literal}
+    function bazzy {alert('foobar!');}
+   {/literal}
+</script>
+
+

{literal}..{/literal} blocks are used +for escaping blocks of template logic. You can also escape the braces +individually with +{ldelim}, {rdelim} tags or +{$smarty.ldelim},{$smarty.rdelim} +variables.

+

Smarty's default delimiters { and } cleanly represent presentational +content. However, if another set of delimiters suit your needs better, +you can change them with Smarty's +$left_delimiter and +$right_delimiter values.

+
+

Note

+

Changing delimiters affects ALL template syntax and escapement. Be +sure to clear out cache and compiled files if you decide to change +them.

+
+
<?php
+
+$smarty->left_delimiter = '<!--{';
+$smarty->right_delimiter = '}-->';
+
+$smarty->assign('foo', 'bar');
+$smarty->assign('name', 'Albert');
+$smarty->display('example.tpl');
+
+

Where the template is:

+
Welcome <!--{$name}--> to Smarty
+    <script>
+  var foo = <!--{$foo}-->;
+  function dosomething() {
+    alert("foo is " + foo);
+  }
+  dosomething();
+</script>
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-basic-syntax/language-syntax-attributes/index.html b/5.0/designers/language-basic-syntax/language-syntax-attributes/index.html new file mode 100644 index 000000000..06ba2e096 --- /dev/null +++ b/5.0/designers/language-basic-syntax/language-syntax-attributes/index.html @@ -0,0 +1,2266 @@ + + + + + + + + + + + + + + + + + + + + + + Attributes - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Attributes

+

Most of the functions take attributes that +specify or modify their behavior. Attributes to Smarty functions are +much like HTML attributes. Static values don't have to be enclosed in +quotes, but it is required for literal strings. Variables with or +without modifiers may also be used, and should not be in quotes. You can +even use PHP function results, plugin results and complex expressions.

+

Some attributes require boolean values (TRUE or FALSE). These can be +specified as true and false. If an attribute has no value assigned +it gets the default boolean value of true.

+

Examples

+
{include file="header.tpl"}
+
+{include file="header.tpl" nocache}  // is equivalent to nocache=true
+
+{include file="header.tpl" attrib_name="attrib value"}
+
+{include file=$includeFile}
+
+{include file=#includeFile# title="My Title"}
+
+{assign var=foo value={counter}}  // plugin result
+
+{assign var=foo value=substr($bar,2,5)}  // PHP function result
+
+{assign var=foo value=$bar|strlen}  // using modifier
+
+{assign var=foo value=$buh+$bar|strlen}  // more complex expression
+
+{html_select_date display_days=true}
+
+{mailto address="smarty@example.com"}
+
+<select name="company_id">
+  {html_options options=$companies selected=$company_id}
+</select>
+
+
+

Note

+

Although Smarty can handle some very complex expressions and syntax, +it is a good rule of thumb to keep the template syntax minimal and +focused on presentation. If you find your template syntax getting too +complex, it may be a good idea to move the bits that do not deal +explicitly with presentation to PHP by way of plugins or modifiers.

+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-basic-syntax/language-syntax-comments/index.html b/5.0/designers/language-basic-syntax/language-syntax-comments/index.html new file mode 100644 index 000000000..6bf05624e --- /dev/null +++ b/5.0/designers/language-basic-syntax/language-syntax-comments/index.html @@ -0,0 +1,2282 @@ + + + + + + + + + + + + + + + + + + + + + + Comments - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Comments

+

Template comments are surrounded by asterisks, and that is surrounded by +the delimiter tags like so:

+

Examples

+
{* this is a comment *}
+
+

Smarty comments are NOT displayed in the final output of the template, +unlike <!-- HTML comments -->. These are useful for making internal +notes in the templates which no one will see ;-)

+
{* I am a Smarty comment, I don't exist in the compiled output  *}
+<html>
+    <head>
+     <title>{$title}</title>
+    </head>
+<body>
+
+    {* another single line smarty comment  *}
+    <!-- HTML comment that is sent to the browser -->
+
+    {* this multiline smarty
+       comment is
+       not sent to browser
+    *}
+
+    {*********************************************************
+    Multi line comment block with credits block
+      @ author:         bg@example.com
+      @ maintainer:     support@example.com
+      @ para:           var that sets block style
+      @ css:            the style output
+    **********************************************************}
+
+    {* The header file with the main logo and stuff  *}
+    {include file='header.tpl'}
+
+
+    {* Dev note:  the $includeFile var is assigned in foo.php script  *}
+    <!-- Displays main content block -->
+    {include file=$includeFile}
+
+    {* this <select> block is redundant *}
+    {*
+    <select name="company">
+      {html_options options=$vals selected=$selected_id}
+    </select>
+    *}
+
+    <!-- Show header from affiliate is disabled -->
+    {* $affiliate|upper *}
+
+    {* you cannot nest comments *}
+    {*
+    <select name="company">
+      {* <option value="0">-- none -- </option> *}
+      {html_options options=$vals selected=$selected_id}
+    </select>
+    *}
+
+    </body>
+</html>
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-basic-syntax/language-syntax-functions/index.html b/5.0/designers/language-basic-syntax/language-syntax-functions/index.html new file mode 100644 index 000000000..d32556d78 --- /dev/null +++ b/5.0/designers/language-basic-syntax/language-syntax-functions/index.html @@ -0,0 +1,2260 @@ + + + + + + + + + + + + + + + + + + + + + + Functions - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Functions

+

Every Smarty tag either prints a variable or +invokes some sort of function. These are processed and displayed by +enclosing the function and its attributes +within delimiters like so: {funcname attr1="val1" attr2="val2"}.

+

Examples

+
{config_load file="colors.conf"}
+
+{include file="header.tpl"}
+
+{if $logged_in}
+    Welcome, <span style="color:{#fontColor#}">{$name}!</span>
+{else}
+    hi, {$name}
+{/if}
+
+{include file="footer.tpl"}
+
+
    +
  • +

    Both built-in functions and custom + functions have the same syntax within + templates.

    +
  • +
  • +

    Built-in functions are the inner workings of Smarty, such as + {if}, + {section} and + {strip}. There should be no need to + change or modify them.

    +
  • +
  • +

    Custom functions are additional functions implemented via + plugins. They can be modified to your liking, or you can + create new ones. {html_options} + is an example of a custom function.

    +
  • +
+

See also registerPlugin()

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-basic-syntax/language-syntax-operators/index.html b/5.0/designers/language-basic-syntax/language-syntax-operators/index.html new file mode 100644 index 000000000..d85f2d60f --- /dev/null +++ b/5.0/designers/language-basic-syntax/language-syntax-operators/index.html @@ -0,0 +1,2314 @@ + + + + + + + + + + + + + + + + + + + + + + Operators - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Operators

+

Basic

+

Various basic operators can be applied directly to variable values.

+

Examples

+
{$foo + 1}
+
+{$foo * $bar}
+
+{$foo->bar - $bar[1] * $baz->foo->bar() -3 * 7}
+
+{if ($foo + $bar.test % $baz * 134232 + 10 + $b + 10)}
+    ...
+{/if}
+
+{$foo = $foo + $bar}
+
+
+

Note

+

Although Smarty can handle some very complex expressions and syntax, +it is a good rule of thumb to keep the template syntax minimal and +focused on presentation. If you find your template syntax getting too +complex, it may be a good idea to move the bits that do not deal +explicitly with presentation to PHP by way of plugins or modifiers.

+
+

Ternary

+

You can use the ?: (or ternary) operator to test one expression and present the value +of the second or third expression, based on the result of the test.

+

In other words: +

{$test ? "OK" : "FAIL"}
+
+will result in OK if $test is set to true, and in FAIL otherwise.

+

There is also a shorthand ?: operator: +

{$myVar ?: "empty"}
+
+will result in 'empty' if $myVar is not set or set to something that evaluates to false, such as an empty string. +If $myVar is set to something that evaluates to true, the value of $myVar is returned. So, the following will +return 'hello': +
{$myVar="hello"}
+{$myVar ?: "empty"}
+

+

Testing for null

+

If "something that evaluates to false" is to broad a test for you, you can use the ?? (or null coalescing) operator +to trigger only if the tested value is undefined or set to null. +

{$myVar ?? "empty"}
+
+will result in 'empty' if $myVar is not set or set to null. +If $myVar is set to something that evaluates to anything else, the value of $myVar is returned. So, the following will +return an empty string (''): +
{$myVar=""}
+{$myVar ?: "this is not shown"}
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-basic-syntax/language-syntax-quotes/index.html b/5.0/designers/language-basic-syntax/language-syntax-quotes/index.html new file mode 100644 index 000000000..983c493de --- /dev/null +++ b/5.0/designers/language-basic-syntax/language-syntax-quotes/index.html @@ -0,0 +1,2277 @@ + + + + + + + + + + + + + + + + + + + + + + Quotes - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Embedding Vars in Double Quotes

+
    +
  • +

    Smarty will recognize assigned + variables embedded in "double + quotes" so long as the variable name contains only numbers, letters + and under_scores. See naming + for more detail.

    +
  • +
  • +

    With any other characters, for example a period(.) or + $object->reference, then the variable must be surrounded by `backticks`.

    +
  • +
  • +

    In addition, Smarty does allow embedded Smarty tags in double-quoted + strings. This is useful if you want to include variables with + modifiers, plugin or PHP function results.

    +
  • +
+

Examples

+
{func var="test $foo test"}              // sees $foo
+{func var="test $foo_bar test"}          // sees $foo_bar
+{func var="test `$foo[0]` test"}         // sees $foo[0]
+{func var="test `$foo[bar]` test"}       // sees $foo[bar]
+{func var="test $foo.bar test"}          // sees $foo (not $foo.bar)
+{func var="test `$foo.bar` test"}        // sees $foo.bar
+{func var="test `$foo.bar` test"|escape} // modifiers outside quotes!
+{func var="test {$foo|escape} test"}     // modifiers inside quotes!
+{func var="test {time()} test"}          // PHP function result
+{func var="test {counter} test"}         // plugin result
+{func var="variable foo is {if !$foo}not {/if} defined"} // Smarty block function
+
+{* will replace $tpl_name with value *}
+{include file="subdir/$tpl_name.tpl"}
+
+{* does NOT replace $tpl_name *}
+{include file='subdir/$tpl_name.tpl'} // vars require double quotes!
+
+{* must have backticks as it contains a dot "." *}
+{cycle values="one,two,`$smarty.config.myval`"}
+
+{* must have backticks as it contains a dot "." *}
+{include file="`$module.contact`.tpl"}
+
+{* can use variable with dot syntax *}
+{include file="`$module.$view`.tpl"}
+
+
+

Note

+

Although Smarty can handle some very complex expressions and syntax, +it is a good rule of thumb to keep the template syntax minimal and +focused on presentation. If you find your template syntax getting too +complex, it may be a good idea to move the bits that do not deal +explicitly with presentation to PHP by way of plugins or modifiers.

+
+

See also escape.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-basic-syntax/language-syntax-variables/index.html b/5.0/designers/language-basic-syntax/language-syntax-variables/index.html new file mode 100644 index 000000000..f3a7d8587 --- /dev/null +++ b/5.0/designers/language-basic-syntax/language-syntax-variables/index.html @@ -0,0 +1,2323 @@ + + + + + + + + + + + + + + + + + + + + + + Variables - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Variables

+

Template variables start with the $dollar sign. They can contain +numbers, letters and underscores, much like a PHP +variable. You can reference arrays +by index numerically or non-numerically. Also reference object +properties and methods.

+

Config file variables are an exception to +the \$dollar syntax and are instead referenced with surrounding +#hashmarks#, or via the $smarty.config variable.

+

Examples

+
{$foo}        <-- displaying a simple variable (non array/object)
+{$foo[4]}     <-- display the 5th element of a zero-indexed array
+{$foo.bar}    <-- display the "bar" key value of an array, similar to PHP $foo['bar']
+{$foo.$bar}   <-- display variable key value of an array, similar to PHP $foo[$bar]
+{$foo->bar}   <-- display the object property "bar"
+{$foo->bar()} <-- display the return value of object method "bar"
+{#foo#}       <-- display the config file variable "foo"
+{$smarty.config.foo} <-- synonym for {#foo#}
+{$foo[bar]}   <-- syntax only valid in a section loop, see {section}
+{assign var=foo value='baa'}{$foo} <--  displays "baa", see {assign}
+
+Many other combinations are allowed
+
+{$foo.bar.baz}
+{$foo.$bar.$baz}
+{$foo[4].baz}
+{$foo[4].$baz}
+{$foo.bar.baz[4]}
+{$foo->bar($baz,2,$bar)} <-- passing parameters
+{"foo"}       <-- static values are allowed
+
+{* display the server variable "SERVER_NAME" ($_SERVER['SERVER_NAME'])*}
+{$smarty.server.SERVER_NAME}
+
+Math and embedding tags:
+
+{$x+$y}                             // will output the sum of x and y.
+{assign var=foo value=$x+$y}        // in attributes 
+{$foo[$x+3]}                        // as array index
+{$foo={counter}+3}                  // tags within tags
+{$foo="this is message {counter}"}  // tags within double quoted strings
+
+Defining Arrays:
+
+{assign var=foo value=[1,2,3]}
+{assign var=foo value=['y'=>'yellow','b'=>'blue']}
+{assign var=foo value=[1,[9,8],3]}   // can be nested
+
+Short variable assignment:
+
+{$foo=$bar+2}
+{$foo = strlen($bar)}               // function in assignment
+{$foo = myfunct( ($x+$y)*3 )}       // as function parameter 
+{$foo.bar=1}                        // assign to specific array element
+{$foo.bar.baz=1}                    
+{$foo[]=1}                          // appending to an array
+
+Smarty "dot" syntax (note: embedded {} are used to address ambiguities):
+
+{$foo.a.b.c}        =>  $foo['a']['b']['c'] 
+{$foo.a.$b.c}       =>  $foo['a'][$b]['c']         // with variable index
+{$foo.a.{$b+4}.c}   =>  $foo['a'][$b+4]['c']       // with expression as index
+{$foo.a.{$b.c}}     =>  $foo['a'][$b['c']]         // with nested index
+
+PHP-like syntax, alternative to "dot" syntax:
+
+{$foo[1]}             // normal access
+{$foo['bar']}
+{$foo['bar'][1]}
+{$foo[$x+$x]}         // index may contain any expression
+{$foo[$bar[1]]}       // nested index
+{$foo[section_name]}  // smarty {section} access, not array access!
+
+Variable variables:
+
+$foo                     // normal variable
+$foo_{$bar}              // variable name containing other variable 
+$foo_{$x+$y}             // variable name containing expressions 
+$foo_{$bar}_buh_{$blar}  // variable name with multiple segments
+{$foo_{$x}}              // will output the variable $foo_1 if $x has a value of 1.
+
+Object chaining:
+
+{$object->method1($x)->method2($y)}
+
+Direct PHP function access:
+
+{time()}
+
+
+

Note

+

Although Smarty can handle some very complex expressions and syntax, +it is a good rule of thumb to keep the template syntax minimal and +focused on presentation. If you find your template syntax getting too +complex, it may be a good idea to move the bits that do not deal +explicitly with presentation to PHP by way of plugins or modifiers.

+
+

Request variables such as $_GET, $_SESSION, etc are available via +the reserved $smarty variable.

+

See also $smarty, config +variables +{assign} and assign().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/index.html b/5.0/designers/language-builtin-functions/index.html new file mode 100644 index 000000000..f59e71e83 --- /dev/null +++ b/5.0/designers/language-builtin-functions/index.html @@ -0,0 +1,2207 @@ + + + + + + + + + + + + + + + + + + + + + + Introduction - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Built-in Functions

+

Smarty comes with several built-in functions. These built-in functions +are the integral part of the smarty template engine. They are compiled +into corresponding inline PHP code for maximum performance.

+

You cannot create your own custom functions with the same name; and you +should not need to modify the built-in functions.

+

A few of these functions have an assign attribute which collects the +result the function to a named template variable instead of being +output; much like the {assign} function.

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-append/index.html b/5.0/designers/language-builtin-functions/language-function-append/index.html new file mode 100644 index 000000000..d6b7bf726 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-append/index.html @@ -0,0 +1,2321 @@ + + + + + + + + + + + + + + + + + + + + + + {append} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{append}

+

{append} is used for creating or appending template variable arrays +during the execution of a template.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeRequiredDescription
varThe name of the variable being assigned
valueThe value being assigned
index(optional)The index for the new array element. If not specified the value is append to the end of the array.
scope(optional)The scope of the assigned variable: parent, root or global. Defaults to local if omitted.
+

Option Flags

+ + + + + + + + + + + + + +
NameDescription
nocacheAssigns the variable with the 'nocache' attribute
+
+

Note

+

Assignment of variables in-template is essentially placing application +logic into the presentation that may be better handled in PHP. Use at +your own discretion.

+
+

Examples

+
{append var='name' value='Bob' index='first'}
+{append var='name' value='Meyer' index='last'}
+// or 
+{append 'name' 'Bob' index='first'} {* short-hand *}
+{append 'name' 'Meyer' index='last'} {* short-hand *}
+
+The first name is {$name.first}.<br>
+The last name is {$name.last}.
+
+

The above example will output:

+
The first name is Bob.
+The last name is Meyer.
+
+

See also append() and +getTemplateVars().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-assign/index.html b/5.0/designers/language-builtin-functions/language-function-assign/index.html new file mode 100644 index 000000000..c44c147c5 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-assign/index.html @@ -0,0 +1,2413 @@ + + + + + + + + + + + + + + + + + + + + + + {assign} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{assign}, {$var=...}

+

{assign} or {$var=...} is used for assigning template variables during the +execution of a template.

+

Attributes of the {assign} syntax

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
varThe name of the variable being assigned
valueThe value being assigned
scope(optional)The scope of the assigned variable: \'parent\',\'root\' or \'global\'
+

Attributes of the {$var=...} syntax

+ + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
scope(optional)The scope of the assigned variable: \'parent\',\'root\' or \'global\'
+

Option Flags

+ + + + + + + + + + + + + +
NameDescription
nocacheAssigns the variable with the 'nocache' attribute
+
+

Note

+

Assignment of variables in-template is essentially placing application +logic into the presentation that may be better handled in PHP. Use at +your own discretion.

+
+

Examples

+
{assign var="name" value="Bob"}  {* or *}
+{assign "name" "Bob"} {* short-hand, or *}
+{$name='Bob'}
+
+The value of $name is {$name}.
+
+

The above example will output:

+
The value of $name is Bob.
+
+

{assign var="name" value="Bob" nocache}  {* or *}
+{assign "name" "Bob" nocache} {* short-hand, or *}
+{$name='Bob' nocache}
+
+The value of $name is {$name}.
+
+The above example will output: +
The value of $name is Bob.
+

+
{assign var=running_total value=$running_total+$some_array[$row].some_value}  {* or *}
+{$running_total=$running_total+$some_array[row].some_value}
+
+

Variables assigned in the included template will be seen in the +including template.

+
{include file="sub_template.tpl"}
+
+{* display variable assigned in sub_template *}
+{$foo}<br>
+
+

The template above includes the example sub_template.tpl below:

+
{* foo will be known also in the including template *}
+{assign var="foo" value="something" scope=parent}
+{$foo="something" scope=parent}
+
+{* bar is assigned only local in the including template *}
+{assign var="bar" value="value"} {* or *}
+{$var="value"}
+
+

You can assign a variable to root of the current root tree. The variable +is seen by all templates using the same root tree.

+
{assign var=foo value="bar" scope="root"}
+
+

A global variable is seen by all templates.

+
{assign var=foo value="bar" scope="global"} {* or *}
+{assign "foo" "bar" scope="global"} {* short-hand, or *}
+{$foo="bar" scope="global"}
+
+

To access {assign} variables from a php script use +getTemplateVars(). +Here's the template that creates the variable $foo.

+
{assign var="foo" value="Smarty"} {* or *}
+{$foo="Smarty"}
+
+

The template variables are only available after/during template +execution as in the following script.

+
<?php
+
+// this will output nothing as the template has not been executed
+echo $smarty->getTemplateVars('foo');
+
+// fetch the template to a variable
+$whole_page = $smarty->fetch('index.tpl');
+
+// this will output 'smarty' as the template has been executed
+echo $smarty->getTemplateVars('foo');
+
+$smarty->assign('foo','Even smarter');
+
+// this will output 'Even smarter'
+echo $smarty->getTemplateVars('foo');
+
+

The following functions can also optionally assign template variables: {capture}, +{include}, +{counter}, +{cycle}, +{eval}, +{fetch}, +{math} and +{textformat}.

+

See also {append}, +assign() and +getTemplateVars().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-block/index.html b/5.0/designers/language-builtin-functions/language-function-block/index.html new file mode 100644 index 000000000..30b93c226 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-block/index.html @@ -0,0 +1,2424 @@ + + + + + + + + + + + + + + + + + + + + + + {block} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{block}

+

{block} is used to define a named area of template source for template +inheritance. For details see section of Template +Inheritance.

+

The {block} template source area of a child template will replace the +corresponding areas in the parent template(s).

+

Optionally {block} areas of child and parent templates can be merged +into each other. You can append or prepend the parent {block} content +by using the append or prepend option flag with the child's {block} +definition. With {$smarty.block.parent} the {block} content of +the parent template can be inserted at any location of the child +{block} content. {$smarty.block.child} inserts the {block} content +of the child template at any location of the parent {block}.

+

{blocks}'s can be nested.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
nameyesThe name of the template source block
assignnoThe name of variable to assign the output of the block to.
+
+

Note

+

The assign attribute only works on the block that actually gets executed, so you may need +to add it to each child block as well.

+
+

Option Flags (in child templates only):

+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
appendThe {block} content will be appended to the content of the parent template {block}
prependThe {block} content will be prepended to the content of the parent template {block}
hideIgnore the block content if no child block of same name is existing.
nocacheDisables caching of the {block} content
+

Examples

+

parent.tpl

+
    <html>
+      <head>
+        <title>{block name="title"}Default Title{/block}</title>
+        <title>{block "title"}Default Title{/block}</title>  {* short-hand  *}
+      </head>
+    </html>
+
+

child.tpl

+
    {extends file="parent.tpl"} 
+    {block name="title"}
+    Page Title
+    {/block}
+
+

The result would look like

+
    <html>
+      <head>
+        <title>Page Title</title>
+      </head>
+    </html>
+
+

parent.tpl

+
    <html>
+      <head>
+        <title>{block name="title"}Title - {/block}</title>
+      </head>
+    </html>
+
+

child.tpl

+
    {extends file="parent.tpl"} 
+    {block name="title" append}
+        Page Title
+    {/block}
+
+

The result would look like

+
    <html>
+      <head>
+        <title>Title - Page Title</title>
+      </head>
+    </html>
+
+

parent.tpl

+
    <html>
+      <head>
+        <title>{block name="title"} is my title{/block}</title>
+      </head>
+    </html>
+
+

child.tpl

+
    {extends file="parent.tpl"} 
+    {block name="title" prepend}
+    Page Title
+    {/block}
+
+

The result would look like

+
    <html>
+      <head>
+        <title>Page title is my titel</title>
+      </head>
+    </html>
+
+

parent.tpl

+
    <html>
+      <head>
+        <title>{block name="title"}The {$smarty.block.child} was inserted here{/block}</title>
+      </head>
+    </html>
+
+

child.tpl

+
    {extends file="parent.tpl"} 
+    {block name="title"}
+        Child Title
+    {/block}
+
+

The result would look like

+
    <html>
+      <head>
+        <title>The Child Title was inserted here</title>
+      </head>
+    </html>
+
+

parent.tpl

+
    <html>
+      <head>
+        <title>{block name="title"}Parent Title{/block}</title>
+      </head>
+    </html>
+
+

child.tpl

+
    {extends file="parent.tpl"} 
+    {block name="title"}
+        You will see now - {$smarty.block.parent} - here
+    {/block}
+
+

The result would look like

+
    <html>
+      <head>
+        <title>You will see now - Parent Title - here</title>
+      </head>
+    </html>
+
+

See also Template +Inheritance, +$smarty.block.parent, +$smarty.block.child, and +{extends}

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-call/index.html b/5.0/designers/language-builtin-functions/language-function-call/index.html new file mode 100644 index 000000000..fcff7468a --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-call/index.html @@ -0,0 +1,2348 @@ + + + + + + + + + + + + + + + + + + + + + + {call} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{call}

+

{call} is used to call a template function defined by the +{function} tag just like a plugin +function.

+
+

Note

+

Template functions are defined global. Since the Smarty compiler is a +single-pass compiler, The {call} tag must +be used to call a template function defined externally from the given +template. Otherwise you can directly use the function as +{funcname ...} in the template.

+
+
    +
  • +

    The {call} tag must have the name attribute which contains the + name of the template function.

    +
  • +
  • +

    Values for variables can be passed to the template function as + attributes.

    +
  • +
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
nameYesThe name of the template function
assignNoThe name of the variable that the output of called template function will be assigned to
[var ...]Novariable to pass local to template function
+

Option Flags

+ + + + + + + + + + + + + +
NameDescription
nocacheCall the template function in nocache mode
+

Examples

+
    {* define the function *}
+    {function name=menu level=0}
+      <ul class="level{$level}">
+      {foreach $data as $entry}
+        {if is_array($entry)}
+          <li>{$entry@key}</li>
+          {call name=menu data=$entry level=$level+1}
+        {else}
+          <li>{$entry}</li>
+        {/if}
+      {/foreach}
+      </ul>
+    {/function}
+
+    {* create an array to demonstrate *}
+    {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
+    ['item3-3-1','item3-3-2']],'item4']}
+
+    {* run the array through the function *}
+    {call name=menu data=$menu}
+    {call menu data=$menu} {* short-hand *}
+
+

Will generate the following output

+
    * item1
+    * item2
+    * item3
+          o item3-1
+          o item3-2
+          o item3-3
+                + item3-3-1
+                + item3-3-2
+    * item4
+
+

See also {function}.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-capture/index.html b/5.0/designers/language-builtin-functions/language-function-capture/index.html new file mode 100644 index 000000000..a40e98784 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-capture/index.html @@ -0,0 +1,2318 @@ + + + + + + + + + + + + + + + + + + + + + + {capture} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{capture}

+

{capture} is used to collect the output of the template between the +tags into a variable instead of displaying it. Any content between +{capture name='foo'} and {/capture} is collected into the variable +specified in the name attribute.

+

The captured content can be used in the template from the variable +$smarty.capture.foo where "foo" +is the value passed in the name attribute. If you do not supply the +name attribute, then "default" will be used as the name ie +$smarty.capture.default.

+

{capture}'s can be nested.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
nameYesThe name of the captured block
assignNoThe variable name where to assign the captured output to
appendNoThe name of an array variable where to append the captured output to
+

Option Flags

+ + + + + + + + + + + + + +
NameDescription
nocacheDisables caching of this captured block
+
{* we don't want to print a div tag unless content is displayed *}
+{capture name="banner"}
+{capture "banner"} {* short-hand *}
+  {include file="get_banner.tpl"}
+{/capture}
+
+{if $smarty.capture.banner ne ""}
+<div id="banner">{$smarty.capture.banner}</div>
+{/if}
+
+

This example demonstrates the capture function. +

{capture name=some_content assign=popText}
+{capture some_content assign=popText} {* short-hand *}
+The server is {$my_server_name|upper} at {$my_server_addr}<br>
+Your ip is {$my_ip}.
+{/capture}
+<a href="#">{$popText}</a>
+

+

This example also demonstrates how multiple calls of capture can be used +to create an array with captured content.

+
{capture append="foo"}hello{/capture}I say just {capture append="foo"}world{/capture}
+{foreach $foo as $text}{$text} {/foreach}
+
+

The above example will output:

+
I say just hello world
+
+

See also $smarty.capture, +{eval}, +{fetch}, fetch() and +{assign}.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-config-load/index.html b/5.0/designers/language-builtin-functions/language-function-config-load/index.html new file mode 100644 index 000000000..d1cd63bd4 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-config-load/index.html @@ -0,0 +1,2328 @@ + + + + + + + + + + + + + + + + + + + + + + {config_load} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{config_load}

+

{config_load} is used for loading config +#variables# from a configuration file into the template.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
fileYesThe name of the config file to include
sectionNoThe name of the section to load
scopenoHow the scope of the loaded variables are treated, which must be one of local, parent or global. local means variables are loaded into the local template context. parent means variables are loaded into both the local context and the parent template that called it. global means variables are available to all templates.
+

Examples

+

The example.conf file.

+
#this is config file comment
+
+# global variables
+pageTitle = "Main Menu"
+bodyBgColor = #000000
+tableBgColor = #000000
+rowBgColor = #00ff00
+
+#customer variables section
+[Customer]
+pageTitle = "Customer Info"
+
+

and the template

+
{config_load file="example.conf"}
+{config_load "example.conf"}  {* short-hand *}
+
+<html>
+    <title>{#pageTitle#|default:"No title"}</title>
+    <body bgcolor="{#bodyBgColor#}">
+        <table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+           <tr bgcolor="{#rowBgColor#}">
+              <td>First</td>
+              <td>Last</td>
+              <td>Address</td>
+           </tr>
+        </table>
+    </body>
+</html>
+
+

Config Files may also contain sections. You can load +variables from within a section with the added attribute section. Note +that global config variables are always loaded along with section +variables, and same-named section variables overwrite the globals.

+
+

Note

+

Config file sections and the built-in template function called +{section} have nothing to do with each +other, they just happen to share a common naming convention.

+
+
{config_load file='example.conf' section='Customer'}
+{config_load 'example.conf' 'Customer'} {* short-hand *}
+
+<html>
+    <title>{#pageTitle#}</title>
+    <body bgcolor="{#bodyBgColor#}">
+        <table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+           <tr bgcolor="{#rowBgColor#}">
+              <td>First</td>
+              <td>Last</td>
+              <td>Address</td>
+           </tr>
+        </table>
+    </body>
+</html>
+
+

See $config_overwrite to create arrays +of config file variables.

+

See also the config files page, config variables page, +$config_dir, +getConfigVars() and +configLoad().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-debug/index.html b/5.0/designers/language-builtin-functions/language-function-debug/index.html new file mode 100644 index 000000000..1930c65c5 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-debug/index.html @@ -0,0 +1,2188 @@ + + + + + + + + + + + + + + + + + + + + + + {debug} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{debug}

+

{debug} dumps the debug console to the page. This works regardless of +the debug settings in the php script. +Since this gets executed at runtime, this is only able to show the +assigned variables; not the templates that are in use. +However, you can see all the currently available variables within the +scope of a template.

+

If caching is enabled and a page is loaded from cache {debug} does +show only the variables which assigned for the cached page.

+

In order to see also the variables which have been locally assigned +within the template it does make sense to place the {debug} tag at the +end of the template.

+

See also the debugging console page.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-extends/index.html b/5.0/designers/language-builtin-functions/language-function-extends/index.html new file mode 100644 index 000000000..2db11b69d --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-extends/index.html @@ -0,0 +1,2283 @@ + + + + + + + + + + + + + + + + + + + + + + {extends} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{extends}

+

{extends} tags are used in child templates in template inheritance for +extending parent templates. For details see section of Template +Inheritance.

+
    +
  • +

    The {extends} tag must be on the first line of the template.

    +
  • +
  • +

    If a child template extends a parent template with the {extends} + tag it may contain only {block} tags. Any other template content + is ignored.

    +
  • +
  • +

    Use the syntax for template resources to extend files + outside the $template_dir directory.

    +
  • +
+

Attributes

+ + + + + + + + + + + + + + + +
AttributeRequiredDescription
fileYesThe name of the template file which is extended
+
+

Note

+

When extending a variable parent like {extends file=$parent_file}, +make sure you include $parent_file in the +$compile_id. Otherwise, Smarty cannot +distinguish between different $parent_files.

+
+

Examples

+
{extends file='parent.tpl'}
+{extends 'parent.tpl'}  {* short-hand *}
+
+

See also Template Inheritance +and {block}.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-for/index.html b/5.0/designers/language-builtin-functions/language-function-for/index.html new file mode 100644 index 000000000..6d92b14be --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-for/index.html @@ -0,0 +1,2341 @@ + + + + + + + + + + + + + + + + + + + + + + {for} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{for}

+

The {for}{forelse} tag is used to create simple loops. The following different formats are supported:

+
    +
  • +

    {for $var=$start to $end} simple loop with step size of 1.

    +
  • +
  • +

    {for $var=$start to $end step $step} loop with individual step + size.

    +
  • +
+

{forelse} is executed when the loop is not iterated.

+

Attributes

+ + + + + + + + + + + + + + + +
AttributeRequiredDescription
maxNoLimit the number of iterations
+

Option Flags

+ + + + + + + + + + + + + +
NameDescription
nocacheDisables caching of the {for} loop
+

Examples

+
<ul>
+    {for $foo=1 to 3}
+        <li>{$foo}</li>
+    {/for}
+</ul>
+
+

The above example will output:

+
<ul>
+    <li>1</li>
+    <li>2</li>
+    <li>3</li>
+</ul>
+
+
<?php
+$smarty->assign('to',10);
+
+
<ul>
+    {for $foo=3 to $to max=3}
+        <li>{$foo}</li>
+    {/for}
+</ul>
+
+

The above example will output:

+
<ul>
+    <li>3</li>
+    <li>4</li>
+    <li>5</li>
+</ul>
+
+
<?php
+$smarty->assign('start',10);
+$smarty->assign('to',5);
+
+
<ul>
+    {for $foo=$start to $to}
+        <li>{$foo}</li>
+    {forelse}
+      no iteration
+    {/for}
+</ul>
+
+

The above example will output:

+
   no iteration
+
+

See also {foreach}, +{section} and +{while}

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-foreach/index.html b/5.0/designers/language-builtin-functions/language-function-foreach/index.html new file mode 100644 index 000000000..7b3eb6d03 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-foreach/index.html @@ -0,0 +1,2672 @@ + + + + + + + + + + + + + + + + + + + + + + {foreach} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{foreach},{foreachelse}

+

{foreach} is used for looping over arrays of data. {foreach} has a +simpler and cleaner syntax than the +{section} loop, and can also loop over +associative arrays.

+

Option Flags

+ + + + + + + + + + + + + +
NameDescription
nocacheDisables caching of the {foreach} loop
+

Examples

+
{foreach $arrayvar as $itemvar}
+  {$itemvar|escape}
+{/foreach}
+
+{foreach $arrayvar as $keyvar=>$itemvar}
+  {$keyvar}: {$itemvar|escape}
+{/foreach}
+
+
+

Note

+

This foreach syntax does not accept any named attributes. This syntax +is new to Smarty 3, however the Smarty 2.x syntax +{foreach from=$myarray key="mykey" item="myitem"} is still +supported.

+
+
    +
  • +

    {foreach} loops can be nested.

    +
  • +
  • +

    The array variable, usually an array of values, determines the + number of times {foreach} will loop. You can also pass an integer + for arbitrary loops.

    +
  • +
  • +

    {foreachelse} is executed when there are no values in the array + variable.

    +
  • +
  • +

    {foreach} properties are @index, + @iteration, + @first, + @last, + @show, + @total.

    +
  • +
  • +

    {foreach} constructs are {break}, + {continue}.

    +
  • +
  • +

    Instead of specifying the key variable you can access the current + key of the loop item by {$item@key} (see examples below).

    +
  • +
+
+

Note

+

The $var@property syntax is new to Smarty 3, however when using the +Smarty 2 {foreach from=$myarray key="mykey" item="myitem"} style +syntax, the $smarty.foreach.name.property syntax is still supported.

+

Note

+

Although you can retrieve the array key with the syntax +{foreach $myArray as $myKey => $myValue}, the key is always +available as $myValue@key within the foreach loop.

+
+
<?php
+$arr = array('red', 'green', 'blue');
+$smarty->assign('myColors', $arr);
+
+

Template to output $myColors in an un-ordered list

+
<ul>
+    {foreach $myColors as $color}
+        <li>{$color}</li>
+    {/foreach}
+</ul>
+
+

The above example will output:

+
<ul>
+    <li>red</li>
+    <li>green</li>
+    <li>blue</li>
+</ul>
+
+
<?php
+$people = array('fname' => 'John', 'lname' => 'Doe', 'email' => 'j.doe@example.com');
+$smarty->assign('myPeople', $people);
+
+

Template to output $myArray as key/value pairs.

+
<ul>
+    {foreach $myPeople as $value}
+       <li>{$value@key}: {$value}</li>
+    {/foreach}
+</ul>
+
+

The above example will output:

+
<ul>
+    <li>fname: John</li>
+    <li>lname: Doe</li>
+    <li>email: j.doe@example.com</li>
+</ul>
+
+

Assign an array to Smarty, the key contains the key for each looped +value.

+
<?php
+ $smarty->assign(
+    'contacts', 
+    [
+         ['phone' => '555-555-1234', 'fax' => '555-555-5678', 'cell' => '555-555-0357'],
+         ['phone' => '800-555-4444', 'fax' => '800-555-3333', 'cell' => '800-555-2222'],
+     ]
+ );
+
+

The template to output $contact.

+
{* key always available as a property *}
+{foreach $contacts as $contact}
+  {foreach $contact as $value}
+    {$value@key}: {$value}
+  {/foreach}
+{/foreach}
+
+{* accessing key the PHP syntax alternate *}
+{foreach $contacts as $contact}
+  {foreach $contact as $key => $value}
+    {$key}: {$value}
+  {/foreach}
+{/foreach}
+
+

Either of the above examples will output:

+
  phone: 555-555-1234
+  fax: 555-555-5678
+  cell: 555-555-0357
+  phone: 800-555-4444
+  fax: 800-555-3333
+  cell: 800-555-2222
+
+

A database (PDO) example of looping over search results. This example is +looping over a PHP iterator instead of an array().

+
<?php 
+  use Smarty\Smarty;
+
+  $smarty = new Smarty; 
+
+  $dsn = 'mysql:host=localhost;dbname=test'; 
+  $login = 'test'; 
+  $passwd = 'test'; 
+
+  // setting PDO to use buffered queries in mysql is 
+  // important if you plan on using multiple result cursors 
+  // in the template. 
+
+  $db = new PDO($dsn, $login, $passwd, array( 
+     PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true)); 
+
+  $res = $db->prepare("select * from users"); 
+  $res->execute(); 
+  $res->setFetchMode(PDO::FETCH_LAZY); 
+
+  // assign to smarty 
+  $smarty->assign('res',$res); 
+
+  $smarty->display('index.tpl');?>
+
+
{foreach $res as $r} 
+  {$r.id} 
+  {$r.name}
+{foreachelse}
+  .. no results .. 
+{/foreach}
+
+

The above is assuming the results contain the columns named id and +name.

+

What is the advantage of an iterator vs. looping over a plain old array? +With an array, all the results are accumulated into memory before being +looped. With an iterator, each result is loaded/released within the +loop. This saves processing time and memory, especially for very large +result sets.

+

@index

+

index contains the current array index, starting with zero.

+
{* output empty row on the 4th iteration (when index is 3) *}
+<table>
+    {foreach $items as $i}
+      {if $i@index eq 3}
+         {* put empty table row *}
+         <tr><td>nbsp;</td></tr>
+      {/if}
+      <tr><td>{$i.label}</td></tr>
+    {/foreach}
+</table>
+
+

@iteration

+

iteration contains the current loop iteration and always starts at +one, unlike index. It is incremented by one +on each iteration.

+

The "is div by" operator can be used to detect a specific iteration. +Here we bold-face the name every 4th iteration.

+
{foreach $myNames as $name}
+  {if $name@iteration is div by 4}
+    <b>{$name}</b>
+  {/if}
+  {$name}
+{/foreach}
+
+

The "is even by" and "is odd by" operators can be used to +alternate something every so many iterations. Choosing between even or +odd rotates which one starts. Here we switch the font color every 3rd +iteration.

+
 {foreach $myNames as $name}
+   {if $name@iteration is even by 3}
+     <span style="color: #000">{$name}</span>
+   {else}
+     <span style="color: #eee">{$name}</span>
+   {/if}
+ {/foreach}
+
+

This will output something similar to this:

+
<span style="color: #000">...</span>
+<span style="color: #000">...</span>
+<span style="color: #000">...</span>
+<span style="color: #eee">...</span>
+<span style="color: #eee">...</span>
+<span style="color: #eee">...</span>
+<span style="color: #000">...</span>
+<span style="color: #000">...</span>
+<span style="color: #000">...</span>
+<span style="color: #eee">...</span>
+<span style="color: #eee">...</span>
+<span style="color: #eee">...</span>
+...
+
+

@first

+

first is TRUE if the current {foreach} iteration is the initial one. +Here we display a table header row on the first iteration.

+
{* show table header at first iteration *}
+<table>
+    {foreach $items as $i}
+      {if $i@first}
+        <tr>
+          <th>key</td>
+          <th>name</td>
+        </tr>
+      {/if}
+      <tr>
+        <td>{$i@key}</td>
+        <td>{$i.name}</td>
+      </tr>
+    {/foreach}
+</table>
+
+

@last

+

last is set to TRUE if the current {foreach} iteration is the final +one. Here we display a horizontal rule on the last iteration.

+
{* Add horizontal rule at end of list *}
+{foreach $items as $item}
+  <a href="#{$item.id}">{$item.name}</a>{if $item@last}<hr>{else},{/if}
+{foreachelse}
+  ... no items to loop ...
+{/foreach}
+
+

@show

+

The show show property can be used after the execution of a +{foreach} loop to detect if data has been displayed or not. show is +a boolean value.

+
<ul>
+    {foreach $myArray as $name}
+        <li>{$name}</li>
+    {/foreach}
+</ul>
+{if $name@show} do something here if the array contained data {/if}
+
+

@total

+

total contains the number of iterations that this {foreach} will +loop. This can be used inside or after the {foreach}.

+
{* show number of rows at end *}
+{foreach $items as $item}
+  {$item.name}<hr/>
+  {if $item@last}
+    <div id="total">{$item@total} items</div>
+  {/if}
+{foreachelse}
+ ... no items to loop ...
+{/foreach}
+
+

See also {section}, +{for} and +{while}

+

{break}

+

{break} aborts the iteration of the array

+
  {$data = [1,2,3,4,5]}
+  {foreach $data as $value}
+    {if $value == 3}
+      {* abort iterating the array *}
+      {break}
+    {/if}
+    {$value}
+  {/foreach}
+  {*
+    prints: 1 2
+  *}
+
+

{continue}

+

{continue} leaves the current iteration and begins with the next +iteration.

+
  {$data = [1,2,3,4,5]}
+  {foreach $data as $value}
+    {if $value == 3}
+      {* skip this iteration *}
+      {continue}
+    {/if}
+    {$value}
+  {/foreach}
+  {*
+    prints: 1 2 4 5
+  *}
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-function/index.html b/5.0/designers/language-builtin-functions/language-function-function/index.html new file mode 100644 index 000000000..9870b1d49 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-function/index.html @@ -0,0 +1,2334 @@ + + + + + + + + + + + + + + + + + + + + + + {function} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{function}

+

{function} is used to create functions within a template and call them +just like a plugin function. Instead of writing a plugin that generates +presentational content, keeping it in the template is often a more +manageable choice. It also simplifies data traversal, such as deeply +nested menus.

+
+

Note

+

Template functions are defined global. Since the Smarty compiler is a +single-pass compiler, The {call} tag must +be used to call a template function defined externally from the given +template. Otherwise, you can directly use the function as +{funcname ...} in the template.

+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
nameYesThe name of the template function
[var ...]Nodefault variable value to pass local to the template function
+
    +
  • +

    The {function} tag must have the name attribute which contains + the name of the template function. A tag with this name can be + used to call the template function.

    +
  • +
  • +

    Default values for variables can be passed to the template function + as attributes. Like in PHP function + declarations you can only use scalar values as default. The default + values can be overwritten when the template function is being + called.

    +
  • +
  • +

    You can use all variables from the calling template inside the + template function. Changes to variables or new created variables + inside the template function have local scope and are not visible + inside the calling template after the template function is executed.

    +
  • +
+
+

Note

+

You can pass any number of parameter to the template function when it +is called. The parameter variables must not be declared in the +{funcname ...} tag unless you what to use default values. Default +values must be scalar and can not be variable. Variables must be +passed when the template is called.

+
+

Examples

+
{* define the function *}
+{function name=menu level=0}
+{function menu level=0}          {* short-hand *}
+  <ul class="level{$level}">
+  {foreach $data as $entry}
+    {if is_array($entry)}
+      <li>{$entry@key}</li>
+      {menu data=$entry level=$level+1}
+    {else}
+      <li>{$entry}</li>
+    {/if}
+  {/foreach}
+  </ul>
+{/function}
+
+{* create an array to demonstrate *}
+{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
+['item3-3-1','item3-3-2']],'item4']}
+
+{* run the array through the function *}
+{menu data=$menu}
+
+

Will generate the following output

+
* item1
+* item2
+* item3
+      o item3-1
+      o item3-2
+      o item3-3
+            + item3-3-1
+            + item3-3-2
+* item4
+
+

See also {call}

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-if/index.html b/5.0/designers/language-builtin-functions/language-function-if/index.html new file mode 100644 index 000000000..15b4ff7ec --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-if/index.html @@ -0,0 +1,2440 @@ + + + + + + + + + + + + + + + + + + + + + + {if},{elseif},{else} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{if},{elseif},{else}

+

{if} statements in Smarty have much the same flexibility as PHP +if statements, with a few added features for the +template engine. Every {if} must be paired with a matching {/if}. +{else} and {elseif} are also permitted. All PHP conditionals and +functions are recognized, such as ||, or, &&, and, +is_array(), etc.

+

The following is a list of recognized qualifiers, which must be +separated from surrounding elements by spaces. Note that items listed in +[brackets] are optional. PHP equivalents are shown where applicable.

+

Qualifiers

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QualifierAlternatesSyntax ExampleMeaningPHP Equivalent
==eq$a eq $bequals==
!=ne, neq$a neq $bnot equals!=
>gt$a gt $bgreater than>
<lt$a lt $bless than<
>=gte, ge$a ge $bgreater than or equal>=
<=lte, le$a le $bless than or equal<=
===$a === 0check for identity===
!notnot $anegation (unary)!
%mod$a mod $bmodulo%
is [not] div by$a is not div by 4divisible by$a % $b == 0
is [not] even$a is not even[not] an even number (unary)$a % 2 == 0
is [not] even by$a is not even by $bgrouping level [not] even($a / $b) % 2 == 0
is [not] odd$a is not odd[not] an odd number (unary)$a % 2 != 0
is [not] odd by$a is not odd by $b[not] an odd grouping($a / $b) % 2 != 0
+

Examples

+
{if $name eq 'Fred'}
+    Welcome Sir.
+{elseif $name eq 'Wilma'}
+    Welcome Ma'am.
+{else}
+    Welcome, whatever you are.
+{/if}
+
+{* an example with "or" logic *}
+{if $name eq 'Fred' or $name eq 'Wilma'}
+   ...
+{/if}
+
+{* same as above *}
+{if $name == 'Fred' || $name == 'Wilma'}
+   ...
+{/if}
+
+
+{* parenthesis are allowed *}
+{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}
+   ...
+{/if}
+
+
+{* you can also embed php function calls *}
+{if count($var) gt 0}
+   ...
+{/if}
+
+{* check for array. *}
+{if is_array($foo) }
+   .....
+{/if}
+
+{* check for not null. *}
+{if isset($foo) }
+   .....
+{/if}
+
+
+{* test if values are even or odd *}
+{if $var is even}
+   ...
+{/if}
+{if $var is odd}
+   ...
+{/if}
+{if $var is not odd}
+   ...
+{/if}
+
+
+{* test if var is divisible by 4 *}
+{if $var is div by 4}
+   ...
+{/if}
+
+
+{*
+  test if var is even, grouped by two. i.e.,
+  0=even, 1=even, 2=odd, 3=odd, 4=even, 5=even, etc.
+*}
+{if $var is even by 2}
+   ...
+{/if}
+
+{* 0=even, 1=even, 2=even, 3=odd, 4=odd, 5=odd, etc. *}
+{if $var is even by 3}
+   ...
+{/if}
+
+{if isset($name) && $name == 'Blog'}
+     {* do something *}
+{elseif $name == $foo}
+    {* do something *}
+{/if}
+
+{if is_array($foo) && count($foo) > 0}
+    {* do a foreach loop *}
+{/if}
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-include/index.html b/5.0/designers/language-builtin-functions/language-function-include/index.html new file mode 100644 index 000000000..b1ae2a104 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-include/index.html @@ -0,0 +1,2459 @@ + + + + + + + + + + + + + + + + + + + + + + {include} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{include}

+

{include} tags are used for including other templates in the current +template. Any variables available in the current template are also +available within the included template.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
fileYesThe name of the template file to include
assignNoThe name of the variable that the output of include will be assigned to
cache_lifetimeNoEnable caching of this subtemplate with an individual cache lifetime
compile_idNoCompile this subtemplate with an individual compile_id
cache_idNoEnable caching of this subtemplate with an individual cache_id
scopeNoDefine the scope of all in the subtemplate assigned variables: 'parent','root' or 'global'
[var ...]Novariable to pass local to template
+
    +
  • +

    The {include} tag must have the file attribute which contains + the template resource path.

    +
  • +
  • +

    Setting the optional assign attribute specifies the template + variable that the output of {include} is assigned to, instead of + being displayed. Similar to {assign}.

    +
  • +
  • +

    Variables can be passed to included templates as + attributes. Any variables explicitly + passed to an included template are only available within the scope + of the included file. Attribute variables override current template + variables, in the case when they are named the same.

    +
  • +
  • +

    You can use all variables from the including template inside the + included template. But changes to variables or new created variables + inside the included template have local scope and are not visible + inside the including template after the {include} statement. This + default behaviour can be changed for all variables assigned in the + included template by using the scope attribute at the {include} + statement or for individual variables by using the scope attribute + at the {assign} statement. The later + is useful to return values from the included template to the + including template.

    +
  • +
  • +

    Use the syntax for template resources to {include} + files outside of the $template_dir + directory.

    +
  • +
+

Option Flags

+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
nocacheDisables caching of this subtemplate
cachingEnable caching of this subtemplate
inlineIf set, merge the compile-code of the subtemplate into the compiled calling template
+

Examples

+
<html>
+    <head>
+      <title>{$title}</title>
+    </head>
+    <body>
+    {include file='page_header.tpl'}
+
+    {* body of template goes here, the $tpl_name variable
+       is replaced with a value eg 'contact.tpl'
+    *}
+    {include file="$tpl_name.tpl"}
+
+    {* using shortform file attribute *}
+    {include 'page_footer.tpl'}
+    </body>
+</html>
+
+
{include 'links.tpl' title='Newest links' links=$link_array}
+{* body of template goes here *}
+{include 'footer.tpl' foo='bar'}
+
+

The template above includes the example links.tpl below

+

<div id="box">
+    <h3>{$title}{/h3>
+    <ul>
+        {foreach from=$links item=l}
+            .. do stuff  ...
+        </foreach}
+    </ul>
+</div>
+
+Variables assigned in the included template will be seen in the +including template.

+
{include 'sub_template.tpl' scope=parent}
+...
+{* display variables assigned in sub_template *}
+{$foo}<br>
+{$bar}<br>
+...
+
+

The template above includes the example sub_template.tpl below

+
...
+{assign var=foo value='something'}
+{assign var=bar value='value'}
+...
+
+

The included template will not be cached.

+
{include 'sub_template.tpl' nocache}
+...
+
+

In this example included template will be cached with an individual +cache lifetime of 500 seconds.

+
{include 'sub_template.tpl' cache_lifetime=500}
+...
+
+

In this example included template will be cached independent of the +global caching setting.

+
{include 'sub_template.tpl' caching}
+...
+
+

This example assigns the contents of nav.tpl to the $navbar +variable, which is then output at both the top and bottom of the page.

+
<body>
+  {include 'nav.tpl' assign=navbar}
+  {include 'header.tpl' title='Smarty is cool'}
+    {$navbar}
+    {* body of template goes here *}
+    {$navbar}
+  {include 'footer.tpl'}
+</body>
+
+

This example includes another template relative to the directory of the +current template.

+
{include 'template-in-a-template_dir-directory.tpl'}
+{include './template-in-same-directory.tpl'}
+{include '../template-in-parent-directory.tpl'}
+
+
{* absolute filepath *}
+{include file='/usr/local/include/templates/header.tpl'}
+
+{* absolute filepath (same thing) *}
+{include file='file:/usr/local/include/templates/header.tpl'}
+
+{* windows absolute filepath (MUST use "file:" prefix) *}
+{include file='file:C:/www/pub/templates/header.tpl'}
+
+{* include from template resource named "db" *}
+{include file='db:header.tpl'}
+
+{* include a $variable template - eg $module = 'contacts' *}
+{include file="$module.tpl"}
+
+{* wont work as its single quotes ie no variable substitution *}
+{include file='$module.tpl'}
+
+{* include a multi $variable template - eg amber/links.view.tpl *}
+{include file="$style_dir/$module.$view.tpl"}
+
+

See also template resources and +componentized templates.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-insert/index.html b/5.0/designers/language-builtin-functions/language-function-insert/index.html new file mode 100644 index 000000000..c6e9d91f7 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-insert/index.html @@ -0,0 +1,2167 @@ + + + + + + + + + + + + + + + + + + + + + + {insert} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-ldelim/index.html b/5.0/designers/language-builtin-functions/language-function-ldelim/index.html new file mode 100644 index 000000000..f2085701d --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-ldelim/index.html @@ -0,0 +1,2211 @@ + + + + + + + + + + + + + + + + + + + + + + {ldelim},{rdelim} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{ldelim}, {rdelim}

+

{ldelim} and {rdelim} are used for escaping +template delimiters, by default { and }. You can also use +{literal}{/literal} to escape blocks of +text eg Javascript or CSS. See also the complementary +{$smarty.ldelim}.

+
{* this will print literal delimiters out of the template *}
+
+{ldelim}funcname{rdelim} is how functions look in Smarty!
+
+

The above example will output:

+
{funcname} is how functions look in Smarty!
+
+

Another example with some Javascript

+
<script>
+function foo() {ldelim}
+    ... code ...
+{rdelim}
+</script>
+
+

will output

+
<script>
+function foo() {
+    .... code ...
+}
+</script>
+
+
<script>
+    function myJsFunction(){ldelim}
+        alert("The server name\n{$smarty.server.SERVER_NAME|escape:javascript}\n{$smarty.server.SERVER_ADDR|escape:javascript}");
+    {rdelim}
+</script>
+<a href="javascript:myJsFunction()">Click here for Server Info</a>
+
+

See also {literal} and escaping Smarty +parsing.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-literal/index.html b/5.0/designers/language-builtin-functions/language-function-literal/index.html new file mode 100644 index 000000000..20010fe59 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-literal/index.html @@ -0,0 +1,2205 @@ + + + + + + + + + + + + + + + + + + + + + + {literal} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{literal}

+

{literal} tags allow a block of data to be taken literally. This is +typically used around Javascript or stylesheet blocks where {curly +braces} would interfere with the template +delimiter syntax. Anything within +{literal}{/literal} tags is not interpreted, but displayed as-is. If +you need template tags embedded in a {literal} block, consider using +{ldelim}{rdelim} to escape the individual +delimiters instead.

+
+

Note

+

{literal}{/literal} tags are normally not necessary, as Smarty +ignores delimiters that are surrounded by whitespace. Be sure your +javascript and CSS curly braces are surrounded by whitespace. This is +new behavior to Smarty 3.

+
+
<script>
+   // the following braces are ignored by Smarty
+   // since they are surrounded by whitespace
+   function myFoo {
+     alert('Foo!');
+   }
+   // this one will need literal escapement
+   {literal}
+     function myBar {alert('Bar!');}
+   {/literal}
+</script>
+
+

See also {ldelim} {rdelim} and the +escaping Smarty parsing page.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-nocache/index.html b/5.0/designers/language-builtin-functions/language-function-nocache/index.html new file mode 100644 index 000000000..7f9351003 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-nocache/index.html @@ -0,0 +1,2190 @@ + + + + + + + + + + + + + + + + + + + + + + {nocache} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{nocache}

+

{nocache} is used to disable caching of a template section. Every +{nocache} must be paired with a matching {/nocache}.

+
+

Note

+

Be sure any variables used within a non-cached section are also +assigned from PHP when the page is loaded from the cache.

+
+
Today's date is
+{nocache}
+{$smarty.now|date_format}
+{/nocache}
+
+

The above code will output the current date on a cached page.

+

See also the caching section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-section/index.html b/5.0/designers/language-builtin-functions/language-function-section/index.html new file mode 100644 index 000000000..3a2cd6c6a --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-section/index.html @@ -0,0 +1,2925 @@ + + + + + + + + + + + + + + + + + + + + + + {section} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{section}, {sectionelse}

+

A {section} is for looping over sequentially indexed arrays of +data, unlike {foreach} which is used +to loop over a single associative array. Every {section} tag must +be paired with a closing {/section} tag.

+
+

Note

+

The {foreach} loop can do everything a +{section} loop can do, and has a simpler and easier syntax. It is +usually preferred over the {section} loop.

+

Note

+

{section} loops cannot loop over associative arrays, they must be +numerically indexed, and sequential (0,1,2,...). For associative +arrays, use the {foreach} loop.

+
+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
nameYesThe name of the section
loopYesValue to determine the number of loop iterations
startNoThe index position that the section will begin looping. If the value is negative, the start position is calculated from the end of the array. For example, if there are seven values in the loop array and start is -2, the start index is 5. Invalid values (values outside of the length of the loop array) are automatically truncated to the closest valid value. Defaults to 0.
stepNoThe step value that will be used to traverse the loop array. For example, step=2 will loop on index 0, 2, 4, etc. If step is negative, it will step through the array backwards. Defaults to 1.
maxNoSets the maximum number of times the section will loop.
showNoDetermines whether to show this section (defaults to true)
+

Option Flags

+ + + + + + + + + + + + + +
NameDescription
nocacheDisables caching of the {section} loop
+
    +
  • +

    Required attributes are name and loop.

    +
  • +
  • +

    The name of the {section} can be anything you like, made up of + letters, numbers and underscores, like PHP + variables.

    +
  • +
  • +

    {section}'s can be nested, and the nested {section} names must be + unique from each other.

    +
  • +
  • +

    The loop attribute, usually an array of values, determines the + number of times the {section} will loop. You can also pass an + integer as the loop value.

    +
  • +
  • +

    When printing a variable within a {section}, the {section} + name must be given next to variable name within [brackets].

    +
  • +
  • +

    {sectionelse} is executed when there are no values in the loop + variable.

    +
  • +
  • +

    A {section} also has its own variables that handle {section} + properties. These properties are accessible as: + {$smarty.section.name.property} + where "name" is the attribute name.

    +
  • +
  • +

    {section} properties are index, + index_prev, + index_next, + iteration, + first, + last, + rownum, + loop, show, + total.

    +
  • +
+

assign() an array to Smarty

+

Examples

+
<?php
+$data = [1000, 1001, 1002];
+$smarty->assign('custid', $data);
+
+

The template that outputs the array

+
{* this example will print out all the values of the $custid array *}
+{section name=customer loop=$custid}
+{section customer $custid} {* short-hand *}
+  id: {$custid[customer]}<br />
+{/section}
+<hr />
+{*  print out all the values of the $custid array reversed *}
+{section name=foo loop=$custid step=-1}
+{section foo $custid step=-1} {* short-hand *}
+  {$custid[foo]}<br />
+{/section}
+
+

The above example will output:

+
id: 1000<br />
+id: 1001<br />
+id: 1002<br />
+<hr />
+id: 1002<br />
+id: 1001<br />
+id: 1000<br />
+
+
{section name=foo start=10 loop=20 step=2}
+  {$smarty.section.foo.index}
+{/section}
+<hr />
+{section name=bar loop=21 max=6 step=-2}
+  {$smarty.section.bar.index}
+{/section}
+
+

The above example will output:

+
10 12 14 16 18
+<hr />
+20 18 16 14 12 10
+
+

The name of the {section} can be anything you like, see PHP +variables. It is used to reference +the data within the {section}.

+
{section name=anything loop=$myArray}
+  {$myArray[anything].foo}
+  {$name[anything]}
+  {$address[anything].bar}
+{/section}
+
+

This is an example of printing an associative array of data with a +{section}. Following is the php script to assign the $contacts array +to Smarty.

+
<?php
+$data = [
+      ['name' => 'John Smith', 'home' => '555-555-5555',
+            'cell' => '666-555-5555', 'email' => 'john@myexample.com'],
+      ['name' => 'Jack Jones', 'home' => '777-555-5555',
+            'cell' => '888-555-5555', 'email' => 'jack@myexample.com'],
+      ['name' => 'Jane Munson', 'home' => '000-555-5555',
+            'cell' => '123456', 'email' => 'jane@myexample.com']
+];
+$smarty->assign('contacts',$data);
+
+

The template to output $contacts

+
{section name=customer loop=$contacts}
+<p>
+  name: {$contacts[customer].name}<br />
+  home: {$contacts[customer].home}<br />
+  cell: {$contacts[customer].cell}<br />
+  e-mail: {$contacts[customer].email}
+</p>
+{/section}
+
+

The above example will output:

+
<p>
+  name: John Smith<br />
+  home: 555-555-5555<br />
+  cell: 666-555-5555<br />
+  e-mail: john@myexample.com
+</p>
+<p>
+  name: Jack Jones<br />
+  home phone: 777-555-5555<br />
+  cell phone: 888-555-5555<br />
+  e-mail: jack@myexample.com
+</p>
+<p>
+  name: Jane Munson<br />
+  home phone: 000-555-5555<br />
+  cell phone: 123456<br />
+  e-mail: jane@myexample.com
+</p>
+
+

This example assumes that $custid, $name and $address are all +arrays containing the same number of values. First the php script that +assign's the arrays to Smarty.

+
<?php
+
+$id = [1001,1002,1003];
+$smarty->assign('custid',$id);
+
+$fullnames = ['John Smith','Jack Jones','Jane Munson'];
+$smarty->assign('name',$fullnames);
+
+$addr = ['253 Abbey road', '417 Mulberry ln', '5605 apple st'];
+$smarty->assign('address',$addr);
+
+

The loop variable only determines the number of times to loop. You can +access ANY variable from the template within the {section}. This is +useful for looping multiple arrays. You can pass an array which will +determine the loop count by the array size, or you can pass an integer +to specify the number of loops.

+
{section name=customer loop=$custid}
+<p>
+  id: {$custid[customer]}<br />
+  name: {$name[customer]}<br />
+  address: {$address[customer]}
+</p>
+{/section}
+
+

The above example will output:

+
<p>
+  id: 1000<br />
+  name: John Smith<br />
+  address: 253 Abbey road
+</p>
+<p>
+  id: 1001<br />
+  name: Jack Jones<br />
+  address: 417 Mulberry ln
+</p>
+<p>
+  id: 1002<br />
+  name: Jane Munson<br />
+  address: 5605 apple st
+</p>
+
+

{section}'s can be nested as deep as you like. With nested +{section}'s, you can access complex data structures, such as +multidimensional arrays. This is an example .php script that +assigns the arrays.

+
<?php
+
+$id = [1001,1002,1003];
+$smarty->assign('custid',$id);
+
+$fullnames = ['John Smith','Jack Jones','Jane Munson'];
+$smarty->assign('name',$fullnames);
+
+$addr = ['253 N 45th', '417 Mulberry ln', '5605 apple st'];
+$smarty->assign('address',$addr);
+
+$types = [
+           [ 'home phone', 'cell phone', 'e-mail'],
+           [ 'home phone', 'web'],
+           [ 'cell phone']
+         ];
+$smarty->assign('contact_type', $types);
+
+$info = [
+           ['555-555-5555', '666-555-5555', 'john@myexample.com'],
+           [ '123-456-4', 'www.example.com'],
+           [ '0457878']
+        ];
+$smarty->assign('contact_info', $info);
+
+

In this template, $contact_type[customer] is an array of contact +types for the current customer.

+
{section name=customer loop=$custid}
+<hr>
+  id: {$custid[customer]}<br />
+  name: {$name[customer]}<br />
+  address: {$address[customer]}<br />
+  {section name=contact loop=$contact_type[customer]}
+    {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br />
+  {/section}
+{/section}
+
+

The above example will output:

+
<hr>
+  id: 1000<br />
+  name: John Smith<br />
+  address: 253 N 45th<br />
+    home phone: 555-555-5555<br />
+    cell phone: 666-555-5555<br />
+    e-mail: john@myexample.com<br />
+<hr>
+  id: 1001<br />
+  name: Jack Jones<br />
+  address: 417 Mulberry ln<br />
+    home phone: 123-456-4<br />
+    web: www.example.com<br />
+<hr>
+  id: 1002<br />
+  name: Jane Munson<br />
+  address: 5605 apple st<br />
+    cell phone: 0457878<br />
+
+

Results of a database search (eg ADODB or PEAR) are assigned to Smarty

+
<?php
+$sql = 'select id, name, home, cell, email from contacts '
+      ."where name like '$foo%' ";
+$smarty->assign('contacts', $db->getAll($sql));
+
+

The template to output the database result in a HTML table

+
<table>
+    <tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
+    {section name=co loop=$contacts}
+      <tr>
+        <td><a href="view.php?id={$contacts[co].id}">view<a></td>
+        <td>{$contacts[co].name}</td>
+        <td>{$contacts[co].home}</td>
+        <td>{$contacts[co].cell}</td>
+        <td>{$contacts[co].email}</td>
+      <tr>
+    {sectionelse}
+      <tr><td colspan="5">No items found</td></tr>
+    {/section}
+</table>
+
+

.index

+

index contains the current array index, starting with zero or the +start attribute if given. It increments by one or by the step +attribute if given.

+
+

Note

+

If the step and start properties are not modified, then this works +the same as the iteration property, +except it starts at zero instead of one.

+

Note

+

$custid[customer.index] and $custid[customer] are identical.

+
+
{section name=customer loop=$custid}
+  {$smarty.section.customer.index} id: {$custid[customer]}<br />
+{/section}
+
+

The above example will output:

+
0 id: 1000<br />
+1 id: 1001<br />
+2 id: 1002<br />
+
+

.index_prev

+

index_prev is the previous loop index. On the first loop, this is set to -1.

+

.index_next

+

index_next is the next loop index. On the last loop, this is still one +more than the current index, respecting the setting of the step +attribute, if given.

+
<?php
+    $data = [1001,1002,1003,1004,1005];
+    $smarty->assign('rows',$data);
+
+

Template to output the above array in a table

+
{* $rows[row.index] and $rows[row] are identical in meaning *}
+<table>
+  <tr>
+    <th>index</th><th>id</th>
+    <th>index_prev</th><th>prev_id</th>
+    <th>index_next</th><th>next_id</th>
+  </tr>
+{section name=row loop=$rows}
+  <tr>
+    <td>{$smarty.section.row.index}</td><td>{$rows[row]}</td>
+    <td>{$smarty.section.row.index_prev}</td><td>{$rows[row.index_prev]}</td>
+    <td>{$smarty.section.row.index_next}</td><td>{$rows[row.index_next]}</td>
+  </tr>
+{/section}
+</table>
+
+

The above example will output a table containing the following:

+
    index  id    index_prev prev_id index_next next_id
+    0      1001  -1                 1          1002
+    1      1002  0          1001    2          1003
+    2      1003  1          1002    3          1004
+    3      1004  2          1003    4          1005
+    4      1005  3          1004    5
+
+

.iteration

+

iteration contains the current loop iteration and starts at one.

+
+

Note

+

This is not affected by the {section} properties start, step and +max, unlike the index property. +iteration also starts with one instead of zero unlike index. +rownum is an alias to iteration, they +are identical.

+
+
<?php
+// array of 3000 to 3015
+$id = range(3000,3015);
+$smarty->assign('arr', $id);
+
+

Template to output every other element of the $arr array as step=2

+
{section name=cu loop=$arr start=5 step=2}
+  iteration={$smarty.section.cu.iteration}
+  index={$smarty.section.cu.index}
+  id={$custid[cu]}<br />
+{/section}
+
+

The above example will output:

+
iteration=1 index=5 id=3005<br />
+iteration=2 index=7 id=3007<br />
+iteration=3 index=9 id=3009<br />
+iteration=4 index=11 id=3011<br />
+iteration=5 index=13 id=3013<br />
+iteration=6 index=15 id=3015<br />
+
+

Another example that uses the iteration property to output a table +header block every five rows.

+
<table>
+    {section name=co loop=$contacts}
+      {if $smarty.section.co.iteration is div by 5}
+        <tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
+      {/if}
+      <tr>
+        <td><a href="view.php?id={$contacts[co].id}">view<a></td>
+        <td>{$contacts[co].name}</td>
+        <td>{$contacts[co].home}</td>
+        <td>{$contacts[co].cell}</td>
+        <td>{$contacts[co].email}</td>
+      <tr>
+    {/section}
+</table>
+
+

An example that uses the iteration property to alternate a text color every +third row.

+
<table>
+  {section name=co loop=$contacts}
+    {if $smarty.section.co.iteration is even by 3}
+      <span style="color: #ffffff">{$contacts[co].name}</span>
+    {else}
+      <span style="color: #dddddd">{$contacts[co].name}</span>
+    {/if}
+  {/section}
+</table>
+
+
+

Note

+

The "is div by" syntax is a simpler alternative to the PHP mod +operator syntax. The mod operator is allowed: +{if $smarty.section.co.iteration % 5 == 1} will work just the same.

+

Note

+

You can also use "is odd by" to reverse the alternating.

+
+

.first

+

first is set to TRUE if the current {section} iteration is the initial one.

+

.last

+

last is set to TRUE if the current section iteration is the final one.

+

This example loops the $customers array, outputs a header block on the +first iteration and on the last outputs the footer block. Also uses the +total property.

+
{section name=customer loop=$customers}
+  {if $smarty.section.customer.first}
+    <table>
+    <tr><th>id</th><th>customer</th></tr>
+  {/if}
+
+  <tr>
+    <td>{$customers[customer].id}}</td>
+    <td>{$customers[customer].name}</td>
+  </tr>
+
+  {if $smarty.section.customer.last}
+    <tr><td></td><td>{$smarty.section.customer.total} customers</td></tr>
+    </table>
+  {/if}
+{/section}
+
+

.rownum

+

rownum contains the current loop iteration, starting with one. It is +an alias to iteration, they work +identically.

+

.loop

+

loop contains the last index number that this {section} looped. This +can be used inside or after the {section}.

+
{section name=customer loop=$custid}
+  {$smarty.section.customer.index} id: {$custid[customer]}<br />
+{/section}
+There are {$smarty.section.customer.loop} customers shown above.
+
+

The above example will output:

+
0 id: 1000<br />
+1 id: 1001<br />
+2 id: 1002<br />
+There are 3 customers shown above.
+
+

.show

+

show is used as a parameter to section and is a boolean value. If +FALSE, the section will not be displayed. If there is a {sectionelse} +present, that will be alternately displayed.

+

Boolean $show_customer_info has been passed from the PHP application, +to regulate whether this section shows.

+
{section name=customer loop=$customers show=$show_customer_info}
+  {$smarty.section.customer.rownum} id: {$customers[customer]}<br />
+{/section}
+
+{if $smarty.section.customer.show}
+  the section was shown.
+{else}
+  the section was not shown.
+{/if}
+
+

The above example will output:

+
1 id: 1000<br />
+2 id: 1001<br />
+3 id: 1002<br />
+
+the section was shown.
+
+

.total

+

total contains the number of iterations that this {section} will +loop. This can be used inside or after a {section}.

+
{section name=customer loop=$custid step=2}
+  {$smarty.section.customer.index} id: {$custid[customer]}<br />
+{/section}
+   There are {$smarty.section.customer.total} customers shown above.
+
+

See also {foreach}, +{for}, {while} +and $smarty.section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-setfilter/index.html b/5.0/designers/language-builtin-functions/language-function-setfilter/index.html new file mode 100644 index 000000000..4f878e5bf --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-setfilter/index.html @@ -0,0 +1,2259 @@ + + + + + + + + + + + + + + + + + + + + + + {setfilter} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{setfilter}

+

The {setfilter}...{/setfilter} block tag allows the definition of +template instance's variable filters.

+

SYNTAX: {setfilter filter1\|filter2\|filter3\....}\...{/setfilter}

+

The filter can be:

+
    +
  • +

    A variable filter plugin specified by it's name.

    +
  • +
  • +

    A modifier specified by it's name and optional additional + parameter.

    +
  • +
+

{setfilter}...{/setfilter} blocks can be nested. The filter definition +of inner blocks does replace the definition of the outer block.

+

Template instance filters run in addition to other modifiers and +filters. They run in the following order: modifier, default_modifier, +$escape_html, registered variable filters, autoloaded variable +filters, template instance's variable filters. Everything after +default_modifier can be disabled with the nofilter flag.

+
+

Note

+

The setting of template instance filters does not affect the output of +included subtemplates.

+
+

Examples

+
<script>
+    {setfilter filter1}
+      {$foo} {* filter1 runs on output of $foo *}
+      {setfilter filter2|mod:true}
+        {$bar} {* filter2 and modifier mod runs on output of $bar *}
+      {/setfilter}
+      {$buh} {* filter1 runs on output of $buh *}
+    {/setfilter}
+    {$blar} {* no template instance filter runs on output of $blar}
+</script>
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-strip/index.html b/5.0/designers/language-builtin-functions/language-function-strip/index.html new file mode 100644 index 000000000..f391cb414 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-strip/index.html @@ -0,0 +1,2211 @@ + + + + + + + + + + + + + + + + + + + + + + {strip} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{strip}

+

Many times web designers run into the issue where white space and +carriage returns affect the output of the rendered HTML (browser +"features"), so you must run all your tags together in the template to +get the desired results. This usually ends up in unreadable or +unmanageable templates.

+

Anything within {strip}{/strip} tags are stripped of the extra spaces +or carriage returns at the beginnings and ends of the lines before they +are displayed. This way you can keep your templates readable, and not +worry about extra white space causing problems.

+
+

Note

+

{strip}{/strip} does not affect the contents of template variables, +see the strip modifier instead.

+
+
{* the following will be all run into one line upon output *}
+{strip}
+    <table>
+     <tr>
+      <td>
+       <a href="#">
+        This is a test
+       </a>
+      </td>
+     </tr>
+    </table>
+{/strip}
+
+

The above example will output:

+
<table><tr><td><a href="#">This is a test</a></td></tr></table>
+
+

Notice that in the above example, all the lines begin and end with HTML +tags. Be aware that all the lines are run together. If you have plain +text at the beginning or end of any line, they will be run together, and +may not be desired results.

+

See also the strip modifier.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-builtin-functions/language-function-while/index.html b/5.0/designers/language-builtin-functions/language-function-while/index.html new file mode 100644 index 000000000..5524d49f4 --- /dev/null +++ b/5.0/designers/language-builtin-functions/language-function-while/index.html @@ -0,0 +1,2365 @@ + + + + + + + + + + + + + + + + + + + + + + {while} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{while}

+

{while} loops in Smarty have much the same flexibility as PHP +while statements, with a few added features for +the template engine. Every {while} must be paired with a matching +{/while}. All PHP conditionals and functions are recognized, such as +||, or, &&, and, is_array(), etc.

+

The following is a list of recognized qualifiers, which must be +separated from surrounding elements by spaces. Note that items listed in +[brackets] are optional. PHP equivalents are shown where applicable.

+

Qualifiers

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QualifierAlternatesSyntax ExampleMeaningPHP Equivalent
==eq$a eq $bequals==
!=ne, neq$a neq $bnot equals!=
>gt$a gt $bgreater than>
<lt$a lt $bless than<
>=gte, ge$a ge $bgreater than or equal>=
<=lte, le$a le $bless than or equal<=
===$a === 0check for identity===
!notnot $anegation (unary)!
%mod$a mod $bmodulo%
is [not] div by$a is not div by 4divisible by$a % $b == 0
is [not] even$a is not even[not] an even number (unary)$a % 2 == 0
is [not] even by$a is not even by $bgrouping level [not] even($a / $b) % 2 == 0
is [not] odd$a is not odd[not] an odd number (unary)$a % 2 != 0
is [not] odd by$a is not odd by $b[not] an odd grouping($a / $b) % 2 != 0
+

Examples

+
{while $foo > 0}
+  {$foo--}
+{/while}
+
+

The above example will count down the value of $foo until 1 is reached.

+

See also {foreach}, +{for} and +{section}.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-combining-modifiers/index.html b/5.0/designers/language-combining-modifiers/index.html new file mode 100644 index 000000000..e0de54504 --- /dev/null +++ b/5.0/designers/language-combining-modifiers/index.html @@ -0,0 +1,2195 @@ + + + + + + + + + + + + + + + + + + + + + + Combining Modifiers - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Combining Modifiers

+

You can apply any number of modifiers to a variable. They will be +applied in the order they are combined, from left to right. They must be +separated with a | (pipe) character.

+
<?php
+
+$smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
+
+

where template is:

+
{$articleTitle}
+{$articleTitle|upper|spacify}
+{$articleTitle|lower|spacify|truncate}
+{$articleTitle|lower|truncate:30|spacify}
+{$articleTitle|lower|spacify|truncate:30:". . ."}
+
+

The above example will output:

+
Smokers are Productive, but Death Cuts Efficiency.
+S M O K E R S   A R ....snip....  H   C U T S   E F F I C I E N C Y .
+s m o k e r s   a r ....snip....  b u t   d e a t h   c u t s...
+s m o k e r s   a r e   p r o d u c t i v e ,   b u t . . .
+s m o k e r s   a r e   p. . .
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/index.html b/5.0/designers/language-custom-functions/index.html new file mode 100644 index 000000000..572416129 --- /dev/null +++ b/5.0/designers/language-custom-functions/index.html @@ -0,0 +1,2194 @@ + + + + + + + + + + + + + + + + + + + + + + Introduction - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ +
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-counter/index.html b/5.0/designers/language-custom-functions/language-function-counter/index.html new file mode 100644 index 000000000..ce6d5bbd3 --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-counter/index.html @@ -0,0 +1,2300 @@ + + + + + + + + + + + + + + + + + + + + + + {counter} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{counter}

+

{counter} is used to print out a count. {counter} will remember the +count on each iteration. You can adjust the number, the interval and the +direction of the count, as well as determine whether to print the +value. You can run multiple counters concurrently by supplying a unique +name for each one. If you do not supply a name, the name "default" will +be used.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
nameNoThe name of the counter
startNoThe initial number to start counting from (defaults to 1)
skipNoThe interval to count by (defaults to 1)
directionNoThe direction to count (up/down) (defaults to 'up')
printNoWhether or not to print the value (defaults to true)
assignNothe template variable the output will be assigned to
+

If you supply the assign attribute, the output of the {counter} +function will be assigned to this template variable instead of being +output to the template.

+

Examples

+
{* initialize the count *}
+{counter start=0 skip=2}<br />
+{counter}<br />
+{counter}<br />
+{counter}<br />
+
+

this will output:

+
0<br />
+2<br />
+4<br />
+6<br />
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-cycle/index.html b/5.0/designers/language-custom-functions/language-function-cycle/index.html new file mode 100644 index 000000000..b45cc4f43 --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-cycle/index.html @@ -0,0 +1,2325 @@ + + + + + + + + + + + + + + + + + + + + + + {cycle} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{cycle}

+

{cycle} is used to alternate a set of values. This makes it easy to +for example, alternate between two or more colors in a table, or cycle +through an array of values.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
nameNoThe name of the cycle
valuesYesThe values to cycle through, either a comma delimited list (see delimiter attribute), or an array of values
printNoWhether to print the value or not (defaults to true)
advanceNoWhether or not to advance to the next value (defaults to true)
delimiterNoThe delimiter to use in the values attribute (defaults to ',')
assignNoThe template variable the output will be assigned to
resetNoThe cycle will be set to the first value and not advanced (defaults to false)
+
    +
  • +

    You can {cycle} through more than one set of values in a template + by supplying a name attribute. Give each {cycle} a unique + name.

    +
  • +
  • +

    You can force the current value not to print with the print + attribute set to FALSE. This would be useful for silently skipping a + value.

    +
  • +
  • +

    The advance attribute is used to repeat a value. When set to + FALSE, the next call to {cycle} will print the same value.

    +
  • +
  • +

    If you supply the assign attribute, the output of the {cycle} + function will be assigned to a template variable instead of being + output to the template.

    +
  • +
+

Examples

+
{section name=rows loop=$data}
+    <tr class="{cycle values="odd,even"}">
+       <td>{$data[rows]}</td>
+    </tr>
+{/section}
+
+

The above template would output:

+
    <tr class="odd">
+       <td>1</td>
+    </tr>
+    <tr class="even">
+       <td>2</td>
+    </tr>
+    <tr class="odd">
+       <td>3</td>
+    </tr>
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-debug/index.html b/5.0/designers/language-custom-functions/language-function-debug/index.html new file mode 100644 index 000000000..4f5e8e43c --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-debug/index.html @@ -0,0 +1,2199 @@ + + + + + + + + + + + + + + + + + + + + + + {debug} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{debug}

+

{debug} dumps the debug console to the page. This works regardless of +the debug settings in the php script. +Since this gets executed at runtime, this is only able to show the +assigned variables; not the templates that are in use. +However, you can see all the currently available variables within the +scope of a template.

+ + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
outputNooutput type, html or javascript (defaults to 'javascript')
+

See also the debugging console page.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-eval/index.html b/5.0/designers/language-custom-functions/language-function-eval/index.html new file mode 100644 index 000000000..ed6750423 --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-eval/index.html @@ -0,0 +1,2319 @@ + + + + + + + + + + + + + + + + + + + + + + {eval} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{eval}

+

{eval} is used to evaluate a variable as a template. This can be used +for things like embedding template tags/variables into variables or +tags/variables into config file variables.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
varYesVariable (or string) to evaluate
assignNoThe template variable the output will be assigned to
+

If you supply the assign attribute, the output of the {eval} +function will be assigned to this template variable instead of being +output to the template.

+
+

Note

+
    +
  • +

    Evaluated variables are treated the same as templates. They follow + the same escapement and security features just as if they were + templates.

    +
  • +
  • +

    Evaluated variables are compiled on every invocation, the compiled + versions are not saved! However, if you have caching + enabled, the output will be cached with the rest of the template.

    +
  • +
  • +

    If the content to evaluate doesn't change often, or is used + repeatedly, consider using + {include file="string:{$template_code}"} instead. This may cache + the compiled state and thus doesn't have to run the (comparably + slow) compiler on every invocation.

    +
  • +
+
+

Examples

+

The contents of the config file, setup.conf.

+
emphstart = <strong>
+emphend = </strong>
+title = Welcome to {$company}'s home page!
+ErrorCity = You must supply a {#emphstart#}city{#emphend#}.
+ErrorState = You must supply a {#emphstart#}state{#emphend#}.
+
+

Where the template is:

+
{config_load file='setup.conf'}
+
+{eval var=$foo}
+{eval var=#title#}
+{eval var=#ErrorCity#}
+{eval var=#ErrorState# assign='state_error'}
+{$state_error}
+
+

The above template will output:

+
This is the contents of foo.
+Welcome to Foobar Pub & Grill's home page!
+You must supply a <strong>city</strong>.
+You must supply a <strong>state</strong>.
+
+

This outputs the server name (in uppercase) and IP. The assigned +variable $str could be from a database query.

+
<?php
+    $str = 'The server name is {$smarty.server.SERVER_NAME|upper} '
+           .'at {$smarty.server.SERVER_ADDR}';
+    $smarty->assign('foo',$str);
+
+

Where the template is:

+
{eval var=$foo}
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-fetch/index.html b/5.0/designers/language-custom-functions/language-function-fetch/index.html new file mode 100644 index 000000000..60c8fefd0 --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-fetch/index.html @@ -0,0 +1,2312 @@ + + + + + + + + + + + + + + + + + + + + + + {fetch} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{fetch}

+

{fetch} is used to retrieve files from the local file system, http, or +ftp and display the contents.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + +
AttributeRequiredDescription
fileYesThe file, http or ftp site to fetch
assignNoThe template variable the output will be assigned to
+
    +
  • +

    If the file name begins with http://, the website page will be + fetched and displayed.

    +
    +

    Note

    +

    This will not support http redirects, be sure to include a +trailing slash on your web page fetches where necessary.

    +
    +
  • +
  • +

    If the file name begins with ftp://, the file will be downloaded + from the ftp server and displayed.

    +
  • +
  • +

    For local files, either a full system file path must be given, or a + path relative to the executed php script.

    +
    +

    Note

    +

    If security is enabled, and you are fetching a file from the local +file system, {fetch} will only allow files from within the +$secure_dir path of the security policy. See the +Security section for details.

    +
    +
  • +
  • +

    If the assign attribute is set, the output of the {fetch} + function will be assigned to this template variable instead of being + output to the template.

    +
  • +
+

Examples

+
{* include some javascript in your template *}
+{fetch file='/export/httpd/www.example.com/docs/navbar.js'}
+
+{* embed some weather text in your template from another web site *}
+{fetch file='http://www.myweather.com/68502/'}
+
+{* fetch a news headline file via ftp *}
+{fetch file='ftp://user:password@ftp.example.com/path/to/currentheadlines.txt'}
+{* as above but with variables *}
+{fetch file="ftp://`$user`:`$password`@`$server`/`$path`"}
+
+{* assign the fetched contents to a template variable *}
+{fetch file='http://www.myweather.com/68502/' assign='weather'}
+{if $weather ne ''}
+  <div id="weather">{$weather}</div>
+{/if}
+
+

See also {capture}, +{eval}, +{assign} and fetch().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-html-checkboxes/index.html b/5.0/designers/language-custom-functions/language-function-html-checkboxes/index.html new file mode 100644 index 000000000..f60d110bb --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-html-checkboxes/index.html @@ -0,0 +1,2371 @@ + + + + + + + + + + + + + + + + + + + + + + {html_checkboxes} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{html_checkboxes}

+

{html_checkboxes} is a custom function +that creates an html checkbox group with provided data. It takes care of +which item(s) are selected by default as well.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
nameNoName of checkbox list (defaults to 'checkbox')
valuesYes, unless using options attributeAn array of values for checkbox buttons
outputYes, unless using options attributeAn array of output for checkbox buttons
selectedNoThe selected checkbox element(s) as a string or array
optionsYes, unless using values and outputAn associative array of values and output
separatorNoString of text to separate each checkbox item
assignNoAssign checkbox tags to an array instead of output
labelsNoAdd <label>-tags to the output (defaults to true)
label_idsNoAdd id-attributes to <label> and <input> to the output (defaults to false)
escapeNoEscape the output / content (values are always escaped) (defaults to true)
strictNoWill make the "extra" attributes disabled and readonly only be set, if they were supplied with either boolean TRUE or string "disabled" and "readonly" respectively (defaults to false)
+
    +
  • +

    Required attributes are values and output, unless you use options instead.

    +
  • +
  • +

    All output is XHTML compliant.

    +
  • +
  • +

    All parameters that are not in the list above are printed as + name/value-pairs inside each of the created <input>-tags.

    +
  • +
+

Examples

+
<?php
+
+$smarty->assign('cust_ids', array(1000,1001,1002,1003));
+$smarty->assign('cust_names', array(
+                                'Joe Schmoe',
+                                'Jack Smith',
+                                'Jane Johnson',
+                                'Charlie Brown')
+                              );
+$smarty->assign('customer_id', 1001);
+
+

where template is

+
{html_checkboxes name='id' values=$cust_ids output=$cust_names selected=$customer_id  separator='<br />'}
+
+

or where PHP code is:

+
<?php
+
+$smarty->assign(
+    'cust_checkboxes', 
+    [
+     1000 => 'Joe Schmoe',
+     1001 => 'Jack Smith',
+     1002 => 'Jane Johnson',
+     1003 => 'Charlie Brown',
+    ]
+);
+$smarty->assign('customer_id', 1001);
+
+

and the template is

+
{html_checkboxes name='id' options=$cust_checkboxes selected=$customer_id separator='<br />'}
+
+

both examples will output:

+
<label><input type="checkbox" name="id[]" value="1000" />Joe Schmoe</label><br />
+<label><input type="checkbox" name="id[]" value="1001" checked="checked" />Jack Smith</label>
+<br />
+<label><input type="checkbox" name="id[]" value="1002" />Jane Johnson</label><br />
+<label><input type="checkbox" name="id[]" value="1003" />Charlie Brown</label><br />
+
+
<?php
+
+$sql = 'select type_id, types from contact_types order by type';
+$smarty->assign('contact_types',$db->getAssoc($sql));
+
+$sql = 'select contact_id, contact_type_id, contact '
+       .'from contacts where contact_id=12';
+$smarty->assign('contact',$db->getRow($sql));
+
+

The results of the database queries above would be output with.

+
{html_checkboxes name='contact_type_id' options=$contact_types selected=$contact.contact_type_id separator='<br />'}
+
+

See also {html_radios} and +{html_options}

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-html-image/index.html b/5.0/designers/language-custom-functions/language-function-html-image/index.html new file mode 100644 index 000000000..8b89396ca --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-html-image/index.html @@ -0,0 +1,2326 @@ + + + + + + + + + + + + + + + + + + + + + + {html_image} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{html_image}

+

{html_image} is a custom function that +generates an HTML <img> tag. The height and width are +automatically calculated from the image file if they are not supplied.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
fileYesname/path to image
heightNoHeight to display image (defaults to actual image height)
widthNoWidth to display image (defaults to actual image width)
basedirnoDirectory to base relative paths from (defaults to web server doc root)
altnoAlternative description of the image
hrefnohref value to link the image to
path_prefixnoPrefix for output path
+
    +
  • +

    basedir is the base directory that relative image paths are based + from. If not given, the web server's document root + $_ENV['DOCUMENT_ROOT'] is used as the base. If security is + enabled, then the image must be located in the $secure_dir path of + the security policy. See the Security + section for details.

    +
  • +
  • +

    href is the href value to link the image to. If link is supplied, + an <a href="LINKVALUE"><a> tag is placed around the image tag.

    +
  • +
  • +

    path_prefix is an optional prefix string you can give the output + path. This is useful if you want to supply a different server name + for the image.

    +
  • +
  • +

    All parameters that are not in the list above are printed as + name/value-pairs inside the created <img> tag.

    +
  • +
+
+

Note

+

{html_image} requires a hit to the disk to read the image and +calculate the height and width. If you don't use template +caching, it is generally better to avoid {html_image} +and leave image tags static for optimal performance.

+
+

Examples

+
{html_image file='pumpkin.jpg'}
+{html_image file='/path/from/docroot/pumpkin.jpg'}
+{html_image file='../path/relative/to/currdir/pumpkin.jpg'}
+
+

Example output of the above template would be:

+
<img src="pumpkin.jpg" alt="" width="44" height="68" />
+<img src="/path/from/docroot/pumpkin.jpg" alt="" width="44" height="68" />
+<img src="../path/relative/to/currdir/pumpkin.jpg" alt="" width="44" height="68" />
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-html-options/index.html b/5.0/designers/language-custom-functions/language-function-html-options/index.html new file mode 100644 index 000000000..631ca8832 --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-html-options/index.html @@ -0,0 +1,2386 @@ + + + + + + + + + + + + + + + + + + + + + + {html_options} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{html_options}

+

{html_options} is a custom function that +creates the html <select><option> group with the assigned data. It +takes care of which item(s) are selected by default as well.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
valuesYes, unless using options attributeAn array of values for dropdown
outputYes, unless using options attributeAn array of output for dropdown
selectedNoThe selected option element(s) as a string or array
optionsYes, unless using values and outputAn associative array of values and output
nameNoName of select group
strictNoWill make the "extra" attributes disabled and readonly only be set, if they were supplied with either boolean TRUE or string "disabled" and "readonly" respectively (defaults to false)
+
    +
  • +

    Required attributes are values and output, unless you use the + combined options instead.

    +
  • +
  • +

    If the optional name attribute is given, the <select></select> + tags are created, otherwise ONLY the <option> list is generated.

    +
  • +
  • +

    If a given value is an array, it will treat it as an html + <optgroup>, and display the groups. Recursion is supported with + <optgroup>.

    +
  • +
  • +

    All parameters that are not in the list above are printed as + name/value-pairs inside the <select> tag. They are ignored if the + optional name is not given.

    +
  • +
  • +

    All output is XHTML compliant.

    +
  • +
+

Examples

+
<?php
+$smarty->assign('myOptions', [
+                                1800 => 'Joe Schmoe',
+                                9904 => 'Jack Smith',
+                                2003 => 'Charlie Brown']
+                                );
+$smarty->assign('mySelect', 9904);
+
+

The following template will generate a drop-down list. Note the presence +of the name attribute which creates the <select> tags.

+
{html_options name=foo options=$myOptions selected=$mySelect}
+
+

Output of the above example would be:

+
<select name="foo">
+    <option value="1800">Joe Schmoe</option>
+    <option value="9904" selected="selected">Jack Smith</option>
+    <option value="2003">Charlie Brown</option>
+</select>   
+
+
<?php
+$smarty->assign('cust_ids', [56,92,13]);
+$smarty->assign('cust_names', [
+                              'Joe Schmoe',
+                              'Jane Johnson',
+                              'Charlie Brown']);
+$smarty->assign('customer_id', 92);
+
+

The above arrays would be output with the following template (note the +use of the php count() function as a +modifier to set the select size).

+
<select name="customer_id" size="{$cust_names|@count}">
+   {html_options values=$cust_ids output=$cust_names selected=$customer_id}
+</select>
+
+

The above example would output:

+
<select name="customer_id" size="3">
+    <option value="56">Joe Schmoe</option>
+    <option value="92" selected="selected">Jane Johnson</option>
+    <option value="13">Charlie Brown</option>
+</select>
+
+
<?php
+
+$sql = 'select type_id, types from contact_types order by type';
+$smarty->assign('contact_types',$db->getAssoc($sql));
+
+$sql = 'select contact_id, name, email, contact_type_id
+        from contacts where contact_id='.$contact_id;
+$smarty->assign('contact',$db->getRow($sql));
+
+

Where a template could be as follows. Note the use of the +truncate modifier.

+
<select name="type_id">
+    <option value='null'>-- none --</option>
+    {html_options options=$contact_types|truncate:20 selected=$contact.type_id}
+</select>
+
+
<?php
+$arr['Sport'] = array(6 => 'Golf', 9 => 'Cricket',7 => 'Swim');
+$arr['Rest']  = array(3 => 'Sauna',1 => 'Massage');
+$smarty->assign('lookups', $arr);
+$smarty->assign('fav', 7);
+
+

The script above and the following template

+
{html_options name=foo options=$lookups selected=$fav}
+
+

would output:

+
<select name="foo">
+    <optgroup label="Sport">
+        <option value="6">Golf</option>
+        <option value="9">Cricket</option>
+        <option value="7" selected="selected">Swim</option>
+    </optgroup>
+    <optgroup label="Rest">
+        <option value="3">Sauna</option>
+        <option value="1">Massage</option>
+    </optgroup>
+</select>
+
+

See also {html_checkboxes} and +{html_radios}

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-html-radios/index.html b/5.0/designers/language-custom-functions/language-function-html-radios/index.html new file mode 100644 index 000000000..076064000 --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-html-radios/index.html @@ -0,0 +1,2369 @@ + + + + + + + + + + + + + + + + + + + + + + {html_radios} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{html_radios}

+

{html_radios} is a custom function that +creates an HTML radio button group. It also takes care of which item is +selected by default as well.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
nameNoName of radio list
valuesYes, unless using options attributeAn array of values for radio buttons
outputYes, unless using options attributeAn array of output for radio buttons
selectedNoThe selected radio element
optionsYes, unless using values and outputAn associative array of values and output
separatorNoString of text to separate each radio item
assignNoAssign radio tags to an array instead of output
labelsNoAdd
label_idsNoAdd id-attributes to <label> and <input> to the output (defaults to false)
escapeNoEscape the output / content (values are always escaped) (defaults to true)
strictNoWill make the "extra" attributes disabled and readonly only be set, if they were supplied with either boolean TRUE or string "disabled" and "readonly" respectively (defaults to false)
+
    +
  • +

    Required attributes are values and output, unless you use + options instead.

    +
  • +
  • +

    All output is XHTML compliant.

    +
  • +
  • +

    All parameters that are not in the list above are output as + name/value-pairs inside each of the created <input>-tags.

    +
  • +
+

Examples

+
<?php
+
+$smarty->assign('cust_ids', array(1000,1001,1002,1003));
+$smarty->assign('cust_names', array(
+                              'Joe Schmoe',
+                              'Jack Smith',
+                              'Jane Johnson',
+                              'Charlie Brown')
+                              );
+$smarty->assign('customer_id', 1001);
+
+

Where template is:

+
{html_radios name='id' values=$cust_ids output=$cust_names
+       selected=$customer_id separator='<br />'}
+
+
<?php
+$smarty->assign('cust_radios', array(
+                               1000 => 'Joe Schmoe',
+                               1001 => 'Jack Smith',
+                               1002 => 'Jane Johnson',
+                               1003 => 'Charlie Brown'));
+$smarty->assign('customer_id', 1001);
+
+

Where template is:

+
{html_radios name='id' options=$cust_radios
+     selected=$customer_id separator='<br />'}
+
+

Both examples will output:

+
<label><input type="radio" name="id" value="1000" />Joe Schmoe</label><br />
+<label><input type="radio" name="id" value="1001" checked="checked" />Jack Smith</label><br />
+<label><input type="radio" name="id" value="1002" />Jane Johnson</label><br />
+<label><input type="radio" name="id" value="1003" />Charlie Brown</label><br />
+
+
<?php
+
+$sql = 'select type_id, types from contact_types order by type';
+$smarty->assign('contact_types',$db->getAssoc($sql));
+
+$sql = 'select contact_id, name, email, contact_type_id '
+        .'from contacts where contact_id='.$contact_id;
+$smarty->assign('contact',$db->getRow($sql));
+
+

The variable assigned from the database above would be output with the +template:

+
{html_radios name='contact_type_id' options=$contact_types
+     selected=$contact.contact_type_id separator='<br />'}
+
+

See also {html_checkboxes} and +{html_options}

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-html-select-date/index.html b/5.0/designers/language-custom-functions/language-function-html-select-date/index.html new file mode 100644 index 000000000..f8dab0d54 --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-html-select-date/index.html @@ -0,0 +1,2474 @@ + + + + + + + + + + + + + + + + + + + + + + {html_select_date} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{html_select_date}

+

{html_select_date} is a custom function +that creates date dropdowns. It can display any or all of: year, month, +and day. All parameters that are not in the list below are printed as +name/value-pairs inside the <select> tags of day, month and year.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameDefaultDescription
prefixDate_What to prefix the var name with
timeWhat date/time to pre-select. Accepts timestamps, DateTime objects or any string parseable by strtotime(). If an array is given, the attributes field_array and prefix are used to identify the array elements to extract year, month and day from. Omitting this parameter or supplying a falsy value will select the current date. To prevent date selection, pass in NULL.
start_yearcurrent yearThe first year in the dropdown, either year number, or relative to current year (+/- N)
end_yearsame as start_yearThe last year in the dropdown, either year number, or relative to current year (+/- N)
display_daysTRUEWhether to display days or not
display_monthsTRUEWhether to display months or not
display_yearsTRUEWhether to display years or not
month_namesList of strings to display for months. array(1 => 'Jan', ..., 12 => 'Dec')
month_format\%BWhat format the month should be in (strftime)
day_format\%02dWhat format the day output should be in (sprintf)
day_value_format\%dWhat format the day value should be in (sprintf)
year_as_textFALSEWhether or not to display the year as text
reverse_yearsFALSEDisplay years in reverse order
field_arrayIf a name is given, the select boxes will be drawn such that the results will be returned to PHP in the form of name[Day], name[Year], name[Month].
day_sizeAdds size attribute to select tag if given
month_sizeAdds size attribute to select tag if given
year_sizeAdds size attribute to select tag if given
all_extraAdds extra attributes to all select/input tags if given
day_extraAdds extra attributes to select/input tags if given
month_extraAdds extra attributes to select/input tags if given
year_extraAdds extra attributes to select/input tags if given
all_idAdds id-attribute to all select/input tags if given
day_idAdds id-attribute to select/input tags if given
month_idAdds id-attribute to select/input tags if given
year_idAdds id-attribute to select/input tags if given
field_orderMDYThe order in which to display the fields
field_separator\nString printed between different fields
month_value_format\%mstrftime() format of the month values, default is %m for month numbers.
all_emptyIf supplied then the first element of any select-box has this value as it's label and "" as it's value. This is useful to make the select-boxes read "Please select" for example.
year_emptyIf supplied then the first element of the year's select-box has this value as it's label and "" as it's value. This is useful to make the select-box read "Please select a year" for example. Note that you can use values like "-MM-DD" as time-attribute to indicate an unselected year.
month_emptyIf supplied then the first element of the month's select-box has this value as it's label and "" as it's value. . Note that you can use values like "YYYY--DD" as time-attribute to indicate an unselected month.
day_emptyIf supplied then the first element of the day's select-box has this value as it's label and "" as it's value. Note that you can use values like "YYYY-MM-" as time-attribute to indicate an unselected day.
+
+

Note

+

There is an useful php function on the date tips page +for converting {html_select_date} form values to a timestamp.

+
+

Exaples

+

Template code

+
{html_select_date}
+
+

This will output:

+
<select name="Date_Month">
+    <option value="1">January</option>
+    <option value="2">February</option>
+    <option value="3">March</option>
+      ..... snipped .....
+    <option value="10">October</option>
+    <option value="11">November</option>
+    <option value="12" selected="selected">December</option>
+</select>
+<select name="Date_Day">
+    <option value="1">01</option>
+    <option value="2">02</option>
+    <option value="3">03</option>
+      ..... snipped .....
+    <option value="11">11</option>
+    <option value="12">12</option>
+    <option value="13" selected="selected">13</option>
+    <option value="14">14</option>
+    <option value="15">15</option>
+      ..... snipped .....
+    <option value="29">29</option>
+    <option value="30">30</option>
+    <option value="31">31</option>
+</select>
+<select name="Date_Year">
+    <option value="2006" selected="selected">2006</option>
+</select>
+
+
{* start and end year can be relative to current year *}
+{html_select_date prefix='StartDate' time=$time start_year='-5'
+       end_year='+1' display_days=false}
+
+

With 2000 as the current year the output:

+
<select name="StartDateMonth">
+    <option value="1">January</option>
+    <option value="2">February</option>
+    .... snipped ....
+    <option value="11">November</option>
+    <option value="12" selected="selected">December</option>
+</select>
+<select name="StartDateYear">
+    <option value="1995">1995</option>
+    .... snipped ....
+    <option value="1999">1999</option>
+    <option value="2000" selected="selected">2000</option>
+    <option value="2001">2001</option>
+</select>
+
+

See also {html_select_time}, +date_format, +$smarty.now and the date tips +page.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-html-select-time/index.html b/5.0/designers/language-custom-functions/language-function-html-select-time/index.html new file mode 100644 index 000000000..e5ad69c6e --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-html-select-time/index.html @@ -0,0 +1,2464 @@ + + + + + + + + + + + + + + + + + + + + + + {html_select_time} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{html_select_time}

+

{html_select_time} is a custom function +that creates time dropdowns for you. It can display any or all of: hour, +minute, second and meridian.

+

The time attribute can have different formats. It can be a unique +timestamp, a string of the format YYYYMMDDHHMMSS or a string that is +parseable by PHP's strtotime().

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameDefaultDescription
prefixTime_What to prefix the var name with
timecurrent timestampWhat date/time to pre-select. Accepts timestamp, DateTime, mysql timestamp or any string parsable by strtotime(). If an array is given, the attributes field_array and prefix are used to identify the array elements to extract hour, minute, second and meridian from.
display_hoursTRUEWhether or not to display hours
display_minutesTRUEWhether or not to display minutes
display_secondsTRUEWhether or not to display seconds
display_meridianTRUEWhether or not to display meridian (am/pm)
use_24_hoursTRUEWhether or not to use 24 hour clock
minute_interval1Number interval in minute dropdown
second_interval1Number interval in second dropdown
hour_format\%02dWhat format the hour label should be in (sprintf)
hour_value_format\%20dWhat format the hour value should be in (sprintf)
minute_format\%02dWhat format the minute label should be in (sprintf)
minute_value_format\%20dWhat format the minute value should be in (sprintf)
second_format\%02dWhat format the second label should be in (sprintf)
second_value_format\%20dWhat format the second value should be in (sprintf)
field_arrayn/aOutputs values to array of this name
all_extranullAdds extra attributes to select/input tags if given
hour_extranullAdds extra attributes to select/input tags if given
minute_extranullAdds extra attributes to select/input tags if given
second_extranullAdds extra attributes to select/input tags if given
meridian_extranullAdds extra attributes to select/input tags if given
field_separator\nString printed between different fields
option_separator\nString printed between different options of a field
all_idnullAdds id-attribute to all select/input tags if given
hour_idnullAdds id-attribute to select/input tags if given
minute_idnullAdds id-attribute to select/input tags if given
second_idnullAdds id-attribute to select/input tags if given
meridian_idnullAdds id-attribute to select/input tags if given
all_emptynullIf supplied then the first element of any select-box has this value as it's label and "" as it's value. This is useful to make the select-boxes read "Please select" for example.
hour_emptynullIf supplied then the first element of the hour's select-box has this value as it's label and "" as it's value. This is useful to make the select-box read "Please select an hour" for example.
minute_emptynullIf supplied then the first element of the minute's select-box has this value as it's label and "" as it's value. This is useful to make the select-box read "Please select an minute" for example.
second_emptynullIf supplied then the first element of the second's select-box has this value as it's label and "" as it's value. This is useful to make the select-box read "Please select an second" for example.
meridian_emptynullIf supplied then the first element of the meridian's select-box has this value as it's label and "" as it's value. This is useful to make the select-box read "Please select an meridian" for example.
+

Examples

+
{html_select_time use_24_hours=true}
+
+

At 9:20 and 23 seconds in the morning the template above would output:

+
<select name="Time_Hour">
+    <option value="00">00</option>
+    <option value="01">01</option>
+    ... snipped ....
+    <option value="08">08</option>
+    <option value="09" selected>09</option>
+    <option value="10">10</option>
+    ... snipped ....
+    <option value="22">22</option>
+    <option value="23">23</option>
+</select>
+<select name="Time_Minute">
+    <option value="00">00</option>
+    <option value="01">01</option>
+    ... snipped ....
+    <option value="19">19</option>
+    <option value="20" selected>20</option>
+    <option value="21">21</option>
+    ... snipped ....
+    <option value="58">58</option>
+    <option value="59">59</option>
+</select>
+<select name="Time_Second">
+    <option value="00">00</option>
+    <option value="01">01</option>
+    ... snipped ....
+    <option value="22">22</option>
+    <option value="23" selected>23</option>
+    <option value="24">24</option>
+    ... snipped ....
+    <option value="58">58</option>
+    <option value="59">59</option>
+</select>
+<select name="Time_Meridian">
+    <option value="am" selected>AM</option>
+    <option value="pm">PM</option>
+</select>
+
+

See also $smarty.now, +{html_select_date} and the +date tips page.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-html-table/index.html b/5.0/designers/language-custom-functions/language-function-html-table/index.html new file mode 100644 index 000000000..a070287f4 --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-html-table/index.html @@ -0,0 +1,2374 @@ + + + + + + + + + + + + + + + + + + + + + + {html_table} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{html_table}

+

{html_table} is a custom function that +dumps an array of data into an HTML <table>.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
loopYesArray of data to loop through
colsNoNumber of columns in the table or a comma-separated list of column heading names or an array of column heading names.if the cols-attribute is empty, but rows are given, then the number of cols is computed by the number of rows and the number of elements to display to be just enough cols to display all elements. If both, rows and cols, are omitted cols defaults to 3. if given as a list or array, the number of columns is computed from the number of elements in the list or array.
rowsNoNumber of rows in the table. if the rows-attribute is empty, but cols are given, then the number of rows is computed by the number of cols and the number of elements to display to be just enough rows to display all elements.
innerNoDirection of consecutive elements in the loop-array to be rendered. cols means elements are displayed col-by-col. rows means elements are displayed row-by-row.
captionNoText to be used for the <caption> element of the table
table_attrNoAttributes for <table> tag (defaults to 'border="1"')
th_attrNoAttributes for <th> tag (arrays are cycled)
tr_attrNoattributes for <tr> tag (arrays are cycled)
td_attrNoAttributes for <td> tag (arrays are cycled)
trailpadNoValue to pad the trailing cells on last row with (if any) (defaults to ' ')
hdirNoDirection of each row to be rendered. possible values: right (left-to-right), and left (right-to-left) (defaults to 'right')
vdirNoDirection of each column to be rendered. possible values: down (top-to-bottom), up (bottom-to-top) (defaults to 'down')
+
    +
  • +

    The cols attribute determines how many columns will be in the + table.

    +
  • +
  • +

    The table_attr, tr_attr and td_attr values determine the + attributes given to the <table>, <tr> and <td> tags.

    +
  • +
  • +

    If tr_attr or td_attr are arrays, they will be cycled through.

    +
  • +
  • +

    trailpad is the value put into the trailing cells on the last + table row if there are any present.

    +
  • +
+

Examples

+
<?php
+$smarty->assign( 'data', array(1,2,3,4,5,6,7,8,9) );
+$smarty->assign( 'tr', array('bgcolor="#eeeeee"','bgcolor="#dddddd"') );
+$smarty->display('index.tpl');
+
+

The variables assigned from php could be displayed as these three +examples demonstrate. Each example shows the template followed by +output.

+

Example 1 +

{html_table loop=$data}
+
+
<table border="1">
+    <tbody>
+        <tr><td>1</td><td>2</td><td>3</td></tr>
+        <tr><td>4</td><td>5</td><td>6</td></tr>
+        <tr><td>7</td><td>8</td><td>9</td></tr>
+    </tbody>
+</table>
+

+

Example 2 +

{html_table loop=$data cols=4 table_attr='border="0"'}
+
+
<table border="0">
+    <tbody>
+        <tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
+        <tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>
+        <tr><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+    </tbody>
+</table>
+

+

Example 3 +

{html_table loop=$data cols="first,second,third,fourth" tr_attr=$tr}
+
+
<table border="1">
+    <thead>
+        <tr>
+        <th>first</th><th>second</th><th>third</th><th>fourth</th>
+        </tr>
+    </thead>
+    <tbody>
+        <tr bgcolor="#eeeeee"><td>1</td><td>2</td><td>3</td><td>4</td></tr>
+        <tr bgcolor="#dddddd"><td>5</td><td>6</td><td>7</td><td>8</td></tr>
+        <tr bgcolor="#eeeeee"><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+    </tbody>
+</table>
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-mailto/index.html b/5.0/designers/language-custom-functions/language-function-mailto/index.html new file mode 100644 index 000000000..0a9f148d1 --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-mailto/index.html @@ -0,0 +1,2333 @@ + + + + + + + + + + + + + + + + + + + + + + {mailto} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{mailto}

+

{mailto} automates the creation of a mailto: anchor links and +optionally encodes them. Encoding emails makes it more difficult for web +spiders to lift email addresses off of a site.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
addressYesThe e-mail address
textNoThe text to display, default is the e-mail address
encodeNoHow to encode the e-mail. Can be one of none, hex, javascript or javascript_charcode.
ccNoEmail addresses to carbon copy, separate entries by a comma.
bccNoEmail addresses to blind carbon copy, separate entries by a comma
subjectNoEmail subject
newsgroupsNoNewsgroups to post to, separate entries by a comma.
followuptoNoAddresses to follow up to, separate entries by a comma.
extraNoAny extra information you want passed to the link, such as style sheet classes
+
+

Note

+

Javascript is probably the most thorough form of encoding, although +you can use hex encoding too.

+
+

Examples

+
{mailto address="me@example.com"}
+<a href="mailto:me@example.com" >me@example.com</a>
+
+{mailto address="me@example.com" text="send me some mail"}
+<a href="mailto:me@example.com" >send me some mail</a>
+
+{mailto address="me@example.com" encode="javascript"}
+    <script>
+   eval(unescape('%64%6f% ... snipped ...%61%3e%27%29%3b'))
+</script>
+
+{mailto address="me@example.com" encode="hex"}
+<a href="mailto:%6d%65.. snipped..3%6f%6d">&#x6d;&..snipped...#x6f;&#x6d;</a>
+
+{mailto address="me@example.com" subject="Hello to you!"}
+<a href="mailto:me@example.com?subject=Hello%20to%20you%21" >me@example.com</a>
+
+{mailto address="me@example.com" cc="you@example.com,they@example.com"}
+<a href="mailto:me@example.com?cc=you@example.com,they@example.com" >me@example.com</a>
+
+{mailto address="me@example.com" extra='class="email"'}
+<a href="mailto:me@example.com" class="email">me@example.com</a>
+
+{mailto address="me@example.com" encode="javascript_charcode"}
+    <script>
+    {document.write(String.fromCharCode(60,97, ... snipped ....60,47,97,62))}
+</script>
+
+

See also escape, +{textformat} and obfuscating email +addresses.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-math/index.html b/5.0/designers/language-custom-functions/language-function-math/index.html new file mode 100644 index 000000000..eb1cdaae3 --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-math/index.html @@ -0,0 +1,2341 @@ + + + + + + + + + + + + + + + + + + + + + + {math} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{math}

+

{math} allows the template designer to do math equations in the +template.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameRequiredDescription
equationYesThe equation to execute
formatNoThe format of the result (sprintf)
varYesEquation variable value
assignNoTemplate variable the output will be assigned to
[var ...]YesEquation variable value
+
    +
  • +

    Any numeric template variables may be used in the equations, and the + result is printed in place of the tag.

    +
  • +
  • +

    The variables used in the equation are passed as parameters, which + can be template variables or static values.

    +
  • +
  • +

    +, -, /, *, abs, ceil, cos, exp, floor, log, log10, max, min, pi, + pow, rand, round, sin, sqrt, srans and tan are all valid operators. + Check the PHP documentation for further information on these + math functions.

    +
  • +
  • +

    If you supply the assign attribute, the output of the {math} + function will be assigned to this template variable instead of being + output to the template.

    +
  • +
+
+

Note

+

{math} is an expensive function in performance due to its use of the +php eval() function. Doing the math in PHP +is much more efficient, so whenever possible do the math calculations +in the script and assign() the results to the +template. Definitely avoid repetitive {math} function calls, eg +within {section} loops.

+
+

Examples

+

Example 1 +

{* $height=4, $width=5 *}
+
+{math equation="x + y" x=$height y=$width}
+

+

The above example will output:

+
9
+
+

Example 2

+
{* $row_height = 10, $row_width = 20, #col_div# = 2, assigned in template *}
+
+{math equation="height * width / division"
+    height=$row_height
+    width=$row_width
+    division=#col_div#}
+
+

The above example will output:

+
100
+
+

Example 3

+
{* you can use parenthesis *}
+
+{math equation="(( x + y ) / z )" x=2 y=10 z=2}
+
+

The above example will output:

+
6
+
+

Example 4

+
{* you can supply a format parameter in sprintf format *}
+
+{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
+
+

The above example will output: +

9.44
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-custom-functions/language-function-textformat/index.html b/5.0/designers/language-custom-functions/language-function-textformat/index.html new file mode 100644 index 000000000..ae90b3ebf --- /dev/null +++ b/5.0/designers/language-custom-functions/language-function-textformat/index.html @@ -0,0 +1,2427 @@ + + + + + + + + + + + + + + + + + + + + + + {textformat} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

{textformat}

+

{textformat} is a block function used to +format text. It basically cleans up spaces and special characters, and +formats paragraphs by wrapping at a boundary and indenting lines.

+

You can set the parameters explicitly, or use a preset style. Currently, +"email" is the only available style.

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameDefaultDescription
stylen/aPreset style
indent0The number of chars to indent every line
indent_first0The number of chars to indent the first line
indent_char(single space)The character (or string of chars) to indent with
wrap80How many characters to wrap each line to
wrap_char\nThe character (or string of chars) to break each line with
wrap_cutFALSEIf TRUE, wrap will break the line at the exact character instead of at a word boundary
assignn/aThe template variable the output will be assigned to
+

Examples

+
{textformat wrap=40}
+
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+
+This is bar.
+
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+
+{/textformat}
+
+

The above example will output:

+
This is foo. This is foo. This is foo.
+This is foo. This is foo. This is foo.
+
+This is bar.
+
+bar foo bar foo foo. bar foo bar foo
+foo. bar foo bar foo foo. bar foo bar
+foo foo. bar foo bar foo foo. bar foo
+bar foo foo. bar foo bar foo foo.
+
+
{textformat wrap=40 indent=4}
+
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+
+This is bar.
+
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+
+{/textformat}
+
+

The above example will output:

+
    This is foo. This is foo. This is
+    foo. This is foo. This is foo. This
+    is foo.
+
+    This is bar.
+
+    bar foo bar foo foo. bar foo bar foo
+    foo. bar foo bar foo foo. bar foo
+    bar foo foo. bar foo bar foo foo.
+    bar foo bar foo foo. bar foo bar
+    foo foo.
+
+
{textformat wrap=40 indent=4 indent_first=4}
+
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+
+This is bar.
+
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+
+{/textformat}
+
+

The above example will output:

+
   This is foo. This is foo. This
+   is foo. This is foo. This is foo.
+   This is foo.
+
+   This is bar.
+
+   bar foo bar foo foo. bar foo bar
+   foo foo. bar foo bar foo foo. bar
+   foo bar foo foo. bar foo bar foo
+   foo. bar foo bar foo foo. bar foo
+   bar foo foo.
+
+
{textformat style="email"}
+
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+
+This is bar.
+
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+bar foo bar foo     foo.
+
+{/textformat}
+
+

The above example will output:

+
This is foo. This is foo. This is foo. This is foo. This is foo. This is
+foo.
+
+This is bar.
+
+bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo
+bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo
+foo.
+
+

See also {strip} and +wordwrap.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/index.html b/5.0/designers/language-modifiers/index.html new file mode 100644 index 000000000..45449bccf --- /dev/null +++ b/5.0/designers/language-modifiers/index.html @@ -0,0 +1,2323 @@ + + + + + + + + + + + + + + + + + + + + + + Introduction - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Variable Modifiers

+

Variable modifiers can be applied to +variables, custom functions +or strings. To apply a modifier, +specify the value followed by a | (pipe) and the modifier name. A +modifier may accept additional parameters that affect its behavior. +These parameters follow the modifier name and are separated by a : +(colon). Also, all php-functions can be used as modifiers implicitly +(more below) and modifiers can be +combined.

+ +

Examples

+
{* apply modifier to a variable *}
+{$title|upper}
+
+{* modifier with parameters *}
+{$title|truncate:40:"..."}
+
+{* apply modifier to a function parameter *}
+{html_table loop=$myvar|upper}
+
+{* with parameters *}
+{html_table loop=$myvar|truncate:40:"..."}
+
+{* apply modifier to literal string *}
+{"foobar"|upper}
+
+{* using date_format to format the current date *}
+{$smarty.now|date_format:"%Y/%m/%d"}
+
+{* apply modifier to a custom function *}
+{mailto|upper address="smarty@example.com"}
+
+{* using  php's str_repeat *}
+{"="|str_repeat:80}
+
+{* php's count *}
+{$myArray|@count}
+
+{* this will uppercase and truncate the whole array *}
+<select name="name_id">
+{html_options output=$my_array|upper|truncate:20}
+</select>
+
+
    +
  • +

    Modifiers can be applied to any type of variables, including arrays + and objects.

    +
    +

    Note

    +

    The default behavior was changed with Smarty 3. In Smarty 2.x, you +had to use an "@" symbol to apply a modifier to an array, such +as {$articleTitle|@count}. With Smarty 3, the "@" is no +longer necessary, and is ignored.

    +

    If you want a modifier to apply to each individual item of an +array, you will either need to loop the array in the template, or +provide for this functionality inside your modifier function.

    +

    Note

    +

    Second, in Smarty 2.x, modifiers were applied to the result of +math expressions like {8+2}, meaning that +{8+2|count_characters} would give 2, as 8+2=10 and 10 is two +characters long. With Smarty 3, modifiers are applied to the +variables or atomic expressions before executing the calculations, +so since 2 is one character long, {8+2|count_characters} +gives 9. To get the old result use parentheses like +{(8+2)|count_characters}.

    +
    +
  • +
  • +

    Custom modifiers can be registered + with the registerPlugin() + function.

    +
  • +
+

See also registerPlugin(), combining +modifiers. and extending smarty with +plugins

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-capitalize/index.html b/5.0/designers/language-modifiers/language-modifier-capitalize/index.html new file mode 100644 index 000000000..e58f8be9c --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-capitalize/index.html @@ -0,0 +1,2298 @@ + + + + + + + + + + + + + + + + + + + + + + capitalize - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

capitalize

+

This is used to capitalize the first letter of all words in a variable. +This is similar to the PHP ucwords() +function.

+

Basic usage

+
{$myVar|capitalize}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeRequiredDescription
1booleanNoThis determines whether or not words with digits will be uppercased
2booleanNoThis determines whether or not Capital letters within words should be lowercased, e.g. "aAa" to "Aaa"
+

Examples

+
<?php
+
+    $smarty->assign('articleTitle', 'next x-men film, x3, delayed.');
+
+

Where the template is:

+
    {$articleTitle}
+    {$articleTitle|capitalize}
+    {$articleTitle|capitalize:true}
+
+

Will output:

+
    next x-men film, x3, delayed.
+    Next X-Men Film, x3, Delayed.
+    Next X-Men Film, X3, Delayed.
+
+

See also lower and +upper

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-cat/index.html b/5.0/designers/language-modifiers/language-modifier-cat/index.html new file mode 100644 index 000000000..8a005fa71 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-cat/index.html @@ -0,0 +1,2284 @@ + + + + + + + + + + + + + + + + + + + + + + cat - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

cat

+

This value is concatenated to the given variable.

+

Basic usage

+
{$myVar|cat:' units'}
+
+

Parameters

+ + + + + + + + + + + + + + + + + +
ParameterTypeRequiredDescription
1stringNoThis value to concatenate to the given variable.
+

Examples

+
<?php
+
+    $smarty->assign('articleTitle', "Psychics predict world didn't end");
+
+

Where template is:

+
    {$articleTitle|cat:' yesterday.'}
+
+

Will output:

+
    Psychics predict world didn't end yesterday.
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-count-characters/index.html b/5.0/designers/language-modifiers/language-modifier-count-characters/index.html new file mode 100644 index 000000000..812c86aab --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-count-characters/index.html @@ -0,0 +1,2291 @@ + + + + + + + + + + + + + + + + + + + + + + count_characters - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

count_characters

+

This is used to count the number of characters in a variable.

+

Basic usage

+
{$myVar|count_characters}
+
+

Parameters

+ + + + + + + + + + + + + + + + + +
ParameterTypeRequiredDescription
1booleanNoThis determines whether to include whitespace characters in the count.
+

Examples

+
<?php
+
+    $smarty->assign('articleTitle', 'Cold Wave Linked to Temperatures.');
+
+

Where template is:

+
    {$articleTitle}
+    {$articleTitle|count_characters}
+    {$articleTitle|count_characters:true}
+
+

Will output:

+
    Cold Wave Linked to Temperatures.
+    29
+    33
+
+

See also count_words, +count_sentences and +count_paragraphs.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-count-paragraphs/index.html b/5.0/designers/language-modifiers/language-modifier-count-paragraphs/index.html new file mode 100644 index 000000000..8b4c3f6ab --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-count-paragraphs/index.html @@ -0,0 +1,2261 @@ + + + + + + + + + + + + + + + + + + + + + + count_paragraphs - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

count_paragraphs

+

This is used to count the number of paragraphs in a variable.

+

Basic usage

+
{$myVar|count_paragraphs}
+
+

Examples

+
<?php
+
+    $smarty->assign('articleTitle',
+                     "War Dims Hope for Peace. Child's Death Ruins Couple's Holiday.\n\n
+                     Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation."
+                    );
+
+

Where template is:

+
    {$articleTitle}
+    {$articleTitle|count_paragraphs}
+
+

Will output:

+
    War Dims Hope for Peace. Child's Death Ruins Couple's Holiday.
+
+    Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation.
+    2
+
+

See also count_characters, +count_sentences and +count_words.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-count-sentences/index.html b/5.0/designers/language-modifiers/language-modifier-count-sentences/index.html new file mode 100644 index 000000000..469fdc400 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-count-sentences/index.html @@ -0,0 +1,2260 @@ + + + + + + + + + + + + + + + + + + + + + + count_sentences - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

count_sentences

+

This is used to count the number of sentences in a variable. A sentence +being delimited by a dot, question- or exclamation-mark (.?!).

+

Basic usage

+
{$myVar|count_sentences}
+
+

Examples

+
<?php
+
+    $smarty->assign('articleTitle',
+                     'Two Soviet Ships Collide - One Dies.
+                     Enraged Cow Injures Farmer with Axe.'
+                     );
+
+

Where template is:

+
    {$articleTitle}
+    {$articleTitle|count_sentences}
+
+

Will output:

+
    Two Soviet Ships Collide - One Dies. Enraged Cow Injures Farmer with Axe.
+    2
+
+

See also count_characters, +count_paragraphs and +count_words.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-count-words/index.html b/5.0/designers/language-modifiers/language-modifier-count-words/index.html new file mode 100644 index 000000000..6e8fd0893 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-count-words/index.html @@ -0,0 +1,2256 @@ + + + + + + + + + + + + + + + + + + + + + + count_words - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

count_words

+

This is used to count the number of words in a variable.

+

Basic usage

+
{$myVar|count_words}
+
+

Examples

+
<?php
+
+    $smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');
+
+

Where template is:

+
    {$articleTitle}
+    {$articleTitle|count_words}
+
+

This will output:

+
    Dealers Will Hear Car Talk at Noon.
+    7
+
+

See also count_characters, +count_paragraphs and +count_sentences.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-date-format/index.html b/5.0/designers/language-modifiers/language-modifier-date-format/index.html new file mode 100644 index 000000000..32e09c78a --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-date-format/index.html @@ -0,0 +1,2410 @@ + + + + + + + + + + + + + + + + + + + + + + date_format - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

date_format

+

This formats a date and time into the given +strftime() format. Dates can be passed to +Smarty as unix timestamps, DateTime +objects, mysql timestamps or any string +made up of month day year, parsable by php\'s +strtotime(). Designers can then use +date_format to have complete control of the formatting of the date. If +the date passed to date_format is empty and a second parameter is +passed, that will be used as the date to format.

+

Basic usage

+
{$myVar|date_format:"%Y-%m-%d"}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredDefaultDescription
1stringNo%b %e, %YThis is the format for the outputted date.
2stringNon/aThis is the default date if the input is empty.
+
+

Note

+

Since Smarty-2.6.10 numeric values passed to date_format are +always (except for mysql timestamps, see below) interpreted as a +unix timestamp.

+

Before Smarty-2.6.10 numeric strings that where also parsable by +strtotime() in php (like YYYYMMDD) where sometimes (depending on +the underlying implementation of strtotime()) interpreted as date +strings and NOT as timestamps.

+

The only exception are mysql timestamps: They are also numeric only +and 14 characters long (YYYYMMDDHHMMSS), mysql timestamps have +precedence over unix timestamps.

+

Note

+

date_format is essentially a wrapper to PHP's +strftime() function. You may have more +or less conversion specifiers available depending on your system's +strftime() function where PHP was +compiled. Check your system\'s manpage for a full list of valid +specifiers. However, a few of the specifiers are emulated on Windows. +These are: %D, %e, %h, %l, %n, %r, %R, %t, %T.

+
+

Examples

+
<?php
+
+$config['date'] = '%I:%M %p';
+$config['time'] = '%H:%M:%S';
+$smarty->assign('config', $config);
+$smarty->assign('yesterday', strtotime('-1 day'));
+
+

This template uses $smarty.now to +get the current time:

+
{$smarty.now|date_format}
+{$smarty.now|date_format:"%D"}
+{$smarty.now|date_format:$config.date}
+{$yesterday|date_format}
+{$yesterday|date_format:"%A, %B %e, %Y"}
+{$yesterday|date_format:$config.time}
+
+

This above will output:

+
Jan 1, 2022
+01/01/22
+02:33 pm
+Dec 31, 2021
+Monday, December 1, 2021
+14:33:00
+
+

Conversion specifiers

+

date_format conversion specifiers:

+
    +
  • %a - abbreviated weekday name according to the current locale
  • +
  • %A - full weekday name according to the current locale
  • +
  • %b - abbreviated month name according to the current locale
  • +
  • %B - full month name according to the current locale
  • +
  • %c - preferred date and time representation for the current locale
  • +
  • %C - century number (the year divided by 100 and truncated to an + integer, range 00 to 99)
  • +
  • %d - day of the month as a decimal number (range 01 to 31)
  • +
  • %D - same as %m/%d/%y
  • +
  • %e - day of the month as a decimal number, a single digit is + preceded by a space (range 1 to 31)
  • +
  • %g - Week-based year within century [00,99]
  • +
  • %G - Week-based year, including the century [0000,9999]
  • +
  • %h - same as %b
  • +
  • %H - hour as a decimal number using a 24-hour clock (range 00 + to 23)
  • +
  • %I - hour as a decimal number using a 12-hour clock (range 01 + to 12)
  • +
  • %j - day of the year as a decimal number (range 001 to 366)
  • +
  • %k - Hour (24-hour clock) single digits are preceded by a blank. + (range 0 to 23)
  • +
  • %l - hour as a decimal number using a 12-hour clock, single digits + preceded by a space (range 1 to 12)
  • +
  • %m - month as a decimal number (range 01 to 12)
  • +
  • %M - minute as a decimal number
  • +
  • %n - newline character
  • +
  • %p - either 'am' or 'pm' according to the given time value, or + the corresponding strings for the current locale
  • +
  • %r - time in a.m. and p.m. notation
  • +
  • %R - time in 24 hour notation
  • +
  • %S - second as a decimal number
  • +
  • %t - tab character
  • +
  • %T - current time, equal to %H:%M:%S
  • +
  • %u - weekday as a decimal number [1,7], with 1 representing + Monday
  • +
  • %U - week number of the current year as a decimal number, starting + with the first Sunday as the first day of the first week
  • +
  • %V - The ISO 8601:1988 week number of the current year as a decimal + number, range 01 to 53, where week 1 is the first week that has at + least 4 days in the current year, and with Monday as the first day + of the week.
  • +
  • %w - day of the week as a decimal, Sunday being 0
  • +
  • %W - week number of the current year as a decimal number, starting + with the first Monday as the first day of the first week
  • +
  • %x - preferred date representation for the current locale without + the time
  • +
  • %X - preferred time representation for the current locale without + the date
  • +
  • %y - year as a decimal number without a century (range 00 to 99)
  • +
  • %Y - year as a decimal number including the century
  • +
  • %Z - time zone or name or abbreviation
  • +
  • %% - a literal '%' character
  • +
+

See also $smarty.now, +strftime(), +{html_select_date} and the +date tips page.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-default/index.html b/5.0/designers/language-modifiers/language-modifier-default/index.html new file mode 100644 index 000000000..b854a60f6 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-default/index.html @@ -0,0 +1,2295 @@ + + + + + + + + + + + + + + + + + + + + + + default - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

default

+

This is used to set a default value for a variable. If the variable is +unset or an empty string, the given default value is printed instead. +Default takes the one argument.

+

Basic usage

+
{$myVar|default:"(none)"}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + +
ParameterTypeRequiredDefaultDescription
1stringNoemptyThis is the default value to output if the variable is empty.
+

Examples

+
<?php
+
+    $smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');
+    $smarty->assign('email', '');
+
+

Where template is:

+
{$articleTitle|default:'no title'}
+{$myTitle|default:'no title'}
+{$email|default:'No email address available'}
+
+

Will output:

+
Dealers Will Hear Car Talk at Noon.
+no title
+No email address available
+
+

See also the default variable handling and +the blank variable handling pages.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-escape/index.html b/5.0/designers/language-modifiers/language-modifier-escape/index.html new file mode 100644 index 000000000..f5c5ef427 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-escape/index.html @@ -0,0 +1,2341 @@ + + + + + + + + + + + + + + + + + + + + + + escape - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

escape

+

escape is used to encode or escape a variable to html, url, +single quotes, hex, hexentity, javascript and mail. By default +its html.

+

Basic usage

+
{$myVar|escape}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredPossible ValuesDefaultDescription
1stringNohtml, htmlall, url, urlpathinfo, quotes, hex, hexentity, javascript, mailhtmlThis is the escape format to use.
2stringNoISO-8859-1, UTF-8, and any character set supported by htmlentities()UTF-8The character set encoding passed to htmlentities() et. al.
3booleanNoFALSETRUEDouble encode entities from & to &amp; (applies to html and htmlall only)
+

Examples

+
<?php
+
+$smarty->assign('articleTitle',
+                "'Stiff Opposition Expected to Casketless Funeral Plan'"
+                );
+$smarty->assign('EmailAddress','smarty@example.com');
+
+

These are example escape template lines followed by the output

+
{$articleTitle}
+'Stiff Opposition Expected to Casketless Funeral Plan'
+
+{$articleTitle|escape}
+&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;
+
+{$articleTitle|escape:'html'}    {* escapes  & " ' < > *}
+&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;
+
+{$articleTitle|escape:'htmlall'} {* escapes ALL html entities *}
+&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;
+
+<a href="?title={$articleTitle|escape:'url'}">click here</a>
+<a
+href="?title=%27Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan%27">click here</a>
+
+{$articleTitle|escape:'quotes'}
+\'Stiff Opposition Expected to Casketless Funeral Plan\'
+
+<a href="mailto:{$EmailAddress|escape:"hex"}">{$EmailAddress|escape:"hexentity"}</a>
+{$EmailAddress|escape:'mail'}    {* this converts to email to text *}
+<a href="mailto:%62%6f%..snip..%65%74">&#x62;&#x6f;&#x62..snip..&#x65;&#x74;</a>
+
+{'mail@example.com'|escape:'mail'}
+smarty [AT] example [DOT] com
+
+{* the "rewind" parameter registers the current location *}
+<a href="$my_path?page=foo&rewind={$my_uri|escape:url}">click here</a>
+
+

This snippet is useful for emails, but see also +{mailto}

+
{* email address mangled *}
+<a href="mailto:{$EmailAddress|escape:'hex'}">{$EmailAddress|escape:'mail'}</a>
+
+

See also escaping smarty parsing, +{mailto} and the obfuscating email +addresses page.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-from-charset/index.html b/5.0/designers/language-modifiers/language-modifier-from-charset/index.html new file mode 100644 index 000000000..3ab5004c7 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-from-charset/index.html @@ -0,0 +1,2256 @@ + + + + + + + + + + + + + + + + + + + + + + from_charset - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

from_charset

+

from_charset is used to transcode a string from a given charset to the +internal charset. This is the exact opposite of the to_charset +modifier.

+

Parameters

+ + + + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredPossible ValuesDefaultDescription
1stringNoISO-8859-1, UTF-8, and any character set supported by mb_convert_encoding()ISO-8859-1The charset encoding the value is supposed to be decoded from
+
+

Note

+

Charset encoding should be handled by the application itself. This +modifier should only be used in cases where the application cannot +anticipate that a certain string is required in another encoding.

+
+

See also Configuring Smarty, to_charset +modifier.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-indent/index.html b/5.0/designers/language-modifiers/language-modifier-indent/index.html new file mode 100644 index 000000000..d2627c066 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-indent/index.html @@ -0,0 +1,2323 @@ + + + + + + + + + + + + + + + + + + + + + + indent - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

indent

+

This indents a string on each line, default is 4. As an optional +parameter, you can specify the number of characters to indent. As an +optional second parameter, you can specify the character to use to +indent with. For example: use "\t" for a tab.

+

Basic usage

+
{$myVar|indent:4}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredDefaultDescription
1integerNo4This determines how many characters to indent to.
2stringNo(one space)This is the character used to indent with.
+

Examples

+
<?php
+
+$smarty->assign('articleTitle',
+                'NJ judge to rule on nude beach.
+Sun or rain expected today, dark tonight.
+Statistics show that teen pregnancy drops off significantly after 25.'
+                );
+
+

Where template is:

+
{$articleTitle}
+
+{$articleTitle|indent}
+
+{$articleTitle|indent:10}
+
+{$articleTitle|indent:1:"\t"}
+
+

Will output:

+
NJ judge to rule on nude beach.
+Sun or rain expected today, dark tonight.
+Statistics show that teen pregnancy drops off significantly after 25.
+
+    NJ judge to rule on nude beach.
+    Sun or rain expected today, dark tonight.
+    Statistics show that teen pregnancy drops off significantly after 25.
+
+          NJ judge to rule on nude beach.
+          Sun or rain expected today, dark tonight.
+          Statistics show that teen pregnancy drops off significantly after 25.
+
+        NJ judge to rule on nude beach.
+        Sun or rain expected today, dark tonight.
+        Statistics show that teen pregnancy drops off significantly after 25.
+
+

See also strip, +wordwrap and +spacify.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-lower/index.html b/5.0/designers/language-modifiers/language-modifier-lower/index.html new file mode 100644 index 000000000..b4990510e --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-lower/index.html @@ -0,0 +1,2256 @@ + + + + + + + + + + + + + + + + + + + + + + lower - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

lower

+

This is used to lowercase a variable. This is equivalent to the PHP +strtolower() function.

+

Basic usage

+
{$myVar|lower}
+
+

Examples

+
<?php
+
+$smarty->assign('articleTitle', 'Two Convicts Evade Noose, Jury Hung.');
+
+

Where template is:

+
{$articleTitle}
+{$articleTitle|lower}
+
+

This will output:

+
Two Convicts Evade Noose, Jury Hung.
+two convicts evade noose, jury hung.
+
+

See also upper and +capitalize.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-nl2br/index.html b/5.0/designers/language-modifiers/language-modifier-nl2br/index.html new file mode 100644 index 000000000..cb76ab26c --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-nl2br/index.html @@ -0,0 +1,2258 @@ + + + + + + + + + + + + + + + + + + + + + + nl2br - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

nl2br

+

All "\n" line breaks will be converted to html <br /> tags in the +given variable. This is equivalent to the PHP\'s +nl2br() function.

+

Basic usage

+
{$myVar|nl2br}
+
+

Examples

+
<?php
+
+$smarty->assign('articleTitle',
+                "Sun or rain expected\ntoday, dark tonight"
+                );
+
+

Where the template is:

+
{$articleTitle|nl2br}
+
+

Will output:

+
Sun or rain expected<br />today, dark tonight
+
+

See also word_wrap, +count_paragraphs and +count_sentences.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-regex-replace/index.html b/5.0/designers/language-modifiers/language-modifier-regex-replace/index.html new file mode 100644 index 000000000..42a3436a1 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-regex-replace/index.html @@ -0,0 +1,2306 @@ + + + + + + + + + + + + + + + + + + + + + + regex_replace - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

regex_replace

+

A regular expression search and replace on a variable. Use the +preg_replace() syntax from the PHP +manual.

+

Basic usage

+
{$myVar|regex_replace:"/foo/":"bar"}
+
+
+

Note

+

Although Smarty supplies this regex convenience modifier, it is +usually better to apply regular expressions in PHP, either via custom +functions or modifiers. Regular expressions are considered application +code and are not part of presentation logic.

+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredDescription
1stringYesThis is the regular expression to be replaced.
2stringYesThis is the string of text to replace with.
+

Examples

+
<?php
+
+$smarty->assign('articleTitle', "Infertility unlikely to\nbe passed on, experts say.");
+
+

Where template is:

+
{* replace each carriage return, tab and new line with a space *}
+
+{$articleTitle}
+{$articleTitle|regex_replace:"/[\r\t\n]/":" "}
+
+

Will output:

+
Infertility unlikely to
+be passed on, experts say.
+Infertility unlikely to be passed on, experts say.
+
+

See also replace and +escape.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-replace/index.html b/5.0/designers/language-modifiers/language-modifier-replace/index.html new file mode 100644 index 000000000..99bc174ae --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-replace/index.html @@ -0,0 +1,2297 @@ + + + + + + + + + + + + + + + + + + + + + + replace - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

replace

+

A simple search and replace on a variable. This is equivalent to the +PHP's str_replace() function.

+

Basic usage

+
{$myVar|replace:"foo":"bar"}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredDescription
1stringYesThis is the string of text to be replaced.
2stringYesThis is the string of text to replace with.
+

Examples

+
<?php
+
+$smarty->assign('articleTitle', "Child's Stool Great for Use in Garden.");
+
+

Where template is:

+
{$articleTitle}
+{$articleTitle|replace:'Garden':'Vineyard'}
+{$articleTitle|replace:' ':'   '}
+
+

Will output:

+
Child's Stool Great for Use in Garden.
+Child's Stool Great for Use in Vineyard.
+Child's   Stool   Great   for   Use   in   Garden.
+
+

See also regex_replace and +escape.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-spacify/index.html b/5.0/designers/language-modifiers/language-modifier-spacify/index.html new file mode 100644 index 000000000..3bb7e0e6b --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-spacify/index.html @@ -0,0 +1,2294 @@ + + + + + + + + + + + + + + + + + + + + + + spacify - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

spacify

+

spacify is a way to insert a space between every character of a +variable. You can optionally pass a different character or string to +insert.

+

Basic usage

+
{$myVar|spacify}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredDefaultDescription
1stringNoone spaceThis what gets inserted between each character of the variable.
+

Examples

+
<?php
+
+$smarty->assign('articleTitle', 'Something Went Wrong in Jet Crash, Experts Say.');
+
+

Where template is:

+
{$articleTitle}
+{$articleTitle|spacify}
+{$articleTitle|spacify:"^^"}
+
+

Will output:

+
Something Went Wrong in Jet Crash, Experts Say.
+S o m e t h i n g   W .... snip ....  s h ,   E x p e r t s   S a y .
+S^^o^^m^^e^^t^^h^^i^^n^^g^^ .... snip .... ^^e^^r^^t^^s^^ ^^S^^a^^y^^.
+
+

See also wordwrap and +nl2br.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-string-format/index.html b/5.0/designers/language-modifiers/language-modifier-string-format/index.html new file mode 100644 index 000000000..f5a7df119 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-string-format/index.html @@ -0,0 +1,2291 @@ + + + + + + + + + + + + + + + + + + + + + + string_format - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

string_format

+

This is a way to format strings, such as decimal numbers and such. Use +the syntax for sprintf() for the +formatting.

+

Basic usage

+
{$myVar|string_format:"%d"}
+
+

Parameters

+ + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredDescription
1stringYesThis is what format to use. (sprintf)
+

Examples

+
<?php
+
+$smarty->assign('number', 23.5787446);
+
+

Where template is:

+
{$number}
+{$number|string_format:"%.2f"}
+{$number|string_format:"%d"}
+
+

Will output:

+
23.5787446
+23.58
+23
+
+

See also date_format.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-strip-tags/index.html b/5.0/designers/language-modifiers/language-modifier-strip-tags/index.html new file mode 100644 index 000000000..492f2e5e7 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-strip-tags/index.html @@ -0,0 +1,2295 @@ + + + + + + + + + + + + + + + + + + + + + + strip_tags - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

strip_tags

+

This strips out HTML markup tags, basically anything between < and >.

+

Basic usage

+
{$myVar|strip_tags}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredDefaultDescription
1boolNoTRUEThis determines whether the tags are replaced by ' ' or ''
+

Examples

+
<?php
+
+$smarty->assign('articleTitle',
+                "Blind Woman Gets <font face=\"helvetica\">New
+Kidney</font> from Dad she Hasn't Seen in <b>years</b>."
+               );
+
+

Where template is:

+
{$articleTitle}
+{$articleTitle|strip_tags} {* same as {$articleTitle|strip_tags:true} *}
+{$articleTitle|strip_tags:false}
+
+

Will output:

+
Blind Woman Gets <font face="helvetica">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>.
+Blind Woman Gets  New Kidney  from Dad she Hasn't Seen in  years .
+Blind Woman Gets New Kidney from Dad she Hasn't Seen in years.
+
+

See also replace and +regex_replace.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-strip/index.html b/5.0/designers/language-modifiers/language-modifier-strip/index.html new file mode 100644 index 000000000..671122aa8 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-strip/index.html @@ -0,0 +1,2264 @@ + + + + + + + + + + + + + + + + + + + + + + strip - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

strip

+

This replaces all spaces, newlines and tabs with a single space, or with +the supplied string.

+

Basic usage

+
{$myVar|strip}
+
+
+

Note

+

If you want to strip blocks of template text, use the built-in +{strip} function.

+
+

Examples

+
<?php
+$smarty->assign('articleTitle', "Grandmother of\neight makes\t    hole in one.");
+$smarty->display('index.tpl');
+
+

Where template is:

+
{$articleTitle}
+{$articleTitle|strip}
+{$articleTitle|strip:'&nbsp;'}
+
+

Will output:

+
Grandmother of
+eight makes        hole in one.
+Grandmother of eight makes hole in one.
+Grandmother&nbsp;of&nbsp;eight&nbsp;makes&nbsp;hole&nbsp;in&nbsp;one.
+
+

See also {strip} and +truncate.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-to-charset/index.html b/5.0/designers/language-modifiers/language-modifier-to-charset/index.html new file mode 100644 index 000000000..5855760ff --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-to-charset/index.html @@ -0,0 +1,2256 @@ + + + + + + + + + + + + + + + + + + + + + + to_charset - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

to_charset

+

to_charset is used to transcode a string from the internal charset to +a given charset. This is the exact opposite of the from_charset +modifier.

+

Parameters

+ + + + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredPossible ValuesDefaultDescription
1stringNoISO-8859-1, UTF-8, and any character set supported by mb_convert_encoding()ISO-8859-1The charset encoding the value is supposed to be encoded to
+
+

Note

+

Charset encoding should be handled by the application itself. This +modifier should only be used in cases where the application cannot +anticipate that a certain string is required in another encoding.

+
+

See also Configuring Smarty, from_charset +modifier.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-truncate/index.html b/5.0/designers/language-modifiers/language-modifier-truncate/index.html new file mode 100644 index 000000000..a5ead4f7f --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-truncate/index.html @@ -0,0 +1,2326 @@ + + + + + + + + + + + + + + + + + + + + + + truncate - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

truncate

+

This truncates a variable to a character length, the default is 80. As +an optional second parameter, you can specify a string of text to +display at the end if the variable was truncated. The characters in the +string are included with the original truncation length. By default, +truncate will attempt to cut off at a word boundary. If you want to +cut off at the exact character length, pass the optional third parameter +of TRUE.

+

Basic usage

+
{$myVar|truncate:40:"..."}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredDefaultDescription
1integerNo80This determines how many characters to truncate to.
2stringNo...This is a text string that replaces the truncated text. Its length is included in the truncation length setting.
3booleanNoFALSEThis determines whether or not to truncate at a word boundary with FALSE, or at the exact character with TRUE.
4booleanNoFALSEThis determines whether the truncation happens at the end of the string with FALSE, or in the middle of the string with TRUE. Note that if this setting is TRUE, then word boundaries are ignored.
+

Examples

+
<?php
+$smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');
+
+

where template is:

+
{$articleTitle}
+{$articleTitle|truncate}
+{$articleTitle|truncate:30}
+{$articleTitle|truncate:30:""}
+{$articleTitle|truncate:30:"---"}
+{$articleTitle|truncate:30:"":true}
+{$articleTitle|truncate:30:"...":true}
+{$articleTitle|truncate:30:'..':true:true}
+
+

This will output:

+
Two Sisters Reunite after Eighteen Years at Checkout Counter.
+Two Sisters Reunite after Eighteen Years at Checkout Counter.
+Two Sisters Reunite after...
+Two Sisters Reunite after
+Two Sisters Reunite after---
+Two Sisters Reunite after Eigh
+Two Sisters Reunite after E...
+Two Sisters Re..ckout Counter.
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-unescape/index.html b/5.0/designers/language-modifiers/language-modifier-unescape/index.html new file mode 100644 index 000000000..3027d257c --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-unescape/index.html @@ -0,0 +1,2306 @@ + + + + + + + + + + + + + + + + + + + + + + unescape - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

unescape

+

unescape is used to decode entity, html and htmlall. It counters +the effects of the escape modifier for the +given types.

+

Basic usage

+
{$myVar|unescape}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredPossible ValuesDefaultDescription
1stringNohtml, htmlall, entity,htmlThis is the escape format to use.
2stringNoISO-8859-1, UTF-8, and any character set supported by htmlentities()UTF-8The character set encoding passed to html_entity_decode() or htmlspecialchars_decode() or mb_convert_encoding() et. al.
+

Examples

+
<?php
+
+$smarty->assign('articleTitle',
+                "Germans use &quot;&Uuml;mlauts&quot; and pay in &euro;uro"
+                );
+
+

These are example unescape template lines followed by the output

+
{$articleTitle}
+Germans use &quot;&Uuml;mlauts&quot; and pay in &euro;uro
+
+{$articleTitle|unescape:"html"}
+Germans use "&Uuml;mlauts" and pay in &euro;uro
+
+{$articleTitle|unescape:"htmlall"}
+Germans use "Ümlauts" and pay in €uro
+
+

See also escaping smarty parsing, escape +modifier.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-upper/index.html b/5.0/designers/language-modifiers/language-modifier-upper/index.html new file mode 100644 index 000000000..c517e2dd2 --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-upper/index.html @@ -0,0 +1,2255 @@ + + + + + + + + + + + + + + + + + + + + + + upper - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

upper

+

This is used to uppercase a variable. This is equivalent to the PHP +strtoupper() function.

+

Basic usage

+
{$myVar|upper}
+
+

Examples

+
<?php
+$smarty->assign('articleTitle', "If Strike isn't Settled Quickly it may Last a While.");
+
+

Where template is:

+
{$articleTitle}
+{$articleTitle|upper}
+
+

Will output:

+
If Strike isn't Settled Quickly it may Last a While.
+IF STRIKE ISN'T SETTLED QUICKLY IT MAY LAST A WHILE.
+
+

See also lower and +capitalize.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-modifiers/language-modifier-wordwrap/index.html b/5.0/designers/language-modifiers/language-modifier-wordwrap/index.html new file mode 100644 index 000000000..26b17b17a --- /dev/null +++ b/5.0/designers/language-modifiers/language-modifier-wordwrap/index.html @@ -0,0 +1,2335 @@ + + + + + + + + + + + + + + + + + + + + + + wordwrap - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

wordwrap

+

Wraps a string to a column width, the default is 80. As an optional +second parameter, you can specify a string of text to wrap the text to +the next line, the default is a carriage return "\n". By default, +wordwrap will attempt to wrap at a word boundary. If you want to cut +off at the exact character length, pass the optional third parameter as +TRUE. This is equivalent to the PHP +wordwrap() function.

+

Basic usage

+
{$myVar|wordwrap:30}
+
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parameter PositionTypeRequiredDefaultDescription
1integerNo80This determines how many columns to wrap to.
2stringNo\nThis is the string used to wrap words with.
3booleanNoFALSEThis determines whether to wrap at a word boundary (FALSE), or at the exact character (TRUE).
+

Examples

+
<?php
+
+$smarty->assign('articleTitle',
+                "Blind woman gets new kidney from dad she hasn't seen in years."
+               );
+
+

Where template is

+
{$articleTitle}
+
+{$articleTitle|wordwrap:30}
+
+{$articleTitle|wordwrap:20}
+
+{$articleTitle|wordwrap:30:"<br />\n"}
+
+{$articleTitle|wordwrap:26:"\n":true}
+
+

Will output:

+
Blind woman gets new kidney from dad she hasn't seen in years.
+
+Blind woman gets new kidney
+from dad she hasn't seen in
+years.
+
+Blind woman gets new
+kidney from dad she
+hasn't seen in
+years.
+
+Blind woman gets new kidney<br />
+from dad she hasn't seen in<br />
+years.
+
+Blind woman gets new kidn
+ey from dad she hasn't se
+en in years.
+
+

See also nl2br and +{textformat}.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-variables/index.html b/5.0/designers/language-variables/index.html new file mode 100644 index 000000000..5e5a8b67e --- /dev/null +++ b/5.0/designers/language-variables/index.html @@ -0,0 +1,2251 @@ + + + + + + + + + + + + + + + + + + + + + + Introduction - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Variables

+

Smarty has several types of variables. The type of the +variable depends on what symbol it is prefixed or enclosed within.

+ +

Variables in Smarty can be either displayed directly or used as +arguments for functions, +attributes and +modifiers, inside conditional expressions, etc. +To print a variable, simply enclose it in the +delimiters so that it is the only thing +contained between them.

+
{$Name}
+
+{$product.part_no} <b>{$product.description}</b>
+
+{$Contacts[row].Phone}
+
+<body bgcolor="{#bgcolor#}">
+
+

Scopes

+

You can assign variables to specific variable scopes.

+
+

Note

+

An easy way to examine assigned Smarty variables is with the +debugging console.

+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-variables/language-assigned-variables/index.html b/5.0/designers/language-variables/language-assigned-variables/index.html new file mode 100644 index 000000000..8f1531363 --- /dev/null +++ b/5.0/designers/language-variables/language-assigned-variables/index.html @@ -0,0 +1,2351 @@ + + + + + + + + + + + + + + + + + + + + + + Assigned from PHP - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Variables assigned from PHP

+

Variables assigned from PHP are referenced by preceding them with a dollar +($) sign.

+

Examples

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->assign('firstname', 'Doug');
+$smarty->assign('lastname', 'Evans');
+$smarty->assign('meetingPlace', 'New York');
+
+$smarty->display('index.tpl');
+
+

index.tpl source:

+
Hello {$firstname} {$lastname}, glad to see you can make it.
+<br />
+{* this will not work as $variables are case sensitive *}
+This weeks meeting is in {$meetingplace}.
+{* this will work *}
+This weeks meeting is in {$meetingPlace}.
+
+

This above would output:

+
Hello Doug Evans, glad to see you can make it.
+<br />
+This weeks meeting is in .
+This weeks meeting is in New York.
+
+

Associative arrays

+

You can also reference associative array variables by specifying the key +after a dot "." symbol.

+
<?php
+$smarty->assign('Contacts',
+    array('fax' => '555-222-9876',
+          'email' => 'zaphod@slartibartfast.example.com',
+          'phone' => array('home' => '555-444-3333',
+                           'cell' => '555-111-1234')
+                           )
+         );
+$smarty->display('index.tpl');
+
+

index.tpl source:

+
{$Contacts.fax}<br />
+{$Contacts.email}<br />
+{* you can print arrays of arrays as well *}
+{$Contacts.phone.home}<br />
+{$Contacts.phone.cell}<br />
+
+

this will output:

+
555-222-9876<br />
+zaphod@slartibartfast.example.com<br />
+555-444-3333<br />
+555-111-1234<br />
+
+

Array indexes

+

You can reference arrays by their index, much like native PHP syntax.

+
<?php
+$smarty->assign('Contacts', array(
+                           '555-222-9876',
+                           'zaphod@slartibartfast.example.com',
+                            array('555-444-3333',
+                                  '555-111-1234')
+                            ));
+$smarty->display('index.tpl');
+
+

index.tpl source:

+
{$Contacts[0]}<br />
+{$Contacts[1]}<br />
+{* you can print arrays of arrays as well *}
+{$Contacts[2][0]}<br />
+{$Contacts[2][1]}<br />
+
+

This will output:

+
555-222-9876<br />
+zaphod@slartibartfast.example.com<br />
+555-444-3333<br />
+555-111-1234<br />
+
+

Objects

+

Properties of objects assigned from PHP +can be referenced by specifying the property name after the -> symbol.

+
name:  {$person->name}<br />
+email: {$person->email}<br />
+
+

this will output:

+
name:  Zaphod Beeblebrox<br />
+email: zaphod@slartibartfast.example.com<br />
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-variables/language-config-variables/index.html b/5.0/designers/language-variables/language-config-variables/index.html new file mode 100644 index 000000000..650fd66bf --- /dev/null +++ b/5.0/designers/language-variables/language-config-variables/index.html @@ -0,0 +1,2285 @@ + + + + + + + + + + + + + + + + + + + + + + From config files - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Variables loaded from config files

+

Variables that are loaded from the config files are +referenced by enclosing them within #hash_marks#, or with the smarty +variable $smarty.config. The +later syntax is useful for embedding into quoted attribute values, or +accessing variable values such as $smarty.config.$foo.

+

Examples

+

Example config file - foo.conf: +

pageTitle = "This is mine"
+bodyBgColor = '#eeeeee'
+tableBorderSize = 3
+tableBgColor = "#bbbbbb"
+rowBgColor = "#cccccc"
+

+

A template demonstrating the #hash# method:

+
{config_load file='foo.conf'}
+<html>
+    <title>{#pageTitle#}</title>
+    <body bgcolor="{#bodyBgColor#}">
+        <table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+            <tr bgcolor="{#rowBgColor#}">
+                <td>First</td>
+                <td>Last</td>
+                <td>Address</td>
+            </tr>
+        </table>
+    </body>
+</html>
+
+

A template demonstrating the +$smarty.config method:

+
{config_load file='foo.conf'}
+<html>
+<title>{$smarty.config.pageTitle}</title>
+    <body bgcolor="{$smarty.config.bodyBgColor}">
+        <table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgColor}">
+            <tr bgcolor="{$smarty.config.rowBgColor}">
+                <td>First</td>
+                <td>Last</td>
+                <td>Address</td>
+            </tr>
+        </table>
+    </body>
+</html>
+
+

Both examples would output:

+
<html>
+    <title>This is mine</title>
+    <body bgcolor="#eeeeee">
+        <table border="3" bgcolor="#bbbbbb">
+            <tr bgcolor="#cccccc">
+                <td>First</td>
+                <td>Last</td>
+                <td>Address</td>
+            </tr>
+        </table>
+    </body>
+</html>
+
+

Config file variables cannot be used until after they are loaded in from +a config file. This procedure is explained later in this document under +{config_load}.

+

See also variables and $smarty reserved +variables.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-variables/language-variable-scopes/index.html b/5.0/designers/language-variables/language-variable-scopes/index.html new file mode 100644 index 000000000..e5b894e18 --- /dev/null +++ b/5.0/designers/language-variables/language-variable-scopes/index.html @@ -0,0 +1,2229 @@ + + + + + + + + + + + + + + + + + + + + + + Variable scopes - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Variable scopes

+

You have the choice to assign variables to the scope of the main Smarty +object, data objects created with createData(), +and template objects created with +createTemplate(). 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(...) or +$smarty->fetch(...) 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
+// 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(), +createData() +and createTemplate().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/designers/language-variables/language-variables-smarty/index.html b/5.0/designers/language-variables/language-variables-smarty/index.html new file mode 100644 index 000000000..7ab51ae4b --- /dev/null +++ b/5.0/designers/language-variables/language-variables-smarty/index.html @@ -0,0 +1,2502 @@ + + + + + + + + + + + + + + + + + + + + + + {$smarty} - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + +

{$smarty} reserved variable

+

The PHP reserved {$smarty} variable can be used to access several +environment and request variables. The full list of them follows.

+

Request variables

+

The request variables such as +$_GET, $_POST, $_COOKIE, $_SERVER, $_ENV and $_SESSION can +be accessed as demonstrated in the examples below:

+
{* display value of page from URL ($_GET) http://www.example.com/index.php?page=foo *}
+{$smarty.get.page}
+
+{* display the variable "page" from a form ($_POST['page']) *}
+{$smarty.post.page}
+
+{* display the value of the cookie "username" ($_COOKIE['username']) *}
+{$smarty.cookies.username}
+
+{* display the server variable "SERVER_NAME" ($_SERVER['SERVER_NAME'])*}
+{$smarty.server.SERVER_NAME}
+
+{* display the system environment variable "PATH" *}
+{$smarty.env.PATH}
+
+{* display the php session variable "id" ($_SESSION['id']) *}
+{$smarty.session.id}
+
+{* display the variable "username" from merged get/post/cookies/server/env *}
+{$smarty.request.username}
+
+
+

Note

+

For historical reasons {$SCRIPT_NAME} is shorthand for +{$smarty.server.SCRIPT_NAME}.

+
<a href="{$SCRIPT_NAME}?page=smarty">click me</a>
+<a href="{$smarty.server.SCRIPT_NAME}?page=smarty">click me</a>
+
+

Note

+

Although Smarty provides direct access to PHP super globals for +convenience, it should be used with caution. Directly accessing super +globals mixes underlying application code structure with templates. A +good practice is to assign specific needed values to template vars.

+
+

{$smarty.now}

+

The current timestamp can be accessed +with {$smarty.now}. The value reflects the number of seconds passed +since the so-called Epoch on January 1, 1970, and can be passed directly +to the date_format modifier for +display. Note that time() is called +on each invocation; eg a script that takes three seconds to execute with +a call to $smarty.now at start and end will show the three-second +difference.

+
{* use the date_format modifier to show current date and time *}
+{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}
+
+

{$smarty.const}

+

You can access PHP constant values directly.

+
<?php
+// the constant defined in php
+define('MY_CONST_VAL','CHERRIES');
+
+

Output the constant in a template with

+
{$smarty.const.MY_CONST_VAL}
+
+
+

Note

+

Although Smarty provides direct access to PHP constants for +convenience, it is typically avoided as this is mixing underlying +application code structure into the templates. A good practice is to +assign specific needed values to template vars.

+
+

{$smarty.capture}

+

Template output captured via the built-in +{capture}..{/capture} function can be +accessed using the {$smarty.capture} variable. See the +{capture} page for more information.

+

{$smarty.config}

+

{$smarty.config} variable can be used to refer to loaded config +variables. {$smarty.config.foo} is a +synonym for {#foo#}. See the +{config_load} page for more info.

+

{$smarty.section}

+

The {$smarty.section} variables can be used to refer to +{section} loop properties. These have +some very useful values such as .first, .index, etc.

+
+

Note

+

The {$smarty.foreach} variable is no longer used with the new +{foreach} syntax, but is still +supported with Smarty 2.x style foreach syntax.

+
+

{$smarty.template}

+

Returns the name of the current template being processed (without the +directory).

+

{$smarty.template_object}

+

Returns the template object of the current template being processed.

+

{$smarty.current_dir}

+

Returns the name of the directory for the current template being +processed if it is loaded from the filesystem (the default).

+

{$smarty.version}

+

Returns the version of Smarty the template was compiled with.

+
<div id="footer">Powered by Smarty {$smarty.version}</div>
+
+

{$smarty.block.child}

+

Returns block text from child template. See Template +inheritance.

+

{$smarty.block.parent}

+

Returns block text from parent template. See Template +inheritance

+

{$smarty.ldelim}, {$smarty.rdelim}

+

These variables are used for printing the left-delimiter and +right-delimiter value literally, the same as +{ldelim},{rdelim}.

+

See also assigned variables and config +variables

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/features/index.html b/5.0/features/index.html new file mode 100644 index 000000000..e2804b9a8 --- /dev/null +++ b/5.0/features/index.html @@ -0,0 +1,2401 @@ + + + + + + + + + + + + + + + + + + Features - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + +

Features

+

Some of Smarty's features: +- It is extremely fast. +- It is efficient since the PHP parser does the dirty work. +- No template parsing overhead, only compiles once. +- It is smart about recompiling only the + template files that have changed. +- You can easily create your own custom + functions and variable + modifiers, so the template language is + extremely extensible. +- Configurable template {delimiter} tag + syntax, so you can use {$foo}, {{$foo}}, <!--{$foo}-->, etc. +- The {if}..{elseif}..{else}..{/if} + constructs are passed to the PHP parser, so the {if...} expression + syntax can be as simple or as complex an evaluation as you like. +- Allows unlimited nesting of + sections, if's etc. +- Built-in caching support +- Arbitrary template sources +- Template Inheritance for + easy management of template content. +- Plugin architecture

+

Separation of presentation from application code

+
    +
  • This means templates can certainly contain logic under the condition + that it is for presentation only. Things such as + including other templates, + alternating table row colors, + upper-casing a variable, + looping over an array of data and + rendering it are examples of presentation logic.
  • +
  • This does not mean however that Smarty forces a separation of + business and presentation logic. Smarty has no knowledge of which is + which, so placing business logic in the template is your own doing.
  • +
  • Also, if you desire no logic in your templates you certainly can + do so by boiling the content down to text and variables only.
  • +
+

How does it work?

+

Under the hood, Smarty "compiles" (basically copies and converts) the +templates into PHP scripts. This happens once when each template is +first invoked, and then the compiled versions are used from that point +forward. Smarty takes care of this for you, so the template designer +just edits the Smarty templates and never has to manage the compiled +versions. This approach keeps the templates easy to maintain, and yet +keeps execution times extremely fast since the compiled code is just +PHP. And of course, all PHP scripts take advantage of PHP op-code caches +such as APC.

+

Template Inheritance

+

Template inheritance was introduced in Smarty 3. Before template +inheritance, we managed our templates in +pieces such as header and footer templates. This organization lends +itself to many problems that require some hoop-jumping, such as managing +content within the header/footer on a per-page basis. With template +inheritance, instead of including other templates we maintain our +templates as single pages. We can then manipulate blocks of content +within by inheriting them. This makes templates intuitive, efficient and +easy to manage. See +Template Inheritance +for more info.

+

Why not use XML/XSLT syntax?

+

There are a couple of good reasons. First, Smarty can be used for more +than just XML/HTML based templates, such as generating emails, +javascript, CSV, and PDF documents. Second, XML/XSLT syntax is even more +verbose and fragile than PHP code! It is perfect for computers, but +horrible for humans. Smarty is about being easy to read, understand and +maintain.

+

Template Security

+

Although Smarty insulates you from PHP, you still have the option to use +it in certain ways if you wish. Template security forces the restriction +of PHP (and select Smarty functions.) This is useful if you have third +parties editing templates, and you don't want to unleash the full power +of PHP or Smarty to them.

+

Integration

+

Sometimes Smarty gets compared to Model-View-Controller (MVC) +frameworks. Smarty is not an MVC, it is just the presentation layer, +much like the View (V) part of an MVC. As a matter of fact, Smarty can +easily be integrated as the view layer of an MVC. Many of the more +popular ones have integration instructions for Smarty, or you may find +some help here in the forums and documentation.

+

Other Template Engines

+

Smarty is not the only engine following the "Separate Programming Code +from Presentation" philosophy. For instance, Python has template +engines built around the same principles such as Django Templates and +CheetahTemplate. Note: Languages such as Python do not mix with HTML +natively, which give them the advantage of proper programming code +separation from the outset. There are libraries available to mix Python +with HTML, but they are typically avoided.

+

What Smarty is Not

+

Smarty is not an application development framework. Smarty is not an +MVC. Smarty is not an alternative to Laravel, Symfony, CodeIgniter, +or any of the other application development frameworks for PHP.

+

Smarty is a template engine, and works as the (V)iew component of your +application. Smarty can easily be coupled to any of the engines listed +above as the view component. No different than any other software, +Smarty has a learning curve. Smarty does not guarantee good application +design or proper separation of presentation, this still needs to be +addressed by a competent developer and web designer.

+

Is Smarty Right for Me?

+

Smarty is not meant to be a tool for every job. The important thing is +to identify if Smarty fits your needs. There are some important +questions to ask yourself:

+

Template Syntax

+

Are you content with PHP tags mixed with HTML? Are your +web designers comfortable with PHP? Would your web designers prefer a +tag-based syntax designed for presentation? Some experience working with +both Smarty and PHP helps answer these questions.

+

The Business Case

+

Is there a requirement to insulate the templates from +PHP? Do you have untrusted parties editing templates that you do not +wish to unleash the power of PHP to? Do you need to programmatically +control what is and is not available within the templates? Smarty +supplies these capabilities by design.

+

Feature set

+

Does Smarty's features such as caching, template +inheritance and plugin architecture save development cycles writing code +that would be needed otherwise? Does the codebase or framework you plan +on using have the features you need for the presentation component?

+

Sites using Smarty

+

Many well-known PHP projects make use of Smarty such as XOOPS CMS, CMS Made Simple, Tiki +CMS/Groupware and X-Cart to name a few.

+

Summary

+

Whether you are using Smarty for a small website or massive enterprise +solution, it can accommodate your needs. There are numerous features +that make Smarty a great choice:

+
    +
  • separation of PHP from HTML/CSS just makes sense
  • +
  • readability for organization and management
  • +
  • security for 3rd party template access
  • +
  • feature completeness, and easily extendable to your own needs
  • +
  • massive user base, Smarty is here to stay
  • +
  • LGPL license for commercial use
  • +
  • 100% free to use, open source project
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/getting-started/index.html b/5.0/getting-started/index.html new file mode 100644 index 000000000..055e03393 --- /dev/null +++ b/5.0/getting-started/index.html @@ -0,0 +1,2379 @@ + + + + + + + + + + + + + + + + + + + + + + Getting started - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Getting started

+

Requirements

+

Smarty can be run with PHP 7.2 to PHP 8.2.

+

Installation

+

Smarty can be installed with Composer.

+

To get the latest stable version of Smarty use: +

composer require smarty/smarty
+

+

To get the latest, unreleased version, use: +

composer require smarty/smarty:dev-master
+

+

To get the previous stable version of Smarty, Smarty 3, use: +

composer require smarty/smarty:^3
+

+

Here's how you create an instance of Smarty in your PHP scripts: +

<?php
+
+require 'vendor/autoload.php';
+use Smarty\Smarty;
+$smarty = new Smarty();
+

+

Now that the library files are in place, it's time to set up the Smarty +directories for your application.

+

Smarty requires four directories which are by default named templates, configs, templates_c and cache +relative to the current working directory.

+

The defaults can be changed as follows:

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty();
+$smarty->setTemplateDir('/some/template/dir');
+$smarty->setConfigDir('/some/config/dir');
+$smarty->setCompileDir('/some/compile/dir');
+$smarty->setCacheDir('/some/cache/dir');
+
+

The compile dir and cache dir need to be writable for the user running the PHP script.

+
+

Note

+

This is usually user "nobody" and group "nobody". For OS X users, the +default is user "www" and group "www". If you are using Apache, you +can look in your httpd.conf file to see what user and group are +being used.

+
+
chown nobody:nobody /web/www.example.com/guestbook/templates_c/
+chmod 770 /web/www.example.com/guestbook/templates_c/
+
+chown nobody:nobody /web/www.example.com/guestbook/cache/
+chmod 770 /web/www.example.com/guestbook/cache/
+
+

You can verify if your system has the correct access rights for + these directories with testInstall():

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty();
+$smarty->setTemplateDir('/some/template/dir');
+$smarty->setConfigDir('/some/config/dir');
+$smarty->setCompileDir('/some/compile/dir');
+$smarty->setCacheDir('/some/cache/dir');
+$smarty->testInstall();
+
+

Now, let's create the index.tpl file that Smarty will display. This +needs to be located in the $template_dir.

+
{* Smarty *}
+Hello {$name}, welcome to Smarty!
+
+
+

Note

+

{* Smarty *} is a template comment. It +is not required, but it is good practice to start all your template +files with this comment. It makes the file easy to recognize +regardless of the file extension. For example, text editors could +recognize the file and turn on special syntax highlighting.

+
+

Now lets edit our php file. We'll create an instance of Smarty, +assign() a template variable and +display() the index.tpl file.

+
<?php
+
+require 'vendor/autoload.php';
+
+use Smarty\Smarty;
+$smarty = new Smarty();
+
+$smarty->setTemplateDir('/web/www.example.com/guestbook/templates/');
+$smarty->setCompileDir('/web/www.example.com/guestbook/templates_c/');
+$smarty->setConfigDir('/web/www.example.com/guestbook/configs/');
+$smarty->setCacheDir('/web/www.example.com/guestbook/cache/');
+
+$smarty->assign('name', 'Ned');
+$smarty->display('index.tpl');
+
+
+

Note

+

In our example, we are setting absolute paths to all the Smarty +directories. If /web/www.example.com/guestbook/ is within your PHP +include_path, then these settings are not necessary. However, it is +more efficient and (from experience) less error-prone to set them to +absolute paths. This ensures that Smarty is getting files from the +directories you intended.

+
+

Now, run your PHP file. You should see "Hello Ned, welcome to Smarty!"

+

You have completed the basic setup for Smarty!

+

Extended Setup

+

This is a continuation of the basic installation, please read that first!

+

A slightly more flexible way to set up Smarty is to extend the Smarty +class and initialize your Smarty +environment. So instead of repeatedly setting directory paths, assigning +the same vars, etc., we can do that in one place.

+
<?php
+
+use Smarty\Smarty;
+
+class My_GuestBook extends Smarty {
+
+   public function __construct()
+   {
+        parent::__construct();
+
+        $this->setTemplateDir('/web/www.example.com/guestbook/templates/');
+        $this->setCompileDir('/web/www.example.com/guestbook/templates_c/');
+        $this->setConfigDir('/web/www.example.com/guestbook/configs/');
+        $this->setCacheDir('/web/www.example.com/guestbook/cache/');
+
+        $this->caching = Smarty::CACHING_LIFETIME_CURRENT;
+        $this->assign('app_name', 'Guest Book');
+   }
+
+}
+
+

Now, we can use My_GuestBook instead of Smarty in our scripts: +

<?php
+$smarty = new Smarty_GuestBook();
+$smarty->assign('name', 'Ned');
+$smarty->display('index.tpl');
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/img/favicon.ico b/5.0/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..aec1d8e3d2af6a8d8a0a07b85d47cb12259cefe6 GIT binary patch literal 7782 zcmeHL4OCRs7T%6xqDEwdjA@9CW`HJ|3O2wD!U&^1NwFW(#Ii)gL?t6b9ZeE@YJ^ti zPgYM0v&>$EJX66$1Q7!S`4N!{0YjYe&lAo0nd{Rl_IVuW9J0QE6HdX2=u}n+;Sh04@ss(}x7e0PNI`znK| zi6gp&_YNMV51?PJvW=#nQIiz&wgBVA6>DjEiI!HC8|bGi%@nX5_LemgRoIC~)a|8lU=i@;{{|Io8DUXVq96N}5w- zByp~R0(12wJ)_4WR9Fis6s(1cKQywlv+NvBVrrjn8ps;Q}= z8#iu{(P$(k=4jt%pHX&oHYv}3i2;L9=b|Q}?m|6^T8XM8k%*)4a1LW|l#+sVoeqWE zfPWbHk-(1yUJSep_*uX&0X_-%J;476d?E1Ozy|{#1^go5*8sl__^*M_0RCs-&jVit zJk}Kj0Y4Y`MBsM;e-!vi;FZ9`A>pX8s41xFs1)Q4d@%4)z%K%R4e;B5{~GuV;C}}G zJn&V(Un2pozMt&ewR?}i^8t2)tKSEy+qQrB(Z@Ub^7qM`-uvt3EnDADamM}H-uEfi zt$$}j(z_dH`w9dr;@?>LX2M&m-cDS-W&i|?S{Sov@oTY5USArwY`I%MCnw(*=FELD zXr4TJ{!1?}c;!_=-^izD%nX*xqh>wx>~qi076{y?gh$|h>a?f+;xoOcz;=rI_ zi8N$#XqZeeYV_k{{Kk%ZV*G@O{sC?Rf#*=KVULK0k9c(CW8OZ#P6ELLZq5(75A+ZY zdT8*Fhk1paociDE;(VX${R4XP2K2tC4^;2l4{+<%vzMTwiHZG>uG@Lm!zxPxj&{7j zueJg%MMxkb5DnKmdq;gg>Gm!4J*?-ST*F3#bLm0%8HLfL0i* zfK)1Pfl|OIAQa>Pn+f1(&==SX8d6L^My1-`}W&JIph+T?a z)_?p@`+la+NMG83Tt>UUp|s3w3ibD=$kKXB&pAhwS3xvq0g_Awg+?!+%)A{5wbokb?x_x82%)#USl6euU~|p141SX4(v5} z@VEfCNAD9w$mNd8$V8KZ#ta_!MA%?g9~Ys}!*K+eNIGz04_t1KNriG@gqNMN7!X5B z2huQHWbGH*hL?GHv2K~qw1I*_BSs7wKT;|b$~)B)`$TwpdU!}&rUeQ@1`QfC#M*CD zPv$PIP|~TMObl^yxwQ9`@vIvHhV_)XxMM_KLyQc7P&m~p9sMCg z2KWl)9_}LO#rrZsD3p5lvA)cHLLTl16@@N7ejNZ0p>*H`TmPUTk69(cOMccdWFm>M z?>(LU;iE7BhIH}iP~o=zp-!&8R{79?f8Pi41-ADe4DAc~5golEnY-LxzsdcfpJ%&n zcwZ)RVfH=JZr|ko4~_N}`q}13Ci7(e5e}ciMi}~F|A&V4mI{43`{5pTO&k75AA!Hq zLl2McEtLx;9TNcCTs%BHJtKVNLhpfnM~(CrN+HcQfy@Fny}SE z+18fKuTyI##G#w{u~TWsPTb2xejQG^Loa*ORi@~FO=Gw3Q#`EdDDX|j@p9N6Iox6w z6>^G|uA4arK!$PkX)@a&lr;5UZlA?2Z7z~=Nw=Tx7anVDAClKxV8Cp zBT_QFQ?2ELjERTJF_sOC9W8dxAsriB+w;3Nun*o+V>(rJB~TI~4iE>6gHR;mpuwXj zKC!O=2P$l@{j-!$pHXeSq@Qs{h1Qbup zAJ^#j)Ef5xX8gL|n03Q+mE+Lr!YflRvI+J5NekG_qqlyTZaI^~<= zIhUYALre5IwfH1+?;V+hc{{6lLxm1H7g^;OsauO~=>n%l(!L)_%Tc}c1kMZRfALZG z$J|kqWoNJ6EYr4~Z#M6*GrnG|mF2M0Ddqw)?WY4LLmXnU%-|UeQDNdf-gl6q7gO_{ zgtH+`gdyVIPTsbYEhMEGUWKoIYHUfW(9g<;IgTEKX@Mu3Kdm)j3Sjk1D-tN}2%AlN zwe8zD$saxU^sBFx>s#BcR+=xU%;jneZa@Fk76!w(|c7q`DsXY^gQn(2%lf5MlfQPVt#ji^<9s- zudw;$Ki}Lwit9DgYL0VSvU1Z$doaJqL9_DNCkc4i-r=@3o+AdalCebL$s$#2iPA86 z`b-wNSf92b>RPC-<^HQC1;>p`&-M-tKi{B)bLJGN$9H_fu*tMF;B(N<&MOAQuPwgH z4BW8`RgZ?q=+lGDOE9dlrm(`yK_Bqv zp{p!icAZc>1aC|~qdHJ;JbcagWu0+vt>KdzLu$1ilZA-RR)OSAyAFJ}Fky}C<(RBmY~k|t+<8?S++yP^JjWM9%&)y<`!-wo9ht>uCU|dgkp>I9Jv>#d zWt!F#H%zb>gum;GA^(<@7St?-ZNF@QR`xRQ+Qy(*&nKHq7=rf$cnn_&p(n@+S!rgT zdVRU>NJ9%E3ouzuw^`thW5E!}*$qar=2`1H(c7GWUaV@|hMrQsR;2mtR|8gQckBO- z^6?O>?yXWS@;DY%TD=i6yXFy?3D4jc19c~-yXRo?=g+E;dh%|v6#{d*Lt vjx7ze%4leL<9Bxm-MxO-=e$bTs9+b3FuyDQj{z`if53K(<#- + + + + + + + + + + + + + + + + + + Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Smarty Documentation

+

Smarty is a template engine for PHP, facilitating the separation of presentation (HTML/CSS) from application logic.

+

It allows you to write templates, using variables, modifiers, functions and comments, like this: +

<h1>{$title|escape}</h1>
+
+<p>
+    The number of pixels is: {math equation="x * y" x=$height y=$width}.
+</p>
+

+

When this template is rendered, with the value "Hello world" for the variable $title, 640 for $width, +and 480 for $height, the result is: +

<h1>Hello world</h1>
+
+<p>
+    The number of pixels is: 307200.
+</p>
+

+

Getting Started

+ +

Help

+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/philosophy/index.html b/5.0/philosophy/index.html new file mode 100644 index 000000000..efcfb3018 --- /dev/null +++ b/5.0/philosophy/index.html @@ -0,0 +1,2301 @@ + + + + + + + + + + + + + + + + + + Philosophy - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Philosophy

+

What is Smarty?

+

Smarty is a template engine for PHP. More specifically, it facilitates a +manageable way to separate application logic and content from its +presentation. This is best described in a situation where the +application programmer and the template designer play different roles, +or in most cases are not the same person.

+

For example, let's say you are creating a web page that is displaying a +newspaper article.

+
    +
  • +

    The article $headline, $tagline, $author and $body are + content elements, they contain no information about how they will be + presented. They are passed into Smarty by the + application.

    +
  • +
  • +

    Then the template designer edits the templates and uses a + combination of HTML tags and template tags + to format the presentation of these + variables with elements such as + tables, div\'s, background colors, font sizes, style sheets, svg + etc.

    +
  • +
  • +

    One day the programmer needs to change the way the article content + is retrieved, ie a change in application logic. This change does not + affect the template designer, the content will still arrive in the + template exactly the same.

    +
  • +
  • +

    Likewise, if the template designer wants to completely redesign the + templates, this would require no change to the application logic.

    +
  • +
  • +

    Therefore, the programmer can make changes to the application logic + without the need to restructure templates, and the template designer + can make changes to templates without breaking application logic.

    +
  • +
+

Goals

+

The Smarty design was largely driven by these goals: +- clean separation of presentation from application code +- PHP backend, Smarty template frontend +- complement PHP, not replace it +- fast development/deployment for programmers and designers +- quick and easy to maintain +- syntax easy to understand, no PHP knowledge necessary +- flexibility for custom development +- security: insulation from PHP +- free, open source

+

Two camps of thought

+

When it comes to templating in PHP, there are basically two camps of +thought. The first camp exclaims that \"PHP is a template engine\". This +approach simply mixes PHP code with HTML. Although this approach is +fastest from a pure script-execution point of view, many would argue +that the PHP syntax is messy and complicated when mixed with tagged +markup such as HTML.

+

The second camp exclaims that presentation should be void of all +programming code, and instead use simple tags to indicate where +application content is revealed. This approach is common with other +template engines (even in other programming languages), and is also the +approach that Smarty takes. The idea is to keep the templates focused +squarely on presentation, void of application code, and with as little +overhead as possible.

+

Why is separating PHP from templates important?

+

Two major benefits:

+
    +
  • +

    SYNTAX: Templates typically consist of semantic markup such as HTML. + PHP syntax works well for application code, but quickly degenerates + when mixed with HTML. Smarty\'s simple {tag} syntax is designed + specifically to express presentation. Smarty focuses your templates + on presentation and less on \"code\". This lends to quicker template + deployment and easier maintenance. Smarty syntax requires no working + knowledge of PHP, and is intuitive for programmers and + non-programmers alike.

    +
  • +
  • +

    INSULATION: When PHP is mixed with templates, there are no + restrictions on what type of logic can be injected into a template. + Smarty insulates the templates from PHP, creating a controlled + separation of presentation from business logic. Smarty also has + security features that can further enforce restrictions on + templates.

    +
  • +
+

Web designers and PHP

+

A common question: "Web designers have to learn a syntax anyway, why +not PHP?" Of course web designers can learn PHP, and they may already +be familiar with it. The issue isn't their ability to learn PHP, it is +about the consequences of mixing PHP with HTML. If designers use PHP, it +is too easy to add code into templates that doesn't belong there (you +just handed them a swiss-army knife when they just needed a knife.) You +can teach them the rules of application design, but this is probably +something they don't really need to learn (now they are developers!) +The PHP manual is also an overwhelming pile of information to sift +through. It is like handing the owner of a car the factory assembly +manual when all they need is the owners manual. Smarty gives web +designers exactly the tools they need, and gives developers fine-grained +control over those tools. The simplicity of the tag-based syntax is also +a huge welcome for designers, it helps them streamline the organization +and management of templates.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/add-extension/index.html b/5.0/programmers/api-functions/add-extension/index.html new file mode 100644 index 000000000..6df2d5185 --- /dev/null +++ b/5.0/programmers/api-functions/add-extension/index.html @@ -0,0 +1,2149 @@ + + + + + + + + + + + + + + + + + + Add extension - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-add-plugins-dir/index.html b/5.0/programmers/api-functions/api-add-plugins-dir/index.html new file mode 100644 index 000000000..583a48f25 --- /dev/null +++ b/5.0/programmers/api-functions/api-add-plugins-dir/index.html @@ -0,0 +1,2186 @@ + + + + + + + + + + + + + + + + + + Api add plugins dir - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

addPluginsDir()

+

add a directory to the list of directories where plugins are stored

+

Description

+

Smarty

+

addPluginsDir

+

string|array

+

plugins_dir

+
<?php
+
+// add directory where plugins are stored
+$smarty->addPluginsDir('./plugins_1');
+
+// add multiple directories where plugins are stored
+$smarty->setPluginsDir(array(
+    './plugins_2',
+    './plugins_3',
+));
+
+// view the plugins dir chain
+var_dump($smarty->getPluginsDir());
+
+// chaining of method calls
+$smarty->setPluginsDir('./plugins')
+       ->addPluginsDir('./plugins_1')
+       ->addPluginsDir('./plugins_2');
+
+?>
+
+

See also getPluginsDir(), +setPluginsDir() and +$plugins_dir.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-append/index.html b/5.0/programmers/api-functions/api-append/index.html new file mode 100644 index 000000000..8a38ab5d9 --- /dev/null +++ b/5.0/programmers/api-functions/api-append/index.html @@ -0,0 +1,2194 @@ + + + + + + + + + + + + + + + + + + Api append - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

append()

+

append an element to an assigned array

+

Description

+

void

+

append

+

mixed

+

var

+

void

+

append

+

string

+

varname

+

mixed

+

var

+

bool

+

merge

+

If you append to a string value, it is converted to an array value and +then appended to. You can explicitly pass name/value pairs, or +associative arrays containing the name/value pairs. If you pass the +optional third parameter of TRUE, the value will be merged with the +current array instead of appended.

+

NOTE.PARAMETER.MERGE

+
<?php
+// This is effectively the same as assign()
+$smarty->append('foo', 'Fred');
+// After this line, foo will now be seen as an array in the template
+$smarty->append('foo', 'Albert');
+
+$array = array(1 => 'one', 2 => 'two');
+$smarty->append('X', $array);
+$array2 = array(3 => 'three', 4 => 'four');
+// The following line will add a second element to the X array
+$smarty->append('X', $array2);
+
+// passing an associative array
+$smarty->append(array('city' => 'Lincoln', 'state' => 'Nebraska'));
+?>
+
+

See also assign() and +getTemplateVars()

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-assign/index.html b/5.0/programmers/api-functions/api-assign/index.html new file mode 100644 index 000000000..7c29d3c66 --- /dev/null +++ b/5.0/programmers/api-functions/api-assign/index.html @@ -0,0 +1,2216 @@ + + + + + + + + + + + + + + + + + + Api assign - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

assign()

+

assign variables/objects to the templates

+

Description

+

void

+

assign

+

mixed

+

var

+

void

+

assign

+

string

+

varname

+

mixed

+

var

+

bool

+

nocache

+

You can explicitly pass name/value pairs, or associative arrays +containing the name/value pairs.

+

If you pass the optional third nocache parameter of TRUE, the variable +is assigned as nocache variable. See +Cacheability of Variables for details.

+
+

Note

+

When you assign/register objects to templates, be sure that all +properties and methods accessed from the template are for presentation +purposes only. It is very easy to inject application logic through +objects, and this leads to poor designs that are difficult to manage. +See the Best Practices section of the Smarty website.

+
+
<?php
+// passing name/value pairs
+$smarty->assign('Name', 'Fred');
+$smarty->assign('Address', $address);
+
+// passing an associative array
+$smarty->assign(array('city' => 'Lincoln', 'state' => 'Nebraska'));
+
+// passing an array
+$myArray = array('no' => 10, 'label' => 'Peanuts');
+$smarty->assign('foo',$myArray);
+
+// passing a row from a database (eg adodb)
+$sql = 'select id, name, email from contacts where contact ='.$id;
+$smarty->assign('contact', $db->getRow($sql));
+?>
+
+

These are accessed in the template with

+
{* note the vars are case sensitive like php *}
+{$Name}
+{$Address}
+{$city}
+{$state}
+
+{$foo.no}, {$foo.label}
+{$contact.id}, {$contact.name},{$contact.email}
+
+

To access more complex array assignments see +{foreach} and +{section}

+

See also getTemplateVars(), +clearAssign(), append() and +{assign}

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-clear-all-assign/index.html b/5.0/programmers/api-functions/api-clear-all-assign/index.html new file mode 100644 index 000000000..1f709116d --- /dev/null +++ b/5.0/programmers/api-functions/api-clear-all-assign/index.html @@ -0,0 +1,2180 @@ + + + + + + + + + + + + + + + + + + Api clear all assign - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

clearAllAssign()

+

clears the values of all assigned variables

+

Description

+

void

+

clearAllAssign

+
<?php
+// passing name/value pairs
+$smarty->assign('Name', 'Fred');
+$smarty->assign('Address', $address);
+
+// will output above
+print_r( $smarty->getTemplateVars() );
+
+// clear all assigned variables
+$smarty->clearAllAssign();
+
+// will output nothing
+print_r( $smarty->getTemplateVars() );
+
+?>
+
+

See also clearAssign(), +clearConfig(), +getTemplateVars(), assign() +and append()

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-clear-all-cache/index.html b/5.0/programmers/api-functions/api-clear-all-cache/index.html new file mode 100644 index 000000000..2244b5f51 --- /dev/null +++ b/5.0/programmers/api-functions/api-clear-all-cache/index.html @@ -0,0 +1,2180 @@ + + + + + + + + + + + + + + + + + + Api clear all cache - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

clearAllCache()

+

clears the entire template cache

+

Description

+

void

+

clearAllCache

+

int

+

expire_time

+

As an optional parameter, you can supply a minimum age in seconds the +cache files must be before they will get cleared.

+
+

Note

+

Since Smarty version 3.1.14 it is possible to delete cache files by +their individual expiration time at creation by passing constant +SMARTY::CLEAR_EXPIRED as expire_time parameter.

+
+
<?php
+// clear the entire cache
+$smarty->clearAllCache();
+
+// clears all files over one hour old
+$smarty->clearAllCache(3600);
+?>
+
+

See also clearCache(), +isCached() and the caching page.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-clear-assign/index.html b/5.0/programmers/api-functions/api-clear-assign/index.html new file mode 100644 index 000000000..f39818253 --- /dev/null +++ b/5.0/programmers/api-functions/api-clear-assign/index.html @@ -0,0 +1,2175 @@ + + + + + + + + + + + + + + + + + + Api clear assign - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

clearAssign()

+

clears the value of an assigned variable

+

Description

+

void

+

clearAssign

+

mixed

+

var

+

This can be a single value, or an array of values.

+
<?php
+// clear a single variable
+$smarty->clearAssign('Name');
+
+// clears multiple variables
+$smarty->clearAssign(array('Name', 'Address', 'Zip'));
+?>
+
+

See also clearAllAssign(), +clearConfig(), +getTemplateVars(), assign() +and append()

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-clear-cache/index.html b/5.0/programmers/api-functions/api-clear-cache/index.html new file mode 100644 index 000000000..2da067c52 --- /dev/null +++ b/5.0/programmers/api-functions/api-clear-cache/index.html @@ -0,0 +1,2203 @@ + + + + + + + + + + + + + + + + + + Api clear cache - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

clearCache()

+

clears the cache for a specific template

+

Description

+

void

+

clearCache

+

string

+

template

+

string

+

cache_id

+

string

+

compile_id

+

int

+

expire_time

+
    +
  • +

    If you have multiple caches for a + template, you can clear a specific cache by supplying the cache_id + as the second parameter.

    +
  • +
  • +

    You can also pass a $compile_id as a third + parameter. You can group templates together so + they can be removed as a group, see the caching section + for more information.

    +
  • +
  • +

    As an optional fourth parameter, you can supply a minimum age in + seconds the cache file must be before it will get cleared.

    +
    +

    Note

    +

    Since Smarty version 3.1.14 it is possible to delete cache files +by their individual expiration time at creation by passing +constant SMARTY::CLEAR_EXPIRED as fourth parameter.

    +
    +
  • +
+ + +
<?php
+// clear the cache for a template
+$smarty->clearCache('index.tpl');
+
+// clear the cache for a particular cache id in an multiple-cache template
+$smarty->clearCache('index.tpl', 'MY_CACHE_ID');
+?>
+
+

See also clearAllCache() and +caching section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-clear-compiled-tpl/index.html b/5.0/programmers/api-functions/api-clear-compiled-tpl/index.html new file mode 100644 index 000000000..c60d87aa9 --- /dev/null +++ b/5.0/programmers/api-functions/api-clear-compiled-tpl/index.html @@ -0,0 +1,2183 @@ + + + + + + + + + + + + + + + + + + Api clear compiled tpl - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

clearCompiledTemplate()

+

clears the compiled version of the specified template resource

+

Description

+

void

+

clearCompiledTemplate

+

string

+

tpl_file

+

string

+

compile_id

+

int

+

exp_time

+

This clears the compiled version of the specified template resource, or +all compiled template files if one is not specified. If you pass a +$compile_id only the compiled template for +this specific $compile_id is cleared. If you +pass an exp_time, then only compiled templates older than exp_time +seconds are cleared, by default all compiled templates are cleared +regardless of their age. This function is for advanced use only, not +normally needed.

+
<?php
+// clear a specific template resource
+$smarty->clearCompiledTemplate('index.tpl');
+
+// clear entire compile directory
+$smarty->clearCompiledTemplate();
+?>
+
+

See also clearCache().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-clear-config/index.html b/5.0/programmers/api-functions/api-clear-config/index.html new file mode 100644 index 000000000..ba271033c --- /dev/null +++ b/5.0/programmers/api-functions/api-clear-config/index.html @@ -0,0 +1,2178 @@ + + + + + + + + + + + + + + + + + + Api clear config - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ +
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-compile-all-config/index.html b/5.0/programmers/api-functions/api-compile-all-config/index.html new file mode 100644 index 000000000..d0f94afdb --- /dev/null +++ b/5.0/programmers/api-functions/api-compile-all-config/index.html @@ -0,0 +1,2205 @@ + + + + + + + + + + + + + + + + + + Api compile all config - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

compileAllConfig()

+

compiles all known config files

+

Description

+

string

+

compileAllConfig

+

string

+

extension

+

boolean

+

force

+

integer

+

timelimit

+

integer

+

maxerror

+

This function compiles config files found in the +$config_dir folder. It uses the following +parameters:

+
    +
  • +

    extension is an optional string which defines the file extension + for the config files. The default is \".conf\".

    +
  • +
  • +

    force is an optional boolean which controls if only modified + (false) or all (true) config files shall be compiled. The default is + \"false\".

    +
  • +
  • +

    timelimit is an optional integer to set a runtime limit in seconds + for the compilation process. The default is no limit.

    +
  • +
  • +

    maxerror is an optional integer to set an error limit. If more + config files failed to compile the function will be aborted. The + default is no limit.

    +
  • +
+
+

Note

+

This function may not create desired results in all configurations. +Use is on own risk.

+
+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// force compilation of all config files
+$smarty->compileAllConfig('.config',true);
+
+?>
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-compile-all-templates/index.html b/5.0/programmers/api-functions/api-compile-all-templates/index.html new file mode 100644 index 000000000..06896bfe2 --- /dev/null +++ b/5.0/programmers/api-functions/api-compile-all-templates/index.html @@ -0,0 +1,2211 @@ + + + + + + + + + + + + + + + + + + Api compile all templates - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

compileAllTemplates()

+

compiles all known templates

+

Description

+

string

+

compileAllTemplates

+

string

+

extension

+

boolean

+

force

+

integer

+

timelimit

+

integer

+

maxerror

+

This function compiles template files found in the +$template_dir folder. It uses the following +parameters:

+
    +
  • +

    extension is an optional string which defines the file extension + for the template files. The default is \".tpl\".

    +
  • +
  • +

    force is an optional boolean which controls if only modified + (false) or all (true) templates shall be compiled. The default is + \"false\".

    +
  • +
  • +

    timelimit is an optional integer to set a runtime limit in seconds + for the compilation process. The default is no limit.

    +
  • +
  • +

    maxerror is an optional integer to set an error limit. If more + templates failed to compile the function will be aborted. The + default is no limit.

    +
  • +
+
+

Note

+

This function may not create desired results in all configurations. +Use is on own risk.

+

Note

+

If any template requires registered plugins, filters or objects you +must register all of them before running this function.

+

Note

+

If you are using template inheritance this function will create +compiled files of parent templates which will never be used.

+
+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// force compilation of all template files
+$smarty->compileAllTemplates('.tpl',true);
+
+?>
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-config-load/index.html b/5.0/programmers/api-functions/api-config-load/index.html new file mode 100644 index 000000000..300e9fc59 --- /dev/null +++ b/5.0/programmers/api-functions/api-config-load/index.html @@ -0,0 +1,2188 @@ + + + + + + + + + + + + + + + + + + Api config load - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

configLoad()

+

loads config file data and assigns it to the template

+

Description

+

void

+

configLoad

+

string

+

file

+

string

+

section

+

This loads config file data and assigns it to the +template. This works identically to the template +{config_load} function.

+
+

Note

+

As of Smarty 2.4.0, assigned template variables are kept across +invocations of fetch() and +display(). Config vars loaded from configLoad() +are always global in scope. Config files are also compiled for faster +execution, and respect the $force_compile +and $compile_check settings.

+
+
<?php
+// load config variables and assign them
+$smarty->configLoad('my.conf');
+
+// load a section
+$smarty->configLoad('my.conf', 'foobar');
+?>
+
+

See also {config_load}, +getConfigVars(), +clearConfig(), and +config variables

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-create-data/index.html b/5.0/programmers/api-functions/api-create-data/index.html new file mode 100644 index 000000000..b9aaf421d --- /dev/null +++ b/5.0/programmers/api-functions/api-create-data/index.html @@ -0,0 +1,2193 @@ + + + + + + + + + + + + + + + + + + Api create data - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

createData()

+

creates a data object

+

Description

+

string

+

createData

+

object

+

parent

+

string

+

createData

+

This creates a data object which will hold assigned variables. It uses +the following parameters:

+
    +
  • parent is an optional parameter. It is an uplink to the main + Smarty object, a another user-created data object or to user-created + template object. These objects can be chained. Templates can access + variables assigned to any of the objects in it\'s parent chain.
  • +
+

Data objects are used to create scopes for assigned variables. They can +be used to control which variables are seen by which templates.

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// create data object with its private variable scope
+$data = $smarty->createData();
+
+// assign variable to data scope
+$data->assign('foo','bar');
+
+// create template object which will use variables from data object
+$tpl = $smarty->createTemplate('index.tpl',$data);
+
+// display the template
+$tpl->display();
+?>
+
+

See also display(), and +createTemplate(),

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-create-template/index.html b/5.0/programmers/api-functions/api-create-template/index.html new file mode 100644 index 000000000..5a5d1a13d --- /dev/null +++ b/5.0/programmers/api-functions/api-create-template/index.html @@ -0,0 +1,2215 @@ + + + + + + + + + + + + + + + + + + Api create template - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

createTemplate()

+

returns a template object

+

Description

+

Smarty_Internal_Template

+

createTemplate

+

string

+

template

+

object

+

parent

+

Smarty_Internal_Template

+

createTemplate

+

string

+

template

+

array

+

data

+

Smarty_Internal_Template

+

createTemplate

+

string

+

template

+

string

+

cache_id

+

string

+

compile_id

+

object

+

parent

+

Smarty_Internal_Template

+

createTemplate

+

string

+

template

+

string

+

cache_id

+

string

+

compile_id

+

array

+

data

+

This creates a template object which later can be rendered by the +display or fetch method. It uses the +following parameters:

+ + + +
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+// create template object with its private variable scope
+$tpl = $smarty->createTemplate('index.tpl');
+
+// assign variable to template scope
+$tpl->assign('foo','bar');
+
+// display the template
+$tpl->display();
+?>
+
+

See also display(), and +templateExists().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-disable-security/index.html b/5.0/programmers/api-functions/api-disable-security/index.html new file mode 100644 index 000000000..b25578a68 --- /dev/null +++ b/5.0/programmers/api-functions/api-disable-security/index.html @@ -0,0 +1,2163 @@ + + + + + + + + + + + + + + + + + + Api disable security - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

disableSecurity()

+

disables template security

+

Description

+

string

+

disableSecurity

+

This disables security checking on templates.

+

See also enableSecurity(), and +Security.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-display/index.html b/5.0/programmers/api-functions/api-display/index.html new file mode 100644 index 000000000..1bf27f288 --- /dev/null +++ b/5.0/programmers/api-functions/api-display/index.html @@ -0,0 +1,2218 @@ + + + + + + + + + + + + + + + + + + Api display - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

display()

+

displays the template

+

Description

+

void

+

display

+

string

+

template

+

string

+

cache_id

+

string

+

compile_id

+

This displays the contents of a template. To return the contents of a +template into a variable, use fetch(). Supply a valid +template resource type and path. As an optional second +parameter, you can pass a $cache_id, see the caching +section for more information.

+

PARAMETER.COMPILEID

+
<?php
+
+use Smarty\Smarty;
+
+$smarty = new Smarty();
+$smarty->setCaching(true);
+
+// only do db calls if cache doesn't exist
+if(!$smarty->isCached('index.tpl')) {
+
+  // dummy up some data
+  $address = '245 N 50th';
+  $db_data = array(
+               'City' => 'Lincoln',
+               'State' => 'Nebraska',
+               'Zip' => '68502'
+             );
+
+  $smarty->assign('Name', 'Fred');
+  $smarty->assign('Address', $address);
+  $smarty->assign('data', $db_data);
+
+}
+
+// display the output
+$smarty->display('index.tpl');
+?>
+
+

Use the syntax for template resources to display files +outside of the $template_dir directory.

+
<?php
+// absolute filepath
+$smarty->display('/usr/local/include/templates/header.tpl');
+
+// absolute filepath (same thing)
+$smarty->display('file:/usr/local/include/templates/header.tpl');
+
+// windows absolute filepath (MUST use "file:" prefix)
+$smarty->display('file:C:/www/pub/templates/header.tpl');
+
+// include from template resource named "db"
+$smarty->display('db:header.tpl');
+?>
+
+

See also fetch() and +templateExists().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-enable-security/index.html b/5.0/programmers/api-functions/api-enable-security/index.html new file mode 100644 index 000000000..f49e0db0b --- /dev/null +++ b/5.0/programmers/api-functions/api-enable-security/index.html @@ -0,0 +1,2184 @@ + + + + + + + + + + + + + + + + + + Api enable security - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

enableSecurity()

+

enables template security

+

Description

+

string

+

enableSecurity

+

string

+

securityclass

+

string

+

enableSecurity

+

object

+

securityobject

+

string

+

enableSecurity

+

This enables security checking on templates. It uses the following +parameters:

+
    +
  • +

    securityclass is an optional parameter. It\'s the name of the + class with defines the security policy parameters.

    +
  • +
  • +

    securityobject is an optional parameter. It\'s the object with + defines the security policy parameters.

    +
  • +
+

For the details how to setup a security policy see the +Security section.

+

See also disableSecurity(), and +Security.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-fetch/index.html b/5.0/programmers/api-functions/api-fetch/index.html new file mode 100644 index 000000000..c18ca7691 --- /dev/null +++ b/5.0/programmers/api-functions/api-fetch/index.html @@ -0,0 +1,2221 @@ + + + + + + + + + + + + + + + + + + Api fetch - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

fetch()

+

returns the template output

+

Description

+

string

+

fetch

+

string

+

template

+

string

+

cache_id

+

string

+

compile_id

+

This returns the template output instead of displaying +it. Supply a valid template resource type and path. As an +optional second parameter, you can pass a $cache id, see the caching +section for more information.

+

PARAMETER.COMPILEID

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty;
+
+$smarty->setCaching(true);
+
+// set a separate cache_id for each unique URL
+$cache_id = md5($_SERVER['REQUEST_URI']);
+
+// capture the output
+$output = $smarty->fetch('index.tpl', $cache_id);
+
+// do something with $output here
+echo $output;
+?>
+
+

The email_body.tpl template

+
Dear {$contact_info.name},
+
+Welcome and thank you for signing up as a member of our user group.
+
+Click on the link below to login with your user name
+of '{$contact_info.username}' so you can post in our forums.
+
+{$login_url}
+
+List master
+
+{textformat wrap=40}
+This is some long-winded disclaimer text that would automatically get wrapped
+at 40 characters. This helps make the text easier to read in mail programs that
+do not wrap sentences for you.
+{/textformat}
+
+

The php script using the PHP mail() +function

+
<?php
+
+// get $contact_info from db or other resource here
+
+$smarty->assign('contact_info',$contact_info);
+$smarty->assign('login_url',"http://{$_SERVER['SERVER_NAME']}/login");
+
+mail($contact_info['email'], 'Thank You', $smarty->fetch('email_body.tpl'));
+
+?>
+
+

See also {fetch} +display(), {eval}, and +templateExists().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-get-config-dir/index.html b/5.0/programmers/api-functions/api-get-config-dir/index.html new file mode 100644 index 000000000..448f356d6 --- /dev/null +++ b/5.0/programmers/api-functions/api-get-config-dir/index.html @@ -0,0 +1,2184 @@ + + + + + + + + + + + + + + + + + + Api get config dir - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

getConfigDir()

+

return the directory where config files are stored

+

Description

+

string|array

+

getConfigDir

+

string

+

key

+
<?php
+
+// set some config directories
+$smarty->setConfigDir(array(
+    'one' => './config',
+    'two' => './config_2',
+    'three' => './config_3',
+));
+
+// get all directories where config files are stored
+$config_dir = $smarty->getConfigDir();
+var_dump($config_dir); // array
+
+// get directory identified by key
+$config_dir = $smarty->getConfigDir('one');
+var_dump($config_dir); // string
+
+?>
+
+

See also setConfigDir(), +addConfigDir() and +$config_dir.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-get-config-vars/index.html b/5.0/programmers/api-functions/api-get-config-vars/index.html new file mode 100644 index 000000000..5e72f9025 --- /dev/null +++ b/5.0/programmers/api-functions/api-get-config-vars/index.html @@ -0,0 +1,2180 @@ + + + + + + + + + + + + + + + + + + Api get config vars - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

getConfigVars()

+

returns the given loaded config variable value

+

Description

+

array

+

getConfigVars

+

string

+

varname

+

If no parameter is given, an array of all loaded config +variables is returned.

+
<?php
+
+// get loaded config template var #foo#
+$myVar = $smarty->getConfigVars('foo');
+
+// get all loaded config template vars
+$all_config_vars = $smarty->getConfigVars();
+
+// take a look at them
+print_r($all_config_vars);
+?>
+
+

See also clearConfig(), +{config_load}, +configLoad() and +getTemplateVars().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-get-plugins-dir/index.html b/5.0/programmers/api-functions/api-get-plugins-dir/index.html new file mode 100644 index 000000000..574cedeed --- /dev/null +++ b/5.0/programmers/api-functions/api-get-plugins-dir/index.html @@ -0,0 +1,2177 @@ + + + + + + + + + + + + + + + + + + Api get plugins dir - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

getPluginsDir()

+

return the directory where plugins are stored

+

Description

+

array

+

getPluginsDir

+
<?php
+
+// set some plugins directories
+$smarty->setPluginsDir(array(
+    './plugins',
+    './plugins_2',
+));
+
+// get all directories where plugins are stored
+$config_dir = $smarty->getPluginsDir();
+var_dump($config_dir); // array
+
+?>
+
+

See also setPluginsDir(), +addPluginsDir() and +$plugins_dir.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-get-registered-object/index.html b/5.0/programmers/api-functions/api-get-registered-object/index.html new file mode 100644 index 000000000..e85c842e7 --- /dev/null +++ b/5.0/programmers/api-functions/api-get-registered-object/index.html @@ -0,0 +1,2179 @@ + + + + + + + + + + + + + + + + + + Api get registered object - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

getRegisteredObject()

+

returns a reference to a registered object

+

Description

+

array

+

getRegisteredObject

+

string

+

object_name

+

This is useful from within a custom function when you need direct access +to a registered object. See the +objects page for more info.

+
<?php
+function smarty_block_foo($params, $smarty)
+{
+  if (isset($params['object'])) {
+    // get reference to registered object
+    $obj_ref = $smarty->getRegisteredObject($params['object']);
+    // use $obj_ref is now a reference to the object
+  }
+}
+?>
+
+

See also registerObject(), +unregisterObject() and objects +page

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-get-template-vars/index.html b/5.0/programmers/api-functions/api-get-template-vars/index.html new file mode 100644 index 000000000..378df0653 --- /dev/null +++ b/5.0/programmers/api-functions/api-get-template-vars/index.html @@ -0,0 +1,2180 @@ + + + + + + + + + + + + + + + + + + Api get template vars - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

getTemplateVars()

+

returns assigned variable value(s)

+

Description

+

array

+

getTemplateVars

+

string

+

varname

+

If no parameter is given, an array of all assigned +variables are returned.

+
<?php
+// get assigned template var 'foo'
+$myVar = $smarty->getTemplateVars('foo');
+
+// get all assigned template vars
+$all_tpl_vars = $smarty->getTemplateVars();
+
+// take a look at them
+print_r($all_tpl_vars);
+?>
+
+

See also assign(), +{assign}, append(), +clearAssign(), +clearAllAssign() and +getConfigVars()

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-is-cached/index.html b/5.0/programmers/api-functions/api-is-cached/index.html new file mode 100644 index 000000000..edbed6a65 --- /dev/null +++ b/5.0/programmers/api-functions/api-is-cached/index.html @@ -0,0 +1,2227 @@ + + + + + + + + + + + + + + + + + + Api is cached - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

isCached()

+

returns true if there is a valid cache for this template

+

Description

+

bool

+

isCached

+

string

+

template

+

string

+

cache_id

+

string

+

compile_id

+
    +
  • +

    This only works if $caching is set to one of + \Smarty\Smarty::CACHING_LIFETIME_CURRENT or + \Smarty\Smarty::CACHING_LIFETIME_SAVED to enable caching. See the caching + section for more info.

    +
  • +
  • +

    You can also pass a $cache_id as an optional second parameter in + case you want multiple caches for the + given template.

    +
  • +
  • +

    You can supply a $compile id as an + optional third parameter. If you omit that parameter the persistent + $compile_id is used if its set.

    +
  • +
  • +

    If you do not want to pass a $cache_id but want to pass a + $compile_id you have to pass NULL as a + $cache_id.

    +
  • +
+
+

Note

+

If isCached() returns TRUE it actually loads the cached output and +stores it internally. Any subsequent call to +display() or fetch() will return +this internally stored output and does not try to reload the cache +file. This prevents a race condition that may occur when a second +process clears the cache between the calls to isCached() and to +display() in the example above. This also means +calls to clearCache() and other changes of the +cache-settings may have no effect after isCached() returned TRUE.

+
+
<?php
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+if(!$smarty->isCached('index.tpl')) {
+// do database calls, assign vars here
+}
+
+$smarty->display('index.tpl');
+?>
+
+
+
+
+<?php
+$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+if(!$smarty->isCached('index.tpl', 'FrontPage')) {
+  // do database calls, assign vars here
+}
+
+$smarty->display('index.tpl', 'FrontPage');
+?>
+
+

See also clearCache(), +clearAllCache(), and caching +section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-load-filter/index.html b/5.0/programmers/api-functions/api-load-filter/index.html new file mode 100644 index 000000000..f37859987 --- /dev/null +++ b/5.0/programmers/api-functions/api-load-filter/index.html @@ -0,0 +1,2182 @@ + + + + + + + + + + + + + + + + + + Api load filter - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

loadFilter()

+

load a filter plugin

+

Description

+

void

+

loadFilter

+

string

+

type

+

string

+

name

+

The first argument specifies the type of the filter to load and can be +one of the following: variable, pre, post or output. The second argument +specifies the name of the filter plugin.

+
<?php
+
+// load prefilter named 'trim'
+$smarty->loadFilter('pre', 'trim');
+
+// load another prefilter named 'datefooter'
+$smarty->loadFilter('pre', 'datefooter');
+
+// load output filter named 'compress'
+$smarty->loadFilter('output', 'compress');
+
+?>
+
+

See also registerFilter() and advanced +features.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-mute-expected-errors/index.html b/5.0/programmers/api-functions/api-mute-expected-errors/index.html new file mode 100644 index 000000000..10dbe8eea --- /dev/null +++ b/5.0/programmers/api-functions/api-mute-expected-errors/index.html @@ -0,0 +1,2168 @@ + + + + + + + + + + + + + + + + + + Api mute expected errors - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

mutes expected warnings and notices deliberately generated by Smarty

+

Description

+

string

+

muteExpectedErrors

+

muteExpectedErrors() registers a custom error handler using +set_error_handler(). The error +handler merely inspects $errno and $errfile to determine if the +given error was produced deliberately and must be ignored, or should be +passed on to the next error handler.

+

\Smarty\Smarty::unmuteExpectedErrors() removes the current error handler. +Please note, that if you\'ve registered any custom error handlers after +the muteExpectedErrors() call, the unmute will not remove Smarty\'s +muting error handler, but the one registered last.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-register-cacheresource/index.html b/5.0/programmers/api-functions/api-register-cacheresource/index.html new file mode 100644 index 000000000..a2cc21490 --- /dev/null +++ b/5.0/programmers/api-functions/api-register-cacheresource/index.html @@ -0,0 +1,2181 @@ + + + + + + + + + + + + + + + + + + Api register cacheresource - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

registerCacheResource()

+

dynamically register CacheResources

+

Description

+

void

+

registerCacheResource

+

string

+

name

+

Smarty_CacheResource

+

resource_handler

+

Use this to dynamically register a CacheResource +plugin with Smarty. Pass in the name of the +CacheResource and the object extending Smarty_CacheResource. See +Custom Cache Implementation for more information on +how to create custom CacheResources.

+
+

Note

+

In Smarty2 this used to be a callback function called +$cache_handler_func. Smarty3 replaced this callback by the +Smarty_CacheResource module.

+
+
<?php
+$smarty->registerCacheResource('mysql', new My_CacheResource_Mysql());
+?>
+
+

See also unregisterCacheResource() +and the Custom CacheResource Implementation section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-register-class/index.html b/5.0/programmers/api-functions/api-register-class/index.html new file mode 100644 index 000000000..57418db1f --- /dev/null +++ b/5.0/programmers/api-functions/api-register-class/index.html @@ -0,0 +1,2209 @@ + + + + + + + + + + + + + + + + + + Api register class - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

registerClass()

+

register a class for use in the templates

+

Description

+

void

+

registerClass

+

string

+

class_name

+

string

+

class_impl

+

Smarty allows you to access static classes from templates as long as the +Security Policy does not tell it +otherwise. If security is enabled, classes registered with +registerClass() are accessible to templates.

+
<?php
+use Smarty\Smarty;
+
+class Bar {
+  $property = "hello world";
+}
+
+$smarty = new Smarty();
+$smarty->registerClass("Foo", "Bar");
+
+
+
+
+{* Smarty will access this class as long as it's not prohibited by security *}
+{Bar::$property}
+{* Foo translates to the real class Bar *}
+{Foo::$property}
+
+
+
+
+<?php
+use Smarty\Smarty;
+
+namespace my\php\application {
+  class Bar {
+    $property = "hello world";
+  }
+}
+
+$smarty = new Smarty();
+$smarty->registerClass("Foo", "\my\php\application\Bar");
+
+
+
+
+{* Foo translates to the real class \my\php\application\Bar *}
+{Foo::$property}
+
+

See also registerObject(), and +Security.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-register-default-plugin-handler/index.html b/5.0/programmers/api-functions/api-register-default-plugin-handler/index.html new file mode 100644 index 000000000..d08c7183f --- /dev/null +++ b/5.0/programmers/api-functions/api-register-default-plugin-handler/index.html @@ -0,0 +1,2235 @@ + + + + + + + + + + + + + + + + + + Api register default plugin handler - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

registerDefaultPluginHandler()

+

register a function which gets called on undefined tags

+

Description

+

void

+

registerDefaultPluginHandler

+

mixed

+

callback

+

Register a default plugin handler which gets called if the compiler can +not find a definition for a tag otherwise. It uses the following +parameters:

+

If during compilation Smarty encounters tag which is not defined +internal, registered or located in the plugins folder it tries to +resolve it by calling the registered default plugin handler. The handler +may be called several times for same undefined tag looping over valid +plugin types.

+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty();
+$smarty->registerDefaultPluginHandler('my_plugin_handler');
+
+/**
+ * Default Plugin Handler
+ *
+ * called when Smarty encounters an undefined tag during compilation
+ * 
+ * @param string                     $name      name of the undefined tag
+ * @param string                     $type     tag type (e.g. Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK, 
+                                               Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_MODIFIER, Smarty::PLUGIN_MODIFIERCOMPILER)
+ * @param \Smarty\Template\   $template     template object
+ * @param string                     &$callback    returned function name 
+ * @param string                     &$script      optional returned script filepath if function is external
+ * @param bool                       &$cacheable    true by default, set to false if plugin is not cachable (Smarty >= 3.1.8)
+ * @return bool                      true if successfull
+ */
+function my_plugin_handler ($name, $type, $template, &$callback, &$script, &$cacheable)
+{
+    switch ($type) {
+        case Smarty::PLUGIN_FUNCTION:
+            switch ($name) {
+                case 'scriptfunction':
+                    $script = './scripts/script_function_tag.php';
+                    $callback = 'default_script_function_tag';
+                    return true;
+                case 'localfunction':
+                    $callback = 'default_local_function_tag';
+                    return true;
+                default:
+                return false;
+            }
+        case Smarty::PLUGIN_COMPILER:
+            switch ($name) {
+                case 'scriptcompilerfunction':
+                    $script = './scripts/script_compiler_function_tag.php';
+                    $callback = 'default_script_compiler_function_tag';
+                    return true;
+                default:
+                return false;
+            }
+        case Smarty::PLUGIN_BLOCK:
+            switch ($name) {
+                case 'scriptblock':
+                    $script = './scripts/script_block_tag.php';
+                    $callback = 'default_script_block_tag';
+                    return true;
+                default:
+                return false;
+            }
+        default:
+        return false;
+    }
+ }
+
+?>
+
+
+

Note

+

The return callback must be static; a function name or an array of +class and method name.

+

Dynamic callbacks like objects methods are not supported.

+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-register-filter/index.html b/5.0/programmers/api-functions/api-register-filter/index.html new file mode 100644 index 000000000..f74516105 --- /dev/null +++ b/5.0/programmers/api-functions/api-register-filter/index.html @@ -0,0 +1,2184 @@ + + + + + + + + + + + + + + + + + + Api register filter - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

registerFilter()

+

dynamically register filters

+

Description

+

void

+

registerFilter

+

string

+

type

+

mixed

+

callback

+

Use this to dynamically register filters to operate on a templates. It +uses the following parameters:

+

NOTE.PARAMETER.FUNCTION

+

A prefilter runs through the template +source before it gets compiled. See template +prefilters for more information on how +to setup a prefiltering function.

+

A postfilter runs through the +template code after it was compiled to PHP. See template +postfilters for more information on how +to setup a postfiltering function.

+

A outputfilter operates on a template\'s +output before it is displayed. See template output +filters for more information on how +to set up an output filter function.

+

See also unregisterFilter(), +loadFilter(), template pre +filters template post +filters template output +filters section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-register-object/index.html b/5.0/programmers/api-functions/api-register-object/index.html new file mode 100644 index 000000000..da1650a35 --- /dev/null +++ b/5.0/programmers/api-functions/api-register-object/index.html @@ -0,0 +1,2182 @@ + + + + + + + + + + + + + + + + + + Api register object - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

registerObject()

+

register an object for use in the templates

+

Description

+

void

+

registerObject

+

string

+

object_name

+

object

+

object

+

array

+

allowed_methods_properties

+

boolean

+

format

+

array

+

block_methods

+
+

Note

+

When you register/assign objects to templates, be sure that all +properties and methods accessed from the template are for presentation +purposes only. It is very easy to inject application logic through +objects, and this leads to poor designs that are difficult to manage. +See the Best Practices section of the Smarty website.

+
+

See the objects section for more +information.

+

See also getRegisteredObject(), and +unregisterObject().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-register-plugin/index.html b/5.0/programmers/api-functions/api-register-plugin/index.html new file mode 100644 index 000000000..8d550588e --- /dev/null +++ b/5.0/programmers/api-functions/api-register-plugin/index.html @@ -0,0 +1,2238 @@ + + + + + + + + + + + + + + + + + + Api register plugin - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

registerPlugin()

+

dynamically register plugins

+

Description

+

void

+

registerPlugin

+

string

+

type

+

string

+

name

+

mixed

+

callback

+

bool

+

cacheable

+

mixed

+

cache_attrs

+

This method registers functions or methods defined in your script as +plugin. It uses the following parameters:

+ + + +
<?php
+$smarty->registerPlugin("function","date_now", "print_current_date");
+
+function print_current_date($params, $smarty)
+{
+  if(empty($params["format"])) {
+    $format = "%b %e, %Y";
+  } else {
+    $format = $params["format"];
+  }
+  return strftime($format,time());
+}
+?>
+
+

And in the template

+
{date_now}
+
+{* or to format differently *}
+{date_now format="%Y/%m/%d"}
+
+
+<?php
+// function declaration
+function do_translation ($params, $content, $smarty, &$repeat, $template)
+{
+  if (isset($content)) {
+    $lang = $params["lang"];
+    // do some translation with $content
+    return $translation;
+  }
+}
+
+// register with smarty
+$smarty->registerPlugin("block","translate", "do_translation");
+?>
+
+

Where the template is:

+
{translate lang="br"}Hello, world!{/translate}
+
+
+
+
+<?php
+
+// let's map PHP's stripslashes function to a Smarty modifier.
+$smarty->registerPlugin("modifier","ss", "stripslashes");
+
+?>
+
+

In the template, use ss to strip slashes.

+
<?php
+{$var|ss}
+?>
+
+

See also unregisterPlugin(), plugin +functions, plugin block +functions, plugin compiler +functions, and the creating plugin +modifiers section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-register-resource/index.html b/5.0/programmers/api-functions/api-register-resource/index.html new file mode 100644 index 000000000..15c36a309 --- /dev/null +++ b/5.0/programmers/api-functions/api-register-resource/index.html @@ -0,0 +1,2185 @@ + + + + + + + + + + + + + + + + + + Api register resource - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

registerResource()

+

dynamically register resources

+

Description

+

void

+

registerResource

+

string

+

name

+

Smarty_resource

+

resource_handler

+

Use this to dynamically register a Resource plugin with +Smarty. Pass in the name of the Resource and the object extending +Smarty_Resource. See template resources for more +information on how to setup a function for fetching templates.

+
+

Note

+

A resource name must be at least two characters in length. One +character resource names will be ignored and used as part of the file +path, such as $smarty->display('c:/path/to/index.tpl');

+

Note

+

Prior to Smarty 3.1 registerResource() accepted an array of callback +functions. While this is still possible for backward compatibility +reasons, it is strongly discouraged as callback functions have been +deprecated as of Smarty 3.1.

+
+
<?php
+$smarty->registerResource('mysql', new My_Resource_Mysql());
+?>
+
+

See also unregisterResource() and the +template resources section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-set-plugins-dir/index.html b/5.0/programmers/api-functions/api-set-plugins-dir/index.html new file mode 100644 index 000000000..655e9b23d --- /dev/null +++ b/5.0/programmers/api-functions/api-set-plugins-dir/index.html @@ -0,0 +1,2190 @@ + + + + + + + + + + + + + + + + + + Api set plugins dir - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

setPluginsDir()

+

set the directories where plugins are stored

+

Description

+

Smarty

+

setPluginsDir

+

string|array

+

plugins_dir

+
<?php
+
+// set a single directory where the plugins are stored
+$smarty->setPluginsDir('./plugins');
+
+// view the plugins dir chain
+var_dump($smarty->getPluginsDir());
+
+// set multiple directoríes where plugins are stored
+$smarty->setPluginsDir(array(
+    './plugins',
+    './plugins_2',
+));
+
+// view the plugins dir chain
+var_dump($smarty->getPluginsDir());
+
+// chaining of method calls
+$smarty->setTemplateDir('./templates')
+       ->setPluginsDir('./plugins')
+       ->setCompileDir('./templates_c')
+       ->setCacheDir('./cache');
+
+?>
+
+

See also getPluginsDir(), +addPluginsDir() and +$plugins_dir.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-test-install/index.html b/5.0/programmers/api-functions/api-test-install/index.html new file mode 100644 index 000000000..5ec7f2778 --- /dev/null +++ b/5.0/programmers/api-functions/api-test-install/index.html @@ -0,0 +1,2168 @@ + + + + + + + + + + + + + + + + + + Api test install - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

testInstall()

+

checks Smarty installation

+

Description

+

void

+

testInstall

+

This function verifies that all required working folders of the Smarty +installation can be accessed. It does output a corresponding protocol.

+
<?php
+use Smarty\Smarty;
+$smarty  = new Smarty();
+$smarty->testInstall();
+?>
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-unregister-cacheresource/index.html b/5.0/programmers/api-functions/api-unregister-cacheresource/index.html new file mode 100644 index 000000000..e418c2bdc --- /dev/null +++ b/5.0/programmers/api-functions/api-unregister-cacheresource/index.html @@ -0,0 +1,2171 @@ + + + + + + + + + + + + + + + + + + Api unregister cacheresource - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

unregisterCacheResource()

+

dynamically unregister a CacheResource plugin

+

Description

+

void

+

unregisterCacheResource

+

string

+

name

+

Pass in the name of the CacheResource.

+
<?php
+
+$smarty->unregisterCacheResource('mysql');
+
+?>
+
+

See also registerCacheResource() and +the Custom CacheResource Implementation section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-unregister-filter/index.html b/5.0/programmers/api-functions/api-unregister-filter/index.html new file mode 100644 index 000000000..b6f79051e --- /dev/null +++ b/5.0/programmers/api-functions/api-unregister-filter/index.html @@ -0,0 +1,2167 @@ + + + + + + + + + + + + + + + + + + Api unregister filter - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

unregisterFilter()

+

dynamically unregister a filter

+

Description

+

void

+

unregisterFilter

+

string

+

type

+

string|array

+

callback

+

Use this to dynamically unregister filters. It uses the following +parameters:

+

See also registerFilter().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-unregister-object/index.html b/5.0/programmers/api-functions/api-unregister-object/index.html new file mode 100644 index 000000000..001f946c1 --- /dev/null +++ b/5.0/programmers/api-functions/api-unregister-object/index.html @@ -0,0 +1,2164 @@ + + + + + + + + + + + + + + + + + + Api unregister object - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

unregisterObject()

+

dynamically unregister an object

+

Description

+

void

+

unregisterObject

+

string

+

object_name

+

See also registerObject() and objects +section

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-unregister-plugin/index.html b/5.0/programmers/api-functions/api-unregister-plugin/index.html new file mode 100644 index 000000000..0a47648bf --- /dev/null +++ b/5.0/programmers/api-functions/api-unregister-plugin/index.html @@ -0,0 +1,2177 @@ + + + + + + + + + + + + + + + + + + Api unregister plugin - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

unregisterPlugin

+

dynamically unregister plugins

+

Description

+

void

+

unregisterPlugin

+

string

+

type

+

string

+

name

+

This method unregisters plugins which previously have been registered by +registerPlugin(), It uses the following +parameters:

+ + +
<?php
+
+// we don't want template designers to have access to function plugin "date_now" 
+$smarty->unregisterPlugin("function","date_now");
+
+?>
+
+

See also registerPlugin().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-functions/api-unregister-resource/index.html b/5.0/programmers/api-functions/api-unregister-resource/index.html new file mode 100644 index 000000000..6b5465cf2 --- /dev/null +++ b/5.0/programmers/api-functions/api-unregister-resource/index.html @@ -0,0 +1,2171 @@ + + + + + + + + + + + + + + + + + + Api unregister resource - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

unregisterResource()

+

dynamically unregister a resource plugin

+

Description

+

void

+

unregisterResource

+

string

+

name

+

Pass in the name of the resource.

+
<?php
+
+$smarty->unregisterResource('db');
+
+?>
+
+

See also registerResource() and template +resources

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-auto-literal/index.html b/5.0/programmers/api-variables/variable-auto-literal/index.html new file mode 100644 index 000000000..d54da744b --- /dev/null +++ b/5.0/programmers/api-variables/variable-auto-literal/index.html @@ -0,0 +1,2166 @@ + + + + + + + + + + + + + + + + + + Variable auto literal - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$auto_literal {#variable.auto.literal}

+

The Smarty delimiter tags { and } will be ignored so long as they are +surrounded by white space. This behavior can be disabled by setting +auto_literal to false.

+

::: {.informalexample}

+
<?php
+$smarty->auto_literal = false;
+?>
+
+

:::

+

See also Escaping Smarty parsing,

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-cache-dir/index.html b/5.0/programmers/api-variables/variable-cache-dir/index.html new file mode 100644 index 000000000..3396e807d --- /dev/null +++ b/5.0/programmers/api-variables/variable-cache-dir/index.html @@ -0,0 +1,2182 @@ + + + + + + + + + + + + + + + + + + Variable cache dir - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$cache_dir {#variable.cache.dir}

+

This is the name of the directory where template caches are stored. By +default this is ./cache, meaning that Smarty will look for the +cache/ directory in the same directory as the executing php script. +This directory must be writeable by the web server, see +install for more info.

+

You can also use your own custom cache implementation +to control cache files, which will ignore this setting. See also +$use_sub_dirs.

+
+

Note

+

This setting must be either a relative or absolute path. include_path +is not used for writing files.

+

Note

+

It is not recommended to put this directory under the web server +document root.

+

Note

+

As of Smarty 3.1 the attribute \$cache_dir is no longer accessible +directly. Use getCacheDir() and +setCacheDir() instead.

+
+

See also getCacheDir(), +setCacheDir(), $caching, +$use_sub_dirs, +$cache_lifetime, +$cache_modified_check and the +caching section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-cache-id/index.html b/5.0/programmers/api-variables/variable-cache-id/index.html new file mode 100644 index 000000000..5d9b61b7a --- /dev/null +++ b/5.0/programmers/api-variables/variable-cache-id/index.html @@ -0,0 +1,2163 @@ + + + + + + + + + + + + + + + + + + Variable cache id - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$cache_id {#variable.cache.id}

+

Persistent cache_id identifier. As an alternative to passing the same +$cache_id to each and every function call, you can set this +$cache_id and it will be used implicitly thereafter.

+

With a $cache_id you can have multiple cache files for a single call +to display() or fetch() depending for +example from different content of the same template. See the caching +section for more information.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-cache-lifetime/index.html b/5.0/programmers/api-variables/variable-cache-lifetime/index.html new file mode 100644 index 000000000..e08fb183e --- /dev/null +++ b/5.0/programmers/api-variables/variable-cache-lifetime/index.html @@ -0,0 +1,2188 @@ + + + + + + + + + + + + + + + + + + Variable cache lifetime - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$cache_lifetime {#variable.cache.lifetime}

+

This is the length of time in seconds that a template cache is valid. +Once this time has expired, the cache will be regenerated.

+
    +
  • +

    $caching must be turned on (either + \Smarty\Smarty::CACHING_LIFETIME_CURRENT or + \Smarty\Smarty::CACHING_LIFETIME_SAVED) for $cache_lifetime to have any + purpose.

    +
  • +
  • +

    A $cache_lifetime value of -1 will force the cache to never + expire.

    +
  • +
  • +

    A value of 0 will cause the cache to always regenerate (good for + testing only, to disable caching a more efficient method is to set + $caching = \Smarty\Smarty::CACHING_OFF).

    +
  • +
  • +

    If you want to give certain templates their own cache lifetime, you + could do this by setting $caching = + \Smarty\Smarty::CACHING_LIFETIME_SAVED, then set $cache_lifetime to a + unique value just before calling display() or + fetch().

    +
  • +
+

If $force_compile is enabled, the cache +files will be regenerated every time, effectively disabling caching. You +can clear all the cache files with the +clear_all_cache() function, or individual +cache files (or groups) with the clear_cache() +function.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-cache-locking/index.html b/5.0/programmers/api-variables/variable-cache-locking/index.html new file mode 100644 index 000000000..cbba7f172 --- /dev/null +++ b/5.0/programmers/api-variables/variable-cache-locking/index.html @@ -0,0 +1,2162 @@ + + + + + + + + + + + + + + + + + + Variable cache locking - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$cache_locking {#variable.cache.locking}

+

Cache locking avoids concurrent cache generation. This means resource +intensive pages can be generated only once, even if they\'ve been +requested multiple times in the same moment.

+

Cache locking is disabled by default. To enable it set $cache_locking +to TRUE.

+

See also $locking_timeout

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-cache-modified-check/index.html b/5.0/programmers/api-variables/variable-cache-modified-check/index.html new file mode 100644 index 000000000..cf54cb758 --- /dev/null +++ b/5.0/programmers/api-variables/variable-cache-modified-check/index.html @@ -0,0 +1,2163 @@ + + + + + + + + + + + + + + + + + + Variable cache modified check - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$cache_modified_check {#variable.cache.modified.check}

+

If set to TRUE, Smarty will respect the If-Modified-Since header sent +from the client. If the cached file timestamp has not changed since the +last visit, then a '304: Not Modified' header will be sent instead of +the content.

+

See also $caching, +$cache_lifetime, and the caching +section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-caching-type/index.html b/5.0/programmers/api-variables/variable-caching-type/index.html new file mode 100644 index 000000000..f6f5c740e --- /dev/null +++ b/5.0/programmers/api-variables/variable-caching-type/index.html @@ -0,0 +1,2161 @@ + + + + + + + + + + + + + + + + + + Variable caching type - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$caching_type {#variable.caching.type}

+

This property specifies the name of the caching handler to use. It +defaults to file, enabling the internal filesystem based cache +handler.

+

See Custom Cache Implementation for pointers on +setting up your own cache handler.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-caching/index.html b/5.0/programmers/api-variables/variable-caching/index.html new file mode 100644 index 000000000..4b6631dc9 --- /dev/null +++ b/5.0/programmers/api-variables/variable-caching/index.html @@ -0,0 +1,2196 @@ + + + + + + + + + + + + + + + + + + Variable caching - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$caching {#variable.caching}

+

This tells Smarty whether or not to cache the output of the templates to +the $cache_dir. By default this is set to the +constant \Smarty\Smarty::CACHING_OFF. If your templates consistently generate +the same content, it is advisable to turn on $caching, as this may +result in significant performance gains.

+

You can also have multiple caches for the +same template.

+
    +
  • +

    A constant value of \Smarty\Smarty::CACHING_LIFETIME_CURRENT or + \Smarty\Smarty ::CACHING_LIFETIME_SAVED enables caching.

    +
  • +
  • +

    A value of \Smarty\Smarty::CACHING_LIFETIME_CURRENT tells Smarty to use + the current $cache_lifetime variable + to determine if the cache has expired.

    +
  • +
  • +

    A value of \Smarty\Smarty::CACHING_LIFETIME_SAVED tells Smarty to use the + $cache_lifetime value at the time the + cache was generated. This way you can set the + $cache_lifetime just before + fetching the template to have granular control over + when that particular cache expires. See also + isCached().

    +
  • +
  • +

    If $compile_check is enabled, the + cached content will be regenerated if any of the templates or config + files that are part of this cache are changed.

    +
  • +
  • +

    If $force_compile is enabled, the + cached content will always be regenerated.

    +
  • +
+

See also $cache_dir, +$cache_lifetime, +$cache_modified_check, +is_cached() and the caching section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-compile-dir/index.html b/5.0/programmers/api-variables/variable-compile-dir/index.html new file mode 100644 index 000000000..58b091ddd --- /dev/null +++ b/5.0/programmers/api-variables/variable-compile-dir/index.html @@ -0,0 +1,2177 @@ + + + + + + + + + + + + + + + + + + Variable compile dir - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$compile_dir {#variable.compile.dir}

+

This is the name of the directory where compiled templates are located. +By default this is ./templates_c, meaning that Smarty will look for +the templates_c/ directory in the same directory as the executing php +script. This directory must be writeable by the web server, see +install for more info.

+
+

Note

+

This setting must be either a relative or absolute path. include_path +is not used for writing files.

+

Note

+

It is not recommended to put this directory under the web server +document root.

+

Note

+

As of Smarty 3.1 the attribute \$compile_dir is no longer accessible +directly. Use getCompileDir() and +setCompileDir() instead.

+
+

See also getCompileDir(), +setCompileDir(), +$compile_id and +$use_sub_dirs.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-compile-id/index.html b/5.0/programmers/api-variables/variable-compile-id/index.html new file mode 100644 index 000000000..54d678329 --- /dev/null +++ b/5.0/programmers/api-variables/variable-compile-id/index.html @@ -0,0 +1,2188 @@ + + + + + + + + + + + + + + + + + + Variable compile id - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$compile_id {#variable.compile.id}

+

Persistent compile identifier. As an alternative to passing the same +$compile_id to each and every function call, you can set this +$compile_id and it will be used implicitly thereafter.

+

If you use the same template with different pre- and/or +post-filters you must use a unique +$compile_id to keep the compiled template files separated.

+

For example a prefilter that +localizes your templates (that is: translates language dependent parts) +at compile time, then you could use the current language as +$compile_id and you will get a set of compiled templates for each +language you use.

+
<?php
+$smarty->compile_id = 'en';
+?>
+
+

Another application would be to use the same compile directory across +multiple domains / multiple virtual hosts.

+
<?php
+
+$smarty->compile_id = $_SERVER['SERVER_NAME'];
+$smarty->compile_dir = '/path/to/shared_compile_dir';
+
+?>
+
+
+

Note

+

In Smarty 3 a $compile_id is no longer required to keep templates +with same name in different $template_dir +folders separated. The $template_dir file +path is encoded in the file name of compiled +and cached template files.

+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-compile-locking/index.html b/5.0/programmers/api-variables/variable-compile-locking/index.html new file mode 100644 index 000000000..a4adc5c4d --- /dev/null +++ b/5.0/programmers/api-variables/variable-compile-locking/index.html @@ -0,0 +1,2159 @@ + + + + + + + + + + + + + + + + + + Variable compile locking - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$compile_locking {#variable.compile.locking}

+

Compile locking avoids concurrent compilation of the same template.

+

Compile locking is enabled by default. To disable it set +$compile_locking to FALSE.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-compiler-class/index.html b/5.0/programmers/api-variables/variable-compiler-class/index.html new file mode 100644 index 000000000..f05d5c391 --- /dev/null +++ b/5.0/programmers/api-variables/variable-compiler-class/index.html @@ -0,0 +1,2159 @@ + + + + + + + + + + + + + + + + + + Variable compiler class - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$compiler_class {#variable.compiler.class}

+

Specifies the name of the compiler class that Smarty will use to compile +the templates. The default is \'Smarty_Compiler\'. For advanced users +only.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-config-booleanize/index.html b/5.0/programmers/api-variables/variable-config-booleanize/index.html new file mode 100644 index 000000000..869b02e7f --- /dev/null +++ b/5.0/programmers/api-variables/variable-config-booleanize/index.html @@ -0,0 +1,2161 @@ + + + + + + + + + + + + + + + + + + Variable config booleanize - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$config_booleanize {#variable.config.booleanize}

+

If set to TRUE, config files values of on/true/yes +and off/false/no get converted to boolean values automatically. This +way you can use the values in the template like so: +{if #foobar#}...{/if}. If foobar was on, true or yes, the {if} +statement will execute. Defaults to TRUE.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-config-dir/index.html b/5.0/programmers/api-variables/variable-config-dir/index.html new file mode 100644 index 000000000..b0e9fd4d4 --- /dev/null +++ b/5.0/programmers/api-variables/variable-config-dir/index.html @@ -0,0 +1,2173 @@ + + + + + + + + + + + + + + + + + + Variable config dir - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$config_dir {#variable.config.dir}

+

This is the directory used to store config files used +in the templates. Default is ./configs, meaning that Smarty will look +for the configs/ directory in the same directory as the executing php +script.

+
+

Note

+

It is not recommended to put this directory under the web server +document root.

+

Note

+

As of Smarty 3.1 the attribute \$config_dir is no longer accessible +directly. Use getConfigDir(), +setConfigDir() and +addConfigDir() instead.

+
+

See also getConfigDir(), +setConfigDir() and +addConfigDir().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-config-overwrite/index.html b/5.0/programmers/api-variables/variable-config-overwrite/index.html new file mode 100644 index 000000000..93e21c22c --- /dev/null +++ b/5.0/programmers/api-variables/variable-config-overwrite/index.html @@ -0,0 +1,2183 @@ + + + + + + + + + + + + + + + + + + Variable config overwrite - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$config_overwrite {#variable.config.overwrite}

+

If set to TRUE, the default then variables read in from config +files will overwrite each other. Otherwise, the +variables will be pushed onto an array. This is helpful if you want to +store arrays of data in config files, just list each element multiple +times.

+

This examples uses {cycle} to output a +table with alternating red/green/blue row colors with +$config_overwrite = FALSE.

+

The config file.

+
# row colors
+rowColors = #FF0000
+rowColors = #00FF00
+rowColors = #0000FF
+
+

The template with a {section} loop.

+
<table>
+  {section name=r loop=$rows}
+  <tr bgcolor="{cycle values=#rowColors#}">
+    <td> ....etc.... </td>
+  </tr>
+  {/section}
+</table>
+
+

See also {config_load}, +getConfigVars(), +clearConfig(), configLoad() +and the config files section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-config-read-hidden/index.html b/5.0/programmers/api-variables/variable-config-read-hidden/index.html new file mode 100644 index 000000000..d90d9c8bb --- /dev/null +++ b/5.0/programmers/api-variables/variable-config-read-hidden/index.html @@ -0,0 +1,2161 @@ + + + + + + + + + + + + + + + + + + Variable config read hidden - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$config_read_hidden {#variable.config.read.hidden}

+

If set to TRUE, hidden sections ie section names beginning with a +period(.) in config files can be read from templates. +Typically you would leave this FALSE, that way you can store sensitive +data in the config files such as database parameters and not worry about +the template loading them. FALSE by default.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-debug-template/index.html b/5.0/programmers/api-variables/variable-debug-template/index.html new file mode 100644 index 000000000..945c46c85 --- /dev/null +++ b/5.0/programmers/api-variables/variable-debug-template/index.html @@ -0,0 +1,2160 @@ + + + + + + + + + + + + + + + + + + Variable debug template - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$debug_tpl {#variable.debug_template}

+

This is the name of the template file used for the debugging console. By +default, it is named debug.tpl and is located in src/debug.tpl.

+

See also $debugging and the debugging +console section.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-debugging-ctrl/index.html b/5.0/programmers/api-variables/variable-debugging-ctrl/index.html new file mode 100644 index 000000000..707aedfae --- /dev/null +++ b/5.0/programmers/api-variables/variable-debugging-ctrl/index.html @@ -0,0 +1,2171 @@ + + + + + + + + + + + + + + + + + + Variable debugging ctrl - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$debugging_ctrl {#variable.debugging.ctrl}

+

This allows alternate ways to enable debugging. NONE means no +alternate methods are allowed. URL means when the keyword +SMARTY_DEBUG is found in the QUERY_STRING, debugging is enabled for +that invocation of the script. If $debugging is +TRUE, this value is ignored.

+
<?php
+// shows debug console only on localhost ie
+// http://localhost/script.php?foo=bar&SMARTY_DEBUG
+$smarty->debugging = false; // the default
+$smarty->debugging_ctrl = ($_SERVER['SERVER_NAME'] == 'localhost') ? 'URL' : 'NONE';
+?>
+
+

See also debugging console section, +$debugging and +$smarty_debug_id.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-debugging/index.html b/5.0/programmers/api-variables/variable-debugging/index.html new file mode 100644 index 000000000..73c073e44 --- /dev/null +++ b/5.0/programmers/api-variables/variable-debugging/index.html @@ -0,0 +1,2168 @@ + + + + + + + + + + + + + + + + + + Variable debugging - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ +
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-default-config-handler-func/index.html b/5.0/programmers/api-variables/variable-default-config-handler-func/index.html new file mode 100644 index 000000000..eb70453c1 --- /dev/null +++ b/5.0/programmers/api-variables/variable-default-config-handler-func/index.html @@ -0,0 +1,2200 @@ + + + + + + + + + + + + + + + + + + Variable default config handler func - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$default_config_handler_func {#variable.default.config.handler.func}

+

This function is called when a config file cannot be obtained from its +resource.

+
+

Note

+

The default handler is currently only invoked for file resources. It +is not triggered when the resource itself cannot be found, in which +case a \Smarty\Exception is thrown.

+
+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty();
+$smarty->default_config_handler_func = 'my_default_config_handler_func';
+
+/**
+ * Default Config Handler
+ *
+ * called when Smarty's file: resource is unable to load a requested file
+ * 
+ * @param string   $type     resource type (e.g. "file", "string", "eval", "resource")
+ * @param string   $name     resource name (e.g. "foo/bar.tpl")
+ * @param string  &$content  config's content
+ * @param integer &$modified config's modification time
+ * @param Smarty   $smarty   Smarty instance
+ * @return string|boolean   path to file or boolean true if $content and $modified 
+ *                          have been filled, boolean false if no default config 
+ *                          could be loaded
+ */
+function my_default_config_handler_func($type, $name, &$content, &$modified, Smarty $smarty) {
+    if (false) {
+        // return corrected filepath
+        return "/tmp/some/foobar.tpl";
+    } elseif (false) {
+        // return a config directly
+        $content = 'someVar = "the config source"';
+        $modified = time();
+        return true;
+    } else {
+        // tell smarty that we failed
+        return false;
+    }
+}
+
+?>
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-default-config-type/index.html b/5.0/programmers/api-variables/variable-default-config-type/index.html new file mode 100644 index 000000000..2088d96e4 --- /dev/null +++ b/5.0/programmers/api-variables/variable-default-config-type/index.html @@ -0,0 +1,2160 @@ + + + + + + + + + + + + + + + + + + Variable default config type - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$default_config_type {#variable.default.config.type}

+

This tells smarty what resource type to use for config files. The +default value is file, meaning that $smarty->configLoad('test.conf') +and $smarty->configLoad('file:test.conf') are identical in meaning. +See the resource chapter for more details.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-default-modifiers/index.html b/5.0/programmers/api-variables/variable-default-modifiers/index.html new file mode 100644 index 000000000..a64603ae2 --- /dev/null +++ b/5.0/programmers/api-variables/variable-default-modifiers/index.html @@ -0,0 +1,2161 @@ + + + + + + + + + + + + + + + + + + Variable default modifiers - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$default_modifiers {#variable.default.modifiers}

+

This is an array of modifiers to implicitly apply to every variable in a +template. For example, to HTML-escape every variable by default, use +array('escape:"htmlall"'). To make a variable exempt from default +modifiers, add the \'nofilter\' attribute to the output tag such as +{$var nofilter}.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-default-resource-type/index.html b/5.0/programmers/api-variables/variable-default-resource-type/index.html new file mode 100644 index 000000000..7cf73d90d --- /dev/null +++ b/5.0/programmers/api-variables/variable-default-resource-type/index.html @@ -0,0 +1,2160 @@ + + + + + + + + + + + + + + + + + + Variable default resource type - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$default_resource_type {#variable.default.resource.type}

+

This tells smarty what resource type to use implicitly. The default +value is file, meaning that $smarty->display('index.tpl') and +$smarty->display('file:index.tpl') are identical in meaning. See the +resource chapter for more details.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-default-template-handler-func/index.html b/5.0/programmers/api-variables/variable-default-template-handler-func/index.html new file mode 100644 index 000000000..cd0f3fac5 --- /dev/null +++ b/5.0/programmers/api-variables/variable-default-template-handler-func/index.html @@ -0,0 +1,2200 @@ + + + + + + + + + + + + + + + + + + Variable default template handler func - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$default_template_handler_func {#variable.default.template.handler.func}

+

This function is called when a template cannot be obtained from its +resource.

+
+

Note

+

The default handler is currently only invoked for file resources. It +is not triggered when the resource itself cannot be found, in which +case a \Smarty\Exception is thrown.

+
+
<?php
+use Smarty\Smarty;
+$smarty = new Smarty();
+$smarty->default_template_handler_func = 'my_default_template_handler_func';
+
+/**
+ * Default Template Handler
+ *
+ * called when Smarty's file: resource is unable to load a requested file
+ * 
+ * @param string   $type     resource type (e.g. "file", "string", "eval", "resource")
+ * @param string   $name     resource name (e.g. "foo/bar.tpl")
+ * @param string  &$content  template's content
+ * @param integer &$modified template's modification time
+ * @param Smarty   $smarty   Smarty instance
+ * @return string|boolean   path to file or boolean true if $content and $modified 
+ *                          have been filled, boolean false if no default template 
+ *                          could be loaded
+ */
+function my_default_template_handler_func($type, $name, &$content, &$modified, Smarty $smarty) {
+    if (false) {
+        // return corrected filepath
+        return "/tmp/some/foobar.tpl";
+    } elseif (false) {
+        // return a template directly
+        $content = "the template source";
+        $modified = time();
+        return true;
+    } else {
+        // tell smarty that we failed
+        return false;
+    }
+}
+
+?>
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-error-reporting/index.html b/5.0/programmers/api-variables/variable-error-reporting/index.html new file mode 100644 index 000000000..a4559b623 --- /dev/null +++ b/5.0/programmers/api-variables/variable-error-reporting/index.html @@ -0,0 +1,2168 @@ + + + + + + + + + + + + + + + + + + Variable error reporting - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$error_reporting {#variable.error.reporting}

+

When this value is set to a non-null-value it\'s value is used as php\'s +error_reporting level inside of +display() and fetch().

+

Smarty 3.1.2 introduced the +muteExpectedErrors() function. Calling +\Smarty\Smarty::muteExpectedErrors(); after setting up custom error handling +will ensure that warnings and notices (deliberately) produced by Smarty +will not be passed to other custom error handlers. If your error logs +are filling up with warnings regarding filemtime() or unlink() +calls, please enable Smarty\'s error muting.

+

See also debugging and +troubleshooting.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-escape-html/index.html b/5.0/programmers/api-variables/variable-escape-html/index.html new file mode 100644 index 000000000..7720a5694 --- /dev/null +++ b/5.0/programmers/api-variables/variable-escape-html/index.html @@ -0,0 +1,2172 @@ + + + + + + + + + + + + + + + + + + Variable escape html - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$escape_html {#variable.escape.html}

+

Setting $escape_html to TRUE will escape all template variable output +by wrapping it in +htmlspecialchars({$output}, ENT_QUOTES, $char_set);, +which is the same as {$variable|escape:"html"}.

+

Template designers can choose to selectively disable this feature by +adding the nofilter flag: {$variable nofilter}.

+

Modifiers and Filters are run in the following order: modifier, +default_modifier, \$escape_html, registered variable filters, +autoloaded variable filters, template instance\'s variable filters. +Everything except the individual modifier can be disabled with the +nofilter flag.

+
+

Note

+

This is a compile time option. If you change the setting you must make +sure that the templates get recompiled.

+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-force-cache/index.html b/5.0/programmers/api-variables/variable-force-cache/index.html new file mode 100644 index 000000000..14961c495 --- /dev/null +++ b/5.0/programmers/api-variables/variable-force-cache/index.html @@ -0,0 +1,2159 @@ + + + + + + + + + + + + + + + + + + Variable force cache - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$force_cache {#variable.force.cache}

+

This forces Smarty to (re)cache templates on every invocation. It does +not override the $caching level, but merely +pretends the template has never been cached before.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-force-compile/index.html b/5.0/programmers/api-variables/variable-force-compile/index.html new file mode 100644 index 000000000..773fec2b9 --- /dev/null +++ b/5.0/programmers/api-variables/variable-force-compile/index.html @@ -0,0 +1,2162 @@ + + + + + + + + + + + + + + + + + + Variable force compile - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$force_compile {#variable.force.compile}

+

This forces Smarty to (re)compile templates on every invocation. This +setting overrides $compile_check. By +default this is FALSE. This is handy for development and +debugging. It should never be used in a +production environment. If $caching is enabled, +the cache file(s) will be regenerated every time.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-left-delimiter/index.html b/5.0/programmers/api-variables/variable-left-delimiter/index.html new file mode 100644 index 000000000..a6aff8fce --- /dev/null +++ b/5.0/programmers/api-variables/variable-left-delimiter/index.html @@ -0,0 +1,2160 @@ + + + + + + + + + + + + + + + + + + Variable left delimiter - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$left_delimiter {#variable.left.delimiter}

+

This is the left delimiter used by the template language. Default is +{.

+

See also $right_delimiter and escaping +smarty parsing .

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-locking-timeout/index.html b/5.0/programmers/api-variables/variable-locking-timeout/index.html new file mode 100644 index 000000000..d6c93de12 --- /dev/null +++ b/5.0/programmers/api-variables/variable-locking-timeout/index.html @@ -0,0 +1,2159 @@ + + + + + + + + + + + + + + + + + + Variable locking timeout - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$locking_timeout {#variable.locking.timeout}

+

This is maximum time in seconds a cache lock is valid to avoid dead +locks. The default value is 10 seconds.

+

See also $cache_locking

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-merge-compiled-includes/index.html b/5.0/programmers/api-variables/variable-merge-compiled-includes/index.html new file mode 100644 index 000000000..0273c6d8e --- /dev/null +++ b/5.0/programmers/api-variables/variable-merge-compiled-includes/index.html @@ -0,0 +1,2175 @@ + + + + + + + + + + + + + + + + + + Variable merge compiled includes - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$merge_compiled_includes {#variable.merge.compiled.includes}

+

By setting $merge_compiled_includes to TRUE Smarty will merge the +compiled template code of subtemplates into the compiled code of the +main template. This increases rendering speed of templates using a many +different sub-templates.

+

Individual sub-templates can be merged by setting the inline option +flag within the {include} tag. $merge_compiled_includes does not +have to be enabled for the inline merge.

+

::: {.informalexample}

+
<?php
+$smarty->merge_compiled_includes = true;
+?>
+
+

:::

+
+

Note

+

This is a compile time option. If you change the setting you must make +sure that the templates get recompiled.

+
+

See also {include} tag

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-right-delimiter/index.html b/5.0/programmers/api-variables/variable-right-delimiter/index.html new file mode 100644 index 000000000..7f4e5d4ec --- /dev/null +++ b/5.0/programmers/api-variables/variable-right-delimiter/index.html @@ -0,0 +1,2160 @@ + + + + + + + + + + + + + + + + + + Variable right delimiter - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$right_delimiter {#variable.right.delimiter}

+

This is the right delimiter used by the template language. Default is +}.

+

See also $left_delimiter and escaping +smarty parsing.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-smarty-debug-id/index.html b/5.0/programmers/api-variables/variable-smarty-debug-id/index.html new file mode 100644 index 000000000..8f51b2035 --- /dev/null +++ b/5.0/programmers/api-variables/variable-smarty-debug-id/index.html @@ -0,0 +1,2161 @@ + + + + + + + + + + + + + + + + + + Variable smarty debug id - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$smarty_debug_id {#variable.smarty.debug.id}

+

The value of $smarty_debug_id defines the URL keyword to enable +debugging at browser level. The default value is SMARTY_DEBUG.

+

See also debugging console section, +$debugging and +$debugging_ctrl.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-template-dir/index.html b/5.0/programmers/api-variables/variable-template-dir/index.html new file mode 100644 index 000000000..62257a08e --- /dev/null +++ b/5.0/programmers/api-variables/variable-template-dir/index.html @@ -0,0 +1,2177 @@ + + + + + + + + + + + + + + + + + + Variable template dir - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$template_dir {#variable.template.dir}

+

This is the name of the default template directory. If you do not supply +a resource type when including files, they will be found here. By +default this is ./templates, meaning that Smarty will look for the +templates/ directory in the same directory as the executing php +script. \$template_dir can also be an array of directory paths: Smarty +will traverse the directories and stop on the first matching template +found.

+
+

Note

+

It is not recommended to put this directory under the web server +document root.

+

Note +As of Smarty 3.1 the attribute \$template_dir is no longer accessible +directly. Use getTemplateDir(), +setTemplateDir() and +addTemplateDir() instead.

+
+

See also Template Resources, +getTemplateDir(), +setTemplateDir() and +addTemplateDir().

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-use-include-path/index.html b/5.0/programmers/api-variables/variable-use-include-path/index.html new file mode 100644 index 000000000..1b5043bcf --- /dev/null +++ b/5.0/programmers/api-variables/variable-use-include-path/index.html @@ -0,0 +1,2149 @@ + + + + + + + + + + + + + + + + + + Variable use include path - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/programmers/api-variables/variable-use-sub-dirs/index.html b/5.0/programmers/api-variables/variable-use-sub-dirs/index.html new file mode 100644 index 000000000..01f761f84 --- /dev/null +++ b/5.0/programmers/api-variables/variable-use-sub-dirs/index.html @@ -0,0 +1,2188 @@ + + + + + + + + + + + + + + + + + + Variable use sub dirs - Smarty Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

\$use_sub_dirs {#variable.use.sub.dirs}

+

Smarty will create subdirectories under the compiled +templates and cache +directories if $use_sub_dirs is set to TRUE, default is FALSE. In an +environment where there are potentially tens of thousands of files +created, this may help the filesystem speed. On the other hand, some +environments do not allow PHP processes to create directories, so this +must be disabled which is the default.

+

Sub directories are more efficient, so use them if you can. +Theoretically you get much better performance on a filesystem with 10 +directories each having 100 files, than with 1 directory having 1000 +files. This was certainly the case with Solaris 7 (UFS)... with newer +filesystems such as ext3 and especially reiserfs, the difference is +almost nothing.

+
+

Note

+
    +
  • +

    $use_sub_dirs=true doesn\'t work with + safe_mode=On, that\'s why + it\'s switchable and why it\'s off by default.

    +
  • +
  • +

    $use_sub_dirs=true on Windows can cause problems.

    +
  • +
  • +

    Safe_mode is being deprecated in PHP6.

    +
  • +
+

See also $compile_id, +$cache_dir, and +$compile_dir.

+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/5.0/search/search_index.json b/5.0/search/search_index.json new file mode 100644 index 000000000..f609bc20f --- /dev/null +++ b/5.0/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Smarty Documentation","text":"

Smarty is a template engine for PHP, facilitating the separation of presentation (HTML/CSS) from application logic.

It allows you to write templates, using variables, modifiers, functions and comments, like this:

<h1>{$title|escape}</h1>\n<p>\n    The number of pixels is: {math equation=\"x * y\" x=$height y=$width}.\n</p>\n

When this template is rendered, with the value \"Hello world\" for the variable $title, 640 for $width, and 480 for $height, the result is:

<h1>Hello world</h1>\n<p>\n    The number of pixels is: 307200.\n</p>\n

"},{"location":"#getting-started","title":"Getting Started","text":"
  • Getting Started
  • Philosophy - or \"Why do I need a template engine?\"
  • Features - or \"Why do I want Smarty?\"
"},{"location":"#help","title":"Help","text":"
  • Some random tips & tricks
  • Troubleshooting
"},{"location":"features/","title":"Features","text":"

Some of Smarty's features: - It is extremely fast. - It is efficient since the PHP parser does the dirty work. - No template parsing overhead, only compiles once. - It is smart about recompiling only the template files that have changed. - You can easily create your own custom functions and variable modifiers, so the template language is extremely extensible. - Configurable template {delimiter} tag syntax, so you can use {$foo}, {{$foo}}, <!--{$foo}-->, etc. - The {if}..{elseif}..{else}..{/if} constructs are passed to the PHP parser, so the {if...} expression syntax can be as simple or as complex an evaluation as you like. - Allows unlimited nesting of sections, if's etc. - Built-in caching support - Arbitrary template sources - Template Inheritance for easy management of template content. - Plugin architecture

"},{"location":"features/#separation-of-presentation-from-application-code","title":"Separation of presentation from application code","text":"
  • This means templates can certainly contain logic under the condition that it is for presentation only. Things such as including other templates, alternating table row colors, upper-casing a variable, looping over an array of data and rendering it are examples of presentation logic.
  • This does not mean however that Smarty forces a separation of business and presentation logic. Smarty has no knowledge of which is which, so placing business logic in the template is your own doing.
  • Also, if you desire no logic in your templates you certainly can do so by boiling the content down to text and variables only.
"},{"location":"features/#how-does-it-work","title":"How does it work?","text":"

Under the hood, Smarty \"compiles\" (basically copies and converts) the templates into PHP scripts. This happens once when each template is first invoked, and then the compiled versions are used from that point forward. Smarty takes care of this for you, so the template designer just edits the Smarty templates and never has to manage the compiled versions. This approach keeps the templates easy to maintain, and yet keeps execution times extremely fast since the compiled code is just PHP. And of course, all PHP scripts take advantage of PHP op-code caches such as APC.

"},{"location":"features/#template-inheritance","title":"Template Inheritance","text":"

Template inheritance was introduced in Smarty 3. Before template inheritance, we managed our templates in pieces such as header and footer templates. This organization lends itself to many problems that require some hoop-jumping, such as managing content within the header/footer on a per-page basis. With template inheritance, instead of including other templates we maintain our templates as single pages. We can then manipulate blocks of content within by inheriting them. This makes templates intuitive, efficient and easy to manage. See Template Inheritance for more info.

"},{"location":"features/#why-not-use-xmlxslt-syntax","title":"Why not use XML/XSLT syntax?","text":"

There are a couple of good reasons. First, Smarty can be used for more than just XML/HTML based templates, such as generating emails, javascript, CSV, and PDF documents. Second, XML/XSLT syntax is even more verbose and fragile than PHP code! It is perfect for computers, but horrible for humans. Smarty is about being easy to read, understand and maintain.

"},{"location":"features/#template-security","title":"Template Security","text":"

Although Smarty insulates you from PHP, you still have the option to use it in certain ways if you wish. Template security forces the restriction of PHP (and select Smarty functions.) This is useful if you have third parties editing templates, and you don't want to unleash the full power of PHP or Smarty to them.

"},{"location":"features/#integration","title":"Integration","text":"

Sometimes Smarty gets compared to Model-View-Controller (MVC) frameworks. Smarty is not an MVC, it is just the presentation layer, much like the View (V) part of an MVC. As a matter of fact, Smarty can easily be integrated as the view layer of an MVC. Many of the more popular ones have integration instructions for Smarty, or you may find some help here in the forums and documentation.

"},{"location":"features/#other-template-engines","title":"Other Template Engines","text":"

Smarty is not the only engine following the \"Separate Programming Code from Presentation\" philosophy. For instance, Python has template engines built around the same principles such as Django Templates and CheetahTemplate. Note: Languages such as Python do not mix with HTML natively, which give them the advantage of proper programming code separation from the outset. There are libraries available to mix Python with HTML, but they are typically avoided.

"},{"location":"features/#what-smarty-is-not","title":"What Smarty is Not","text":"

Smarty is not an application development framework. Smarty is not an MVC. Smarty is not an alternative to Laravel, Symfony, CodeIgniter, or any of the other application development frameworks for PHP.

Smarty is a template engine, and works as the (V)iew component of your application. Smarty can easily be coupled to any of the engines listed above as the view component. No different than any other software, Smarty has a learning curve. Smarty does not guarantee good application design or proper separation of presentation, this still needs to be addressed by a competent developer and web designer.

"},{"location":"features/#is-smarty-right-for-me","title":"Is Smarty Right for Me?","text":"

Smarty is not meant to be a tool for every job. The important thing is to identify if Smarty fits your needs. There are some important questions to ask yourself:

"},{"location":"features/#template-syntax","title":"Template Syntax","text":"

Are you content with PHP tags mixed with HTML? Are your web designers comfortable with PHP? Would your web designers prefer a tag-based syntax designed for presentation? Some experience working with both Smarty and PHP helps answer these questions.

"},{"location":"features/#the-business-case","title":"The Business Case","text":"

Is there a requirement to insulate the templates from PHP? Do you have untrusted parties editing templates that you do not wish to unleash the power of PHP to? Do you need to programmatically control what is and is not available within the templates? Smarty supplies these capabilities by design.

"},{"location":"features/#feature-set","title":"Feature set","text":"

Does Smarty's features such as caching, template inheritance and plugin architecture save development cycles writing code that would be needed otherwise? Does the codebase or framework you plan on using have the features you need for the presentation component?

"},{"location":"features/#sites-using-smarty","title":"Sites using Smarty","text":"

Many well-known PHP projects make use of Smarty such as XOOPS CMS, CMS Made Simple, Tiki CMS/Groupware and X-Cart to name a few.

"},{"location":"features/#summary","title":"Summary","text":"

Whether you are using Smarty for a small website or massive enterprise solution, it can accommodate your needs. There are numerous features that make Smarty a great choice:

  • separation of PHP from HTML/CSS just makes sense
  • readability for organization and management
  • security for 3rd party template access
  • feature completeness, and easily extendable to your own needs
  • massive user base, Smarty is here to stay
  • LGPL license for commercial use
  • 100% free to use, open source project
"},{"location":"getting-started/","title":"Getting started","text":""},{"location":"getting-started/#requirements","title":"Requirements","text":"

Smarty can be run with PHP 7.2 to PHP 8.2.

"},{"location":"getting-started/#installation","title":"Installation","text":"

Smarty can be installed with Composer.

To get the latest stable version of Smarty use:

composer require smarty/smarty\n

To get the latest, unreleased version, use:

composer require smarty/smarty:dev-master\n

To get the previous stable version of Smarty, Smarty 3, use:

composer require smarty/smarty:^3\n

Here's how you create an instance of Smarty in your PHP scripts:

<?php\nrequire 'vendor/autoload.php';\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n

Now that the library files are in place, it's time to set up the Smarty directories for your application.

Smarty requires four directories which are by default named templates, configs, templates_c and cache relative to the current working directory.

The defaults can be changed as follows:

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->setTemplateDir('/some/template/dir');\n$smarty->setConfigDir('/some/config/dir');\n$smarty->setCompileDir('/some/compile/dir');\n$smarty->setCacheDir('/some/cache/dir');\n

The compile dir and cache dir need to be writable for the user running the PHP script.

Note

This is usually user \"nobody\" and group \"nobody\". For OS X users, the default is user \"www\" and group \"www\". If you are using Apache, you can look in your httpd.conf file to see what user and group are being used.

chown nobody:nobody /web/www.example.com/guestbook/templates_c/\nchmod 770 /web/www.example.com/guestbook/templates_c/\n\nchown nobody:nobody /web/www.example.com/guestbook/cache/\nchmod 770 /web/www.example.com/guestbook/cache/\n

You can verify if your system has the correct access rights for these directories with testInstall():

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->setTemplateDir('/some/template/dir');\n$smarty->setConfigDir('/some/config/dir');\n$smarty->setCompileDir('/some/compile/dir');\n$smarty->setCacheDir('/some/cache/dir');\n$smarty->testInstall();\n

Now, let's create the index.tpl file that Smarty will display. This needs to be located in the $template_dir.

{* Smarty *}\nHello {$name}, welcome to Smarty!\n

Note

{* Smarty *} is a template comment. It is not required, but it is good practice to start all your template files with this comment. It makes the file easy to recognize regardless of the file extension. For example, text editors could recognize the file and turn on special syntax highlighting.

Now lets edit our php file. We'll create an instance of Smarty, assign() a template variable and display() the index.tpl file.

<?php\nrequire 'vendor/autoload.php';\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->setTemplateDir('/web/www.example.com/guestbook/templates/');\n$smarty->setCompileDir('/web/www.example.com/guestbook/templates_c/');\n$smarty->setConfigDir('/web/www.example.com/guestbook/configs/');\n$smarty->setCacheDir('/web/www.example.com/guestbook/cache/');\n$smarty->assign('name', 'Ned');\n$smarty->display('index.tpl');\n

Note

In our example, we are setting absolute paths to all the Smarty directories. If /web/www.example.com/guestbook/ is within your PHP include_path, then these settings are not necessary. However, it is more efficient and (from experience) less error-prone to set them to absolute paths. This ensures that Smarty is getting files from the directories you intended.

Now, run your PHP file. You should see \"Hello Ned, welcome to Smarty!\"

You have completed the basic setup for Smarty!

"},{"location":"getting-started/#extended-setup","title":"Extended Setup","text":"

This is a continuation of the basic installation, please read that first!

A slightly more flexible way to set up Smarty is to extend the Smarty class and initialize your Smarty environment. So instead of repeatedly setting directory paths, assigning the same vars, etc., we can do that in one place.

<?php\nuse Smarty\\Smarty;\nclass My_GuestBook extends Smarty {\npublic function __construct()\n{\nparent::__construct();\n$this->setTemplateDir('/web/www.example.com/guestbook/templates/');\n$this->setCompileDir('/web/www.example.com/guestbook/templates_c/');\n$this->setConfigDir('/web/www.example.com/guestbook/configs/');\n$this->setCacheDir('/web/www.example.com/guestbook/cache/');\n$this->caching = Smarty::CACHING_LIFETIME_CURRENT;\n$this->assign('app_name', 'Guest Book');\n}\n}\n

Now, we can use My_GuestBook instead of Smarty in our scripts:

<?php\n$smarty = new Smarty_GuestBook();\n$smarty->assign('name', 'Ned');\n$smarty->display('index.tpl');\n

"},{"location":"philosophy/","title":"Philosophy","text":""},{"location":"philosophy/#what-is-smarty","title":"What is Smarty?","text":"

Smarty is a template engine for PHP. More specifically, it facilitates a manageable way to separate application logic and content from its presentation. This is best described in a situation where the application programmer and the template designer play different roles, or in most cases are not the same person.

For example, let's say you are creating a web page that is displaying a newspaper article.

  • The article $headline, $tagline, $author and $body are content elements, they contain no information about how they will be presented. They are passed into Smarty by the application.

  • Then the template designer edits the templates and uses a combination of HTML tags and template tags to format the presentation of these variables with elements such as tables, div\\'s, background colors, font sizes, style sheets, svg etc.

  • One day the programmer needs to change the way the article content is retrieved, ie a change in application logic. This change does not affect the template designer, the content will still arrive in the template exactly the same.

  • Likewise, if the template designer wants to completely redesign the templates, this would require no change to the application logic.

  • Therefore, the programmer can make changes to the application logic without the need to restructure templates, and the template designer can make changes to templates without breaking application logic.

"},{"location":"philosophy/#goals","title":"Goals","text":"

The Smarty design was largely driven by these goals: - clean separation of presentation from application code - PHP backend, Smarty template frontend - complement PHP, not replace it - fast development/deployment for programmers and designers - quick and easy to maintain - syntax easy to understand, no PHP knowledge necessary - flexibility for custom development - security: insulation from PHP - free, open source

"},{"location":"philosophy/#two-camps-of-thought","title":"Two camps of thought","text":"

When it comes to templating in PHP, there are basically two camps of thought. The first camp exclaims that \\\"PHP is a template engine\\\". This approach simply mixes PHP code with HTML. Although this approach is fastest from a pure script-execution point of view, many would argue that the PHP syntax is messy and complicated when mixed with tagged markup such as HTML.

The second camp exclaims that presentation should be void of all programming code, and instead use simple tags to indicate where application content is revealed. This approach is common with other template engines (even in other programming languages), and is also the approach that Smarty takes. The idea is to keep the templates focused squarely on presentation, void of application code, and with as little overhead as possible.

"},{"location":"philosophy/#why-is-separating-php-from-templates-important","title":"Why is separating PHP from templates important?","text":"

Two major benefits:

  • SYNTAX: Templates typically consist of semantic markup such as HTML. PHP syntax works well for application code, but quickly degenerates when mixed with HTML. Smarty\\'s simple {tag} syntax is designed specifically to express presentation. Smarty focuses your templates on presentation and less on \\\"code\\\". This lends to quicker template deployment and easier maintenance. Smarty syntax requires no working knowledge of PHP, and is intuitive for programmers and non-programmers alike.

  • INSULATION: When PHP is mixed with templates, there are no restrictions on what type of logic can be injected into a template. Smarty insulates the templates from PHP, creating a controlled separation of presentation from business logic. Smarty also has security features that can further enforce restrictions on templates.

"},{"location":"philosophy/#web-designers-and-php","title":"Web designers and PHP","text":"

A common question: \"Web designers have to learn a syntax anyway, why not PHP?\" Of course web designers can learn PHP, and they may already be familiar with it. The issue isn't their ability to learn PHP, it is about the consequences of mixing PHP with HTML. If designers use PHP, it is too easy to add code into templates that doesn't belong there (you just handed them a swiss-army knife when they just needed a knife.) You can teach them the rules of application design, but this is probably something they don't really need to learn (now they are developers!) The PHP manual is also an overwhelming pile of information to sift through. It is like handing the owner of a car the factory assembly manual when all they need is the owners manual. Smarty gives web designers exactly the tools they need, and gives developers fine-grained control over those tools. The simplicity of the tag-based syntax is also a huge welcome for designers, it helps them streamline the organization and management of templates.

"},{"location":"api/basics/","title":"Basics","text":""},{"location":"api/basics/#installation","title":"Installation","text":"

For installation instructies, please see the getting started section.

"},{"location":"api/basics/#rendering-a-template","title":"Rendering a template","text":"

Here's how you create an instance of Smarty in your PHP scripts:

<?php\nrequire 'vendor/autoload.php';\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n

You now have a Smarty object that you can use to render templates.

<?php\nrequire 'vendor/autoload.php';\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->display('string:The current smarty version is: {$smarty.version}.');\n// or \necho $smarty->fetch('string:The current smarty version is: {$smarty.version}.');\n
"},{"location":"api/basics/#using-file-based-templates","title":"Using file-based templates","text":"

You probably want to manage your templates as files. Create a subdirectory called 'templates' and then configure Smarty to use that:

<?php\nrequire 'vendor/autoload.php';\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->setTemplateDir(__DIR__ . '/templates');\n

Say you have a template file called 'version.tpl', stored in the 'templates' directory like this:

<h1>Hi</h1>\nThe current smarty version is: {$smarty.version|escape}.\n

You can now render this, using:

<?php\nrequire 'vendor/autoload.php';\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->setTemplateDir(__DIR__ . '/templates');\n$smarty->display('version.tpl');\n

"},{"location":"api/basics/#assigning-variables","title":"Assigning variables","text":"

Templates start to become really useful once you add variables to the mix.

Create a template called 'footer.tpl' in the 'templates' directory like this:

<small>Copyright {$companyName|escape}</small>\n

Now assign a value to the 'companyName' variable and render your template like this:

<?php\nrequire 'vendor/autoload.php';\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->setTemplateDir(__DIR__ . '/templates');\n$smarty->assign('companyName', 'AC & ME Corp.');\n$smarty->display('footer.tpl');\n

Run this, and you will see:

<small>Copyright AC &amp; ME Corp.</small>\n

Note how the escape modifier translated the & character into the proper HTML syntax &amp;.

"},{"location":"api/configuring/","title":"Configuring Smarty","text":""},{"location":"api/configuring/#setting-the-template-path","title":"Setting the template path","text":"

By default, Smarty looks for templates to render in ./templates.

You can change this, or even use multiple paths to use when looking for templates.

If you need to change this, you can use setTemplateDir() or addTemplateDir(). Use getTemplateDir() to retrieve the configured paths.

<?php\n// set a single directory where the config files are stored\n$smarty->setTemplateDir('./config');\n// set multiple directories where config files are stored\n$smarty->setTemplateDir(['./config', './config_2', './config_3']);\n// add directory where config files are stored to the current list of dirs\n$smarty->addTemplateDir('./config_1');\n// add multiple directories to the current list of dirs\n$smarty->addTemplateDir([\n'./config_2',\n'./config_3',\n]);\n// chaining of method calls\n$smarty->setTemplateDir('./config')\n->addTemplateDir('./config_1')\n->addTemplateDir('./config_2');\n// get all directories where config files are stored\n$template_dirs = $smarty->getTemplateDir();\nvar_dump($template_dirs); // array\n// get directory identified by key\n$template_dir = $smarty->getTemplateDir(0);\nvar_dump($template_dir); // string\n
"},{"location":"api/configuring/#setting-the-path-for-compiled-templates","title":"Setting the path for compiled templates","text":"

Smarty compiles templates to native PHP to be as fast as possible. The default path where these PHP-files are stored is ./templates_c.

If you need to change this, you can use setCompileDir(). Use getCompileDir() to retrieve the configured path.

<?php\n// set another path to store compiled templates\n$smarty->setCompileDir('/data/compiled_templates');\n// get directory where compiled templates are stored\n$compileDir = $smarty->getCompileDir();\n
"},{"location":"api/configuring/#setting-the-config-path","title":"Setting the config path","text":"

Smarty can load data from config files. By default, Smarty loads the config files from ./configs.

You can change this, or even use multiple paths to use when looking for config files.

If you need to change this, you can use setConfigDir() or addConfigDir(). Use getConfigDir() to retrieve the configured paths.

<?php\n// set a single directory where the config files are stored\n$smarty->setConfigDir('./config');\n// set multiple directories where config files are stored\n$smarty->setConfigDir(['./config', './config_2', './config_3']);\n// add directory where config files are stored to the current list of dirs\n$smarty->addConfigDir('./config_1');\n// add multiple directories to the current list of dirs\n$smarty->addConfigDir([\n'./config_2',\n'./config_3',\n]);\n// chaining of method calls\n$smarty->setConfigDir('./config')\n->addConfigDir('./config_1', 'one')\n->addConfigDir('./config_2', 'two');\n// get all directories where config files are stored\n$config_dirs = $smarty->getConfigDir();\nvar_dump($config_dirs); // array\n// get directory identified by key\n$config_dir = $smarty->getConfigDir(0);\nvar_dump($config_dir); // string\n
"},{"location":"api/configuring/#setting-the-path-for-caches","title":"Setting the path for caches","text":"

Even though Smarty runs templates as native PHP for maximum speed, it still needs to execute the PHP code on each call. If your data doesn't change all that often, you may be able to speed up your application even more by using output caching.

Output caching can be a tricky subject, so we devoted an entire section to caching. Be sure to read that if you want to use caching.

By default, Smarty stores caches to PHP-files in a subdirectory named ./cache.

If you need to change this, you can use setCacheDir(). Use getCacheDir() to retrieve the configured path.

<?php\n// set another path to store caches\n$smarty->setCacheDir('/data/caches');\n// get directory where cached templates are stored\n$cacheDir = $smarty->getCacheDir();\n
"},{"location":"api/configuring/#disabling-compile-check","title":"Disabling compile check","text":"

By default, Smarty tests to see if the current template has changed since the last time it was compiled. If it has changed, it recompiles that template.

Once an application is put into production, this compile-check step is usually no longer needed and the extra checks can significantly hurt performance. Be sure to disable compile checking on production for maximum performance.

<?php\n$smarty->setCompileCheck(\\Smarty\\Smarty::COMPILECHECK_OFF);\n

If caching is enabled and compile-check is enabled, then the cache files will get regenerated if an involved template file or config file was updated.

"},{"location":"api/configuring/#charset-encoding","title":"Charset encoding","text":"

There are a variety of encodings for textual data, ISO-8859-1 (Latin1) and UTF-8 being the most popular. Unless you change \\Smarty\\Smarty::$_CHARSET, Smarty recognizes UTF-8 as the internal charset.

Note

ISO-8859-1 has been PHP\\'s default internal charset since the beginning. Unicode has been evolving since 1991. Since then, it has become the one charset to conquer them all, as it is capable of encoding most of the known characters even across different character systems (latin, cyrillic, japanese, ...). UTF-8 is unicode\\'s most used encoding, as it allows referencing the thousands of character with the smallest size overhead possible.

Since unicode and UTF-8 are very widespread nowadays, their use is strongly encouraged.

Note

Smarty\\'s internals and core plugins are truly UTF-8 compatible since Smarty 3.1.

<?php\n// use japanese character encoding\nmb_internal_charset('EUC-JP');\n\\Smarty\\Smarty::$_CHARSET = 'EUC-JP';\n$smarty = new \\Smarty\\Smarty();\n
"},{"location":"api/inheritance/","title":"Template Inheritance","text":"

Inheritance allows you to define base templates that can be extended by child templates. Extending means that the child template can override all or some of the named block areas in the base template.

When you render the child template, the result will as if you rendered the base template, with only the block(s) that you have overridden in the child templates differing.

  • The inheritance tree can be as deep as you want, meaning you can extend a file that extends another one that extends another one and so on.

  • The child templates can not define any content besides what's inside {block} tags they override. Anything outside of {block} tags will be removed.

  • Template inheritance is a compile time process which creates a single compiled template file. Compared to corresponding solutions based on subtemplates included with the {include} tag it does have much better performance when rendering.

"},{"location":"api/inheritance/#basic-inheritance","title":"Basic inheritance","text":"

First, create a base template with one or more blocks. Then, create a child template. The child template must have an {extends} tag on its first line.

The child template can redefine one or more blocks defined in the base template.

See below for a simple example.

layout.tpl (base)

<html>\n    <head>\n      <title>{block name=title}Default Page Title{/block}</title>\n{block name=head}{/block}\n    </head>\n    <body>\n{block name=body}{/block}\n    </body>\n</html>\n

myproject.tpl (child)

{extends file='layout.tpl'}\n{block name=head}\n  <link href=\"/css/mypage.css\" rel=\"stylesheet\" type=\"text/css\"/>\n  <script src=\"/js/mypage.js\"></script>\n{/block}\n

mypage.tpl (grandchild)

{extends file='myproject.tpl'}\n{block name=title}My Page Title{/block}\n{block name=head}\n  <link href=\"/css/mypage.css\" rel=\"stylesheet\" type=\"text/css\"/>\n  <script src=\"/js/mypage.js\"></script>\n{/block}\n{block name=body}My HTML Page Body goes here{/block}\n

To render the above, you would use:

<?php\n$smarty->display('mypage.tpl');\n

The resulting output is:

<html>\n<head>\n<title>My Page Title</title>\n<link href=\"/css/mypage.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script src=\"/js/mypage.js\"></script>\n</head>\n<body>\n     My HTML Page Body goes here\n    </body>\n</html>\n

Note

When compile-check is enabled, all files in the inheritance tree are checked for modifications upon each invocation. You may want to disable compile-check on production servers for this reason.

Note

If you have a subtemplate which is included with {include} and it contains {block} areas it works only if the {include} itself is called from within a surrounding {block}. In the final parent template you may need a dummy {block} for it.

"},{"location":"api/inheritance/#using-append-and-prepend","title":"Using append and prepend","text":"

The content of {block} tags from child and parent templates can be merged by the append or prepend {block} tag option flags and {$smarty.block.parent} or {$smarty.block.child} placeholders.

"},{"location":"api/inheritance/#extends-resource-type","title":"Extends resource type","text":"

Instead of using {extends} tags in the template files you can define the inheritance tree in your PHP script by using the extends: resource type.

The code below will return same result as the example above.

<?php\n$smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl'); \n
"},{"location":"api/rendering/","title":"Rendering templates","text":""},{"location":"api/rendering/#fetching-or-rendering-templates-directly","title":"Fetching or rendering templates directly","text":"

As explained in basics, you can use $smarty->fetch() or $smarty->display() to render a template directly.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->display('homepage.tpl');\n// or\n$output = $smarty->fetch('homepage.tpl');\n

When you use display(), Smarty renders the template to the standard output stream. fetch() returns the output instead of echoing it.

The example above uses simple filenames to load the template. Smarty also supports loading templates from resources.

"},{"location":"api/rendering/#creating-a-template-object","title":"Creating a template object","text":"

You can also create a template object which later can be prepared first, and rendered later. This can be useful, for example if you plan to re-use several templates.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n// create template object with its private variable scope\n$tpl = $smarty->createTemplate('index.tpl');\n// assign a variable (available only to this template)\n$tpl->assign('title', 'My Homepage!');\n// display the template\n$tpl->display();\n

More on assigning variables in using data in templates.

"},{"location":"api/rendering/#testing-if-a-template-exists","title":"Testing if a template exists","text":"

You can use templateExists() to check whether a template exists before you attempt to use it.

It accepts either a path to the template on the filesystem or a resource string specifying the template.

This example uses $_GET['page'] to {include} a content template. If the template does not exist then an error page is displayed instead. First, the page_container.tpl

<html>\n    <head>\n        <title>{$title|escape}</title>\n    </head>\n    <body>\n{* include middle content page *}\n{include file=$content_template}\n    </body>\n</html>\n

And the php script:

<?php\n// set the filename eg index.inc.tpl\n$mid_template = $_GET['page'].'.inc.tpl';\nif (!$smarty->templateExists($mid_template)){\n$mid_template = 'page_not_found.tpl';\n}\n$smarty->assign('content_template', $mid_template);\n$smarty->display('page_container.tpl');\n
"},{"location":"api/resources/","title":"Template resources","text":""},{"location":"api/resources/#the-filesystem-resource","title":"The filesystem resource","text":"

So far in our examples, we have used simple filenames or paths when loading a template.

For example, to load a template file called homepage.tpl, from the filesystem, you could write:

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->display('homepage.tpl');\n

The filesystem is the default resource. Templates, however, may come from a variety of sources. When you render a template, or when you include a template from within another template, you supply a resource type, followed by : and the appropriate path and template name.

If a resource is not explicitly given, the default resource type is assumed. The resource type for the filesystem is file, which means that the previous example can be rewritten as follows:

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->display('file:homepage.tpl');\n

The file resource pulls templates source files from the directories specified using Smarty::setTemplateDir() (see Configuring Smarty).

setTemplateDir accepts a single path, but can also ben called with an array of paths. In that case, the list of directories is traversed in the order they appear in the array. The first template found is the one to process.

"},{"location":"api/resources/#templates-from-a-specific-directory","title":"Templates from a specific directory","text":"

Smarty 3.1 introduced the bracket-syntax for specifying an element from Smarty::setTemplateDir(). This allows websites employing multiple sets of templates better control over which template to access.

The bracket-syntax can be used as follows:

<?php\n// setup template directories\n$smarty->setTemplateDir([\n'./templates',            // element: 0, index: 0\n'./templates_2',          // element: 1, index: 1\n'10' => 'templates_10',   // element: 2, index: '10'\n'foo' => 'templates_foo', // element: 3, index: 'foo'\n]);\n/*\n  assume the template structure\n  ./templates/foo.tpl\n  ./templates_2/foo.tpl\n  ./templates_2/bar.tpl\n  ./templates_10/foo.tpl\n  ./templates_10/bar.tpl\n  ./templates_foo/foo.tpl\n*/\n// regular access\n$smarty->display('file:foo.tpl'); \n// will load ./templates/foo.tpl\n// using numeric index\n$smarty->display('file:[1]foo.tpl'); \n// will load ./templates_2/foo.tpl\n// using numeric string index\n$smarty->display('file:[10]foo.tpl'); \n// will load ./templates_10/foo.tpl\n// using string index\n$smarty->display('file:[foo]foo.tpl'); \n// will load ./templates_foo/foo.tpl\n// using \"unknown\" numeric index (using element number)\n$smarty->display('file:[2]foo.tpl'); \n// will load ./templates_10/foo.tpl\n

And, from within a Smarty template:

{include file=\"file:foo.tpl\"}\n{* will load ./templates/foo.tpl *}\n{include file=\"file:[1]foo.tpl\"}\n{* will load ./templates_2/foo.tpl *}\n{include file=\"file:[foo]foo.tpl\"}\n{* will load ./templates_foo/foo.tpl *}\n
"},{"location":"api/resources/#using-absolute-paths","title":"Using absolute paths","text":"

Templates outside the specified template directories require the file: template resource type, followed by the absolute path to the template (with leading slash).

<?php\n$smarty->display('file:/export/templates/index.tpl');\n$smarty->display('file:/path/to/my/templates/menu.tpl');\n````\nAnd from within a Smarty template:\n```smarty\n{include file='file:/usr/local/share/templates/navigation.tpl'}\n

Note

With Security enabled, access to templates outside of the specified templates directories is not allowed unless you whitelist those directories.

"},{"location":"api/resources/#windows-file-paths","title":"Windows file paths","text":"

If you are running on Windows, file paths usually include a drive letter (such as C:) at the beginning of the pathname. Be sure to use file: in the path to avoid namespace conflicts and get the desired results.

<?php\n$smarty->display('file:C:/export/templates/index.tpl');\n$smarty->display('file:F:/path/to/my/templates/menu.tpl');\n

And from within Smarty template:

{include file='file:D:/usr/local/share/templates/navigation.tpl'}\n

"},{"location":"api/resources/#handling-missing-templates","title":"Handling missing templates","text":"

If the file resource cannot find the requested template, it will check if there is a default template handler to call. By default, there is none, and Smarty will return an error, but you can register a default template handler calling Smarty::registerDefaultTemplateHandler with any callable.

<?php\n$smarty->registerDefaultTemplateHandler([$this, 'handleMissingTemplate']);\n// ...\npublic function handleMissingTemplate($type, $name, &$content, &$modified, Smarty $smarty) {\nif (/* ... */) {\n// return corrected filepath\nreturn \"/tmp/some/foobar.tpl\";\n} elseif (/* ... */) {\n// return a template directly\n$content = \"the template source\";\n$modified = time();\nreturn true;\n} else {\n// tell smarty that we failed\nreturn false;\n}\n}\n
"},{"location":"api/resources/#the-string-and-eval-resources","title":"The string and eval resources","text":"

Smarty can render templates from a string by using the string: or eval: resource.

  • The string: resource behaves much the same as a template file. The template source is compiled from a string and stores the compiled template code for later reuse. Each unique template string will create a new compiled template file. If your template strings are accessed frequently, this is a good choice. If you have frequently changing template strings (or strings with low reuse value), the eval: resource may be a better choice, as it doesn\\'t save compiled templates to disk.

  • The eval: resource evaluates the template source every time a page is rendered. This is a good choice for strings with low reuse value. If the same string is accessed frequently, the string: resource may be a better choice.

Note

With a string: resource type, each unique string generates a compiled file. Smarty cannot detect a string that has changed, and therefore will generate a new compiled file for each unique string. It is important to choose the correct resource so that you do not fill your disk space with wasted compiled strings.

<?php\n$smarty->assign('foo', 'value');\n$template_string = 'display {$foo} here';\n$smarty->display('string:' . $template_string); // compiles for later reuse\n$smarty->display('eval:' . $template_string); // compiles every time\n
From within a Smarty template:
{include file=\"string:$template_string\"} {* compiles for later reuse *}\n{include file=\"eval:$template_string\"} {* compiles every time *}\n

Both string: and eval: resources may be encoded with urlencode() or base64_encode(). This is not necessary for the usual use of string: and eval:, but is required when using either of them in conjunction with the extends resource.

 <?php\n$smarty->assign('foo','value');\n$template_string_urlencode = urlencode('display {$foo} here');\n$template_string_base64 = base64_encode('display {$foo} here');\n$smarty->display('eval:urlencode:' . $template_string_urlencode); // will decode string using urldecode()\n$smarty->display('eval:base64:' . $template_string_base64); // will decode string using base64_decode()\n

From within a Smarty template:

 {include file=\"string:urlencode:$template_string_urlencode\"} {* will decode string using urldecode() *}\n{include file=\"eval:base64:$template_string_base64\"} {* will decode string using base64_decode() *}\n

"},{"location":"api/resources/#the-extends-resource","title":"The extends resource","text":"

The extends: resource is used to define child/parent relationships. For details see section of Template inheritance.

Note

Using the extends resource is usually not necessary. If you have a choice, it is normally more flexible and intuitive to handle inheritance chains from within the templates using the {extends} tag.

When string: and eval: templates are used, make sure they are properly url or base64 encoded.

The templates within an inheritance chain are not compiled separately. Only a single compiled template will be generated. (If an eval: resource is found within an inheritance chain, its \"don't save a compile file\" property is superseded by the extends: resource.)

Example:

<?php\n$smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl'); \n// inheritance from multiple template sources\n$smarty->display('extends:db:parent.tpl|file:child.tpl|grandchild.tpl|eval:{block name=\"fooBazVar_\"}hello world{/block}'); \n

"},{"location":"api/resources/#the-stream-resource","title":"The stream resource","text":"

Smarty allow you to use PHP streams as a template resource. Smarty will first look for a registered template resource. If nothing is found, it will check if a PHP stream is available. If a stream is available, Smarty will use it to fetch the template.

For example,

<?php\nstream_wrapper_register('myresource', MyResourceStream::class);\n$smarty->display('myresource:bar.tpl');\n

Or, from within a template:

 {include file=\"myresource:bar.tpl\"}\n

"},{"location":"api/resources/#adding-your-own-resource-type","title":"Adding your own resource type","text":"

You can create a class that extends Smarty\\Resource\\CustomPlugin to add your own resource type, for example to load template from a database.

For example:

<?php\nclass HelloWorldResource extends Smarty\\Resource\\CustomPlugin {\nprotected function fetch($name, &$source, &$mtime) {\n$source = '{$x=\"hello world\"}{$x}'; // load your template here based on $name\n$mtime = time();\n}\n}\n// ..\n$smarty->registerResource('helloworld', new HelloWorldResource());\n

If a Resource's templates should not be run through the Smarty compiler, the Custom Resource may extend \\Smarty\\Resource\\UncompiledPlugin. The Resource Handler must then implement the function renderUncompiled(\\Smarty\\Template $_template). $_template is a reference to the current template and contains all assigned variables which the implementor can access via $_template->getSmarty()->getTemplateVars(). These Resources simply echo their rendered content to the output stream. The rendered output will be output-cached if the Smarty instance was configured accordingly. See src/Resource/PhpPlugin.php for an example.

If the Resource's compiled templates should not be cached on disk, the Custom Resource may extend \\Smarty\\Resource\\RecompiledPlugin. These Resources are compiled every time they are accessed. This may be an expensive overhead. See src/Resource/StringEval.php for an example.

"},{"location":"api/resources/#changing-the-default-resource-type","title":"Changing the default resource type","text":"

The default resource type is file. If you want to change it, use Smarty::setDefaultResourceType.

The following example will change the default resource type to mysql:

<?php\n$smarty->setDefaultResourceType('mysql');\n

"},{"location":"api/security/","title":"Security","text":"

Security is good for situations when you have untrusted parties editing the templates, and you want to reduce the risk of system security compromises through the template language.

The settings of the security policy are defined by overriding public properties of an instance of the \\Smarty\\Security class. These are the possible settings:

  • $secure_dir is an array of template directories that are considered secure. A directory configured using $smarty->setTemplateDir() is considered secure implicitly. The default is an empty array.
  • $trusted_uri is an array of regular expressions matching URIs that are considered trusted. This security directive is used by {fetch} and {html_image}. URIs passed to these functions are reduced to {$PROTOCOL}://{$HOSTNAME} to allow simple regular expressions (without having to deal with edge cases like authentication-tokens).

The expression '#https?://.*smarty.net$#i' would allow accessing the following URIs:

-   `http://smarty.net/foo`\n-   `http://smarty.net/foo`\n-   `http://www.smarty.net/foo`\n-   `http://smarty.net/foo`\n-   `https://foo.bar.www.smarty.net/foo/bla?blubb=1`\n

but deny access to these URIs:

-   `http://smarty.com/foo` (not matching top-level domain \\\"com\\\")\n-   `ftp://www.smarty.net/foo` (not matching protocol \\\"ftp\\\")\n-   `http://www.smarty.net.otherdomain.com/foo` (not matching end of\n    domain \\\"smarty.net\\\")\n
  • $static_classes is an array of classes that are considered trusted. The default is an empty array which allows access to all static classes. To disable access to all static classes set $static_classes = null.

  • $streams is an array of streams that are considered trusted and can be used from within template. To disable access to all streams set $streams = null. An empty array ( $streams = [] ) will allow all streams. The default is array('file').

  • $allowed_modifiers is an array of (registered / autoloaded) modifiers that should be accessible to the template. If this array is non-empty, only the herein listed modifiers may be used. This is a whitelist.

  • $disabled_modifiers is an array of (registered / autoloaded) modifiers that may not be accessible to the template.

  • $allowed_tags is a boolean flag which controls if constants can function-, block and filter plugins that should be accessible to the template. If this array is non-empty, only the herein listed modifiers may be used. This is a whitelist.

  • $disabled_tags is an array of (registered / autoloaded) function-, block and filter plugins that may not be accessible to the template.

  • $allow_constants is a boolean flag which controls if constants can be accessed by the template. The default is \"true\".

  • $allow_super_globals is a boolean flag which controls if the PHP super globals can be accessed by the template. The default is \"true\".

If security is enabled, no private methods, functions or properties of static classes or assigned objects can be accessed (beginning with '_') by the template.

To customize the security policy settings you can extend the \\Smarty\\Security class or create an instance of it.

<?php\nuse Smarty\\Smarty;\nclass My_Security_Policy extends \\Smarty\\Security {\npublic $allow_constants = false;\n}\n$smarty = new Smarty();\n$smarty->enableSecurity('My_Security_Policy');\n
<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$my_security_policy = new \\Smarty\\Security($smarty);\n$my_security_policy->allow_constants = false;\n$smarty->enableSecurity($my_security_policy);\n
<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n// enable default security\n$smarty->enableSecurity();\n

Note

Most security policy settings are only checked when the template gets compiled. For that reason you should delete all cached and compiled template files when you change your security settings.

"},{"location":"api/caching/basics/","title":"Caching","text":"

Caching is used to speed up the rendering of a template by saving and re-using the output.

If a cached version of the call is available, that is displayed instead of regenerating the output. Caching can speed things up tremendously, especially templates with longer computation times.

Since templates can include or extend other templates, one cache file could conceivably be made up of several template files, config files, etc.

Note

Since templates are dynamic, it is important to be careful what you are caching and for how long. For instance, if you are displaying the front page of your website that does not change its content very often, it might work well to cache this page for an hour or more. On the other hand, if you are displaying a page with a timetable containing new information by the minute, it would not make sense to cache this page.

"},{"location":"api/caching/basics/#setting-up-caching","title":"Setting Up Caching","text":"

The first thing to do is enable caching by calling Smarty::setCaching() with either \\Smarty\\Smarty::CACHING_LIFETIME_CURRENT or \\Smarty\\Smarty::CACHING_LIFETIME_SAVED. Or with \\Smarty\\Smarty::CACHING_OFF to disable caching again.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n// enable caching, using the current lifetime (see below)\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);\n// enable caching, using the lifetime set when the cache was saved (see below)\n$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);\n// disable caching\n$smarty->setCaching(Smarty::CACHING_OFF);\n$smarty->display('index.tpl');\n

With caching enabled, the function call to $smarty->display('index.tpl') will render the template as usual, but also saves a copy of its output. On the next call to $smarty->display('index.tpl'), the cached copy will be used instead of rendering the template again.

Note

By default, Smarty saved its caches as files in a dir called cache relative to the current directory. The default directory can be changed using $smarty->setCacheDir('/some/cache/dir'); The files are named similar to the template name. Although they end in the .php extension, they are not intended to be directly executable. Do not edit these files!

"},{"location":"api/caching/basics/#cache-lifetime","title":"Cache lifetime","text":"

Each cached page has a limited lifetime. The default value is 3600 seconds, or one hour. After that time expires, the cache is regenerated.

You can change the lifetime as follows:

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); \n// or $smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);\n// set the cache_lifetime to 5 minutes\n$smarty->setCacheLifetime(5 * 60);\n

Setting caching to a value of \\Smarty\\Smarty::CACHING_LIFETIME_CURRENT tells Smarty to use the current lifetime to determine if the cache has expired.

A value of \\Smarty\\Smarty::CACHING\\_LIFETIME\\_SAVED tells Smarty to use the lifetime value at the time the cache was generated. This way you can set the just before rendering a template to have granular control over when that particular cache expires.

An example:

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n// retain current cache lifetime for each specific display call\n$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);\n// set the cache_lifetime for index.tpl to 5 minutes\n$smarty->setCacheLifetime(300);\n$smarty->display('index.tpl');\n// set the cache_lifetime for home.tpl to 1 hour\n$smarty->setCacheLifetime(3600);\n$smarty->display('home.tpl');\n// NOTE: the following $cache_lifetime setting will not work when $caching\n// is set to Smarty::CACHING_LIFETIME_SAVED.\n// The cache lifetime for home.tpl has already been set\n// to 1 hour, and will no longer respect the value of $cache_lifetime.\n// The home.tpl cache will still expire after 1 hour.\n$smarty->setCacheLifetime(30); // 30 seconds\n$smarty->display('home.tpl');\n

"},{"location":"api/caching/basics/#compile-check","title":"Compile check","text":"

By default, every template file and config file that is involved with the cache file is checked for modification. If any of the files have been modified since the cache was generated, the cache is immediately regenerated.

This is a computational overhead, so for optimum performance, disable this on a production environment:

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);\n$smarty->setCompileCheck(Smarty::COMPILECHECK_OFF);\n$smarty->display('index.tpl');\n
"},{"location":"api/caching/basics/#checking-if-a-template-is-cached","title":"Checking if a template is cached","text":"

Smarty's `isCached() method can be used to test if a template has a valid cache or not. If you have a cached template that requires something like a database fetch, you can use this to skip that process.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);\nif (!$smarty->isCached('index.tpl')) {\n// No cache available, do variable assignments here.\n$smarty->assign('data', do_expensive_database_calls());\n}\n$smarty->display('index.tpl');\n
"},{"location":"api/caching/basics/#nocache-blocks","title":"Nocache-blocks","text":"

You can keep parts of a page dynamic (disable caching) with the {nocache}{/nocache} block function, or by using the nocache parameter for most template functions.

Let's say the whole page can be cached except for a banner that is displayed down the side of the page. By using a {nocache}{/nocache} block for the banner, you can keep this element dynamic within the cached content.

"},{"location":"api/caching/basics/#clearing-the-cache","title":"Clearing the cache","text":"

You can clear all the cache files with Smarty's clearAllCache() method, or individual cache files with the clearCache() method.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);\n// clear only cache for index.tpl\n$smarty->clearCache('index.tpl');\n// clear out all cache files\n$smarty->clearAllCache();\n// clear out all cache files older than one hour\n$smarty->clearAllCache(3600);\n// or, clear all expired caches\n$smarty->clearAllCache(Smarty::CLEAR_EXPIRED);\n
"},{"location":"api/caching/custom-storage-layers/","title":"Custom cache storage layers","text":"

As an alternative to using the default file-based caching mechanism, you can specify a custom cache implementation that will be used to read, write and clear cached files.

With a custom cache implementation you could replace the slow filesystem by a faster storage engine, centralize the cache to be accessible to multiple servers.

Smarty requires implementations to extend \\Smarty\\Cacheresource\\Base, but encourages you to either extend \\Smarty\\Cacheresource\\Custom or \\Smarty\\Cacheresource\\KeyValueStore.

  • \\Smarty\\Cacheresource\\Custom is a simple API directing all read, write, clear calls to your implementation. This API allows you to store wherever and however you deem fit.
  • \\Smarty\\Cacheresource\\KeyValueStore allows you to turn any KeyValue-Store (like APC or Memcache) into a full-featured CacheResource implementation. Everything around deep cache-groups like \"a|b|c\" is being handled for you in a way that guarantees clearing the cache-group \"a\" will clear all nested groups as well - even though KeyValue-Stores don't allow this kind of hierarchy by nature.

Custom CacheResources must be registered on runtime with Smarty\\Smarty::setCacheResource():

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->setCacheResource(new My_CacheResource_Mysql());\n
"},{"location":"api/caching/multiple-caches-per-template/","title":"Multiple caches per template","text":""},{"location":"api/caching/multiple-caches-per-template/#introduction","title":"Introduction","text":"

You can have multiple cache files for a single call to display() or fetch().

Let's say that a call to $smarty->display('index.tpl') may have several different output contents depending on some condition, and you want separate caches for each one. You can do this by passing a $cache_id as the second parameter to the function call:

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);\n$my_cache_id = (int) $_GET['article_id'];\n$smarty->display('index.tpl', $my_cache_id);\n

Above, we are passing the variable $my_cache_id to display() as the $cache_id. For each unique value of $my_cache_id, a separate cache will be generated for index.tpl. In this example, article_id was passed in the URL and is used as the $cache_id.

Note

Be very cautious when passing values from a client (web browser) into Smarty or any PHP application. Although the above example of using the article_id from the URL looks handy, it could have bad consequences. The $cache_id is used to create a directory on the file system, so if the user decided to write a script that sends random article_id's at a rapid pace, this could possibly cause problems at the server level. Be sure to sanitize any data passed in before using it. In this example, you might want to check if the article_id is a valid ID in the database.

Be sure to pass the same $cache_id as the second parameter to isCached() and clearCache().

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);\n$my_cache_id = (int) $_GET['article_id'];\nif (!$smarty->isCached('index.tpl', $my_cache_id)) {\n// ...\n}\n$smarty->display('index.tpl', $my_cache_id);\n
"},{"location":"api/caching/multiple-caches-per-template/#clearing-specific-caches","title":"Clearing specific caches","text":"

You can clear all caches for a particular $cache_id by passing NULL as the first parameter to clearCache().

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);\n// clear all caches with \"sports\" as the $cache_id\n$smarty->clearCache(null, 'sports');\n$smarty->display('index.tpl', 'sports');\n

In this manner, you can \"group\" your caches together by giving them the same $cache_id.

"},{"location":"api/caching/multiple-caches-per-template/#advanced-cache-grouping","title":"Advanced cache grouping","text":"

You can do more elaborate grouping by setting up $cache_id groups. This is accomplished by separating each sub-group with a vertical bar | in the $cache_id value. You can have as many sub-groups as you like.

  • You can think of cache groups like a directory hierarchy. For instance, a cache group of 'a|b|c' could be thought of as the directory structure '/a/b/c/'.

  • clearCache(null, 'a|b|c') would be like removing the files '/a/b/c/*'. clearCache(null, 'a|b') would be like removing the files '/a/b/*'.

  • If you specify a template name such as clearCache('foo.tpl', 'a|b|c') then Smarty will attempt to remove '/a/b/c/foo.tpl'.

  • You CANNOT remove a specified template name under multiple cache groups such as '/a/b/*/foo.tpl', the cache grouping works left-to-right ONLY. You will need to group your templates under a single cache group hierarchy to be able to clear them as a group.

Cache grouping should not be confused with your template directory hierarchy, the cache grouping has no knowledge of how your templates are structured. So for example, if you have a template structure like themes/blue/index.tpl and you want to be able to clear all the cache files for the \"blue\" theme, you will need to create a cache group structure that mimics your template file structure, such as display('themes/blue/index.tpl', 'themes|blue'), then clear them with clearCache(null, 'themes|blue').

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);\n// clear all caches with 'sports|basketball' as the first two cache_id groups\n$smarty->clearCache(null, 'sports|basketball');\n// clear all caches with \"sports\" as the first cache_id group. This would\n// include \"sports|basketball\", or \"sports|(anything)|(anything)|(anything)|...\"\n$smarty->clearCache(null, 'sports');\n// clear the foo.tpl cache file with \"sports|basketball\" as the cache_id\n$smarty->clearCache('foo.tpl', 'sports|basketball');\n$smarty->display('index.tpl', 'sports|basketball');\n
"},{"location":"api/extending/block-tags/","title":"Custom block tags","text":"

Block tags are tags of the form: {func} .. {/func}. In other words, they enclose a template block and operate on the contents of this block.

Block functions take precedence over normal tags of the same name, that is, you cannot have both custom tag {func} and block tag {func}..{/func}.

  • By default, your function implementation is called twice by Smarty: once for the opening tag, and once for the closing tag. (See $repeat below on how to change this.)

  • Only the opening tag of the block has attributes. All attributes are contained in the $params variable as an associative array. The opening tag attributes are also accessible to your function when processing the closing tag.

  • The value of the $content variable depends on whether your function is called for the opening or closing tag. In case of the opening tag, it will be NULL, and in case of the closing tag it will be the contents of the template block. Note that the template block will have already been processed by Smarty, so all you will receive is the template output, not the template source.

  • The parameter $repeat is passed by reference to the function implementation and provides a possibility for it to control how many times the block is displayed. By default $repeat is TRUE at the first call of the block function (the opening tag) and FALSE on all subsequent calls to the block function (the block's closing tag). Each time the function implementation returns with $repeat being TRUE, the contents between {func}...{/func} are evaluated and the function implementation is called again with the new block contents in the parameter $content.

Example:

<?php\nfunction smarty_block_translate($params, $content, \\Smarty\\Template $template, &$repeat) {\n// only output on the closing tag\nif (!$repeat){\nif (isset($content)) {\n$lang = $params['lang'];\n// do some intelligent translation thing here with $content\nreturn $translation;\n}\n}\n}\n$smarty->registerPlugin(Smarty\\Smarty::PLUGIN_BLOCK, 'translate', 'smarty_block_translate');\n

This can now be used in your templates as follows:

{translate lang='nl'}\n    Quia omnis nulla omnis iusto est id et.\n{/translate}\n
"},{"location":"api/extending/extensions/","title":"Creating an extension","text":"

In order to organize your custom tags and modifiers, you can create an Extension. In fact, most of Smarty itself is organized into two extensions:

  • the core extension, which provides the basic language tags such as {if}, {for} and {assign}.
  • the default extension, which provides all default modifiers such as |escape, |nl2br and |number_format and tags such as {html_image}, {mailto} and {textformat} that are enabled by default, but not necessarily universal.

Note

There is also the 'BCPluginsAdapter' extension, which does not add any new functionality, but wraps calls to deprecated methods such as Smarty\\Smarty::addPluginsDir() and Smarty\\Smarty::loadFilter().

In order to write your own custom extension, you must write a class that implements Smarty\\Extension\\ExtensionInterface. However, it is usually easier to extend Smarty\\Extension\\Base which provides empty implementation for each of the methods required by Smarty\\Extension\\ExtensionInterface. This allows you to only override the method(s) you need.

Example:

<?php\nuse Smarty\\Extension\\Base;\nclass MyExtension extends Base {\npublic function getModifierCompiler(string $modifier): ?\\Smarty\\Compile\\Modifier\\ModifierCompilerInterface {\nswitch ($modifier) {\ncase 'array_escape': return new MyArrayEscapeModifierCompiler();\ncase 'array_unescape': return new MyArrayUnescapeModifierCompiler();\n}\nreturn null;\n}\n}\n
Another example, that would allow you to use any valid PHP callable as a modifier in your templates:

<?php\nuse Smarty\\Extension\\Base;\nclass MyCallablePassThroughExtension extends Base {\npublic function getModifierCallback(string $modifierName) {\nif (is_callable($modifierName)) {\nreturn $modifierName;\n}\nreturn null;\n}\n}\n

Writing an extension allows you to add a group of tags, block tags and modifiers to the Smarty language. It also allows you to register pre-, post- and output-filters in a structured way. The files in src/Extension/ in the smarty/smarty dir should give you all the information you need to start writing your own extension.

"},{"location":"api/extending/introduction/","title":"Extending Smarty","text":"

By default, Smarty is already very complete and powerful. However, you can unlock its real potential by extending Smarty.

There are various ways to extend Smarty for it to suit your needs. You can create custom tags, block tags and modifiers by registering a method as a plugin.

If this becomes too messy, you can group your custom tags, modifiers, and more into an Extension.

"},{"location":"api/extending/modifiers/","title":"Custom modifiers","text":"

Modifiers are little functions that are applied to a variable in the template before it is displayed or used in some other context. Smarty comes with a bunch of modifiers, but you can easily add your own.

In order to do so, you must write a function that accepts as its first parameter the value on which the modifier is to operate. The rest of the parameters are optional, depending on what kind of operation is to be performed.

The modifier has to return the result of its processing.

For example:

<?php\nfunction smarty_modifier_substr($string, $offset, $length) {\nreturn substr($string, $offset, $length);\n}\n$smarty->registerPlugin(Smarty\\Smarty::PLUGIN_MODIFIER, 'substr', 'smarty_modifier_substr');\n

You can now use this in your templates as follows:

{$applicationName|substr:0:20}\n

"},{"location":"api/extending/tags/","title":"Custom tags","text":"

You can add your own tags to the Smarty language.

"},{"location":"api/extending/tags/#runtime-tags","title":"Runtime tags","text":"

Usually, you'll add a runtime tag. Adding a runtime tag requires you to provide a callback function that accepts two parameters:

  • $params: all attributes from the template as an associative array.
  • $template: a Smarty\\Template object representing the template where tag was used.

The output (return value) of the function will be substituted in place of the tag in the template.

If the function needs to assign some variables to the template or use some other Smarty-provided functionality, it can use the supplied $template object to do so.

<?php\nfunction smarty_tag_eightball($params, \\Smarty\\Template $template): string {\n$answers = [\n'Yes',\n'No',\n'No way',\n'Outlook not so good',\n'Ask again soon',\n'Maybe in your reality'\n];\n$result = array_rand($answers);\nreturn $answers[$result];\n}\n$smarty->registerPlugin(Smarty\\Smarty::PLUGIN_FUNCTION, 'eightball', 'smarty_tag_eightball');\n

Which can now be used in the template as:

Question: Will we ever have time travel?\nAnswer: {eightball}.\n
"},{"location":"api/extending/tags/#compiler-tags","title":"Compiler tags","text":"

Compiler tags are called only during compilation of the template.

They are useful for injecting PHP code or time-sensitive static content into the template. If there is both a compiler function and a runtime tag registered under the same name, the compiler function has precedence.

The compiler function is passed two parameters: the params array which contains precompiled strings for the attribute values and the Smarty object. It's supposed to return the code to be injected into the compiled template including the surrounding PHP tags.

Example:

<?php\nfunction smarty_compiler_tplheader($params, Smarty $smarty) {\nreturn \"<?php\\necho '\" . $smarty->_current_file . \" compiled at \" . date('Y-m-d H:M'). \"';\\n?>\";\n}\n$smarty->registerPlugin(Smarty\\Smarty::PLUGIN_COMPILER, 'tplheader', 'smarty_compiler_tplheader');\n

This function can be called from the template as:

{* this function gets executed at compile time only *}\n{tplheader}\n

The resulting PHP code in the compiled template would be something like this:

<?php\necho 'index.tpl compiled at 2023-02-20 20:02';\n
"},{"location":"api/filters/output-filters/","title":"Output filters","text":"

When a template is rendered, its output can be sent through one or more output filters.

Note This differs from prefilters and postfilters because, pre- and postfilters operate on compiled templates before they are saved to the disk, whereas output filters operate on the template output when it is executed.

Smarty will pass the template output as the first argument, and expect the function to return the result of the processing.

Output filters can be either added as part of an Extension or registered as shown below.

This will provide a rudimentary protection against spambots:

<?php\nfunction protect_email($tpl_output, \\Smarty\\Template\\ $template)\n{\nreturn preg_replace(\n'!(\\S+)@([a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',\n'$1%40$2', \n$tpl_output\n);\n}\n// register the outputfilter\n$smarty->registerFilter(\"output\", \"protect_email\");\n$smarty->display(\"index.tpl');\n

"},{"location":"api/filters/postfilters/","title":"Postfilters","text":"

Template postfilters are PHP functions that your templates are ran through after they are compiled.

Smarty will pass the compiled template code as the first argument, and expect the function to return the result of the processing, which must also be valid PHP code.

Prefilters can be either added as part of an Extension or registered as shown below.

<?php\nfunction add_header_comment($tpl_source, \\Smarty\\Template\\ $template)\n{\nreturn \"<?php echo \\\"<!-- Created by Smarty! -->\\n\\\"; ?>\\n\".$tpl_source;\n}\n// register the postfilter\n$smarty->registerFilter('post', 'add_header_comment');\n$smarty->display('index.tpl');\n

The postfilter above will make the compiled Smarty template index.tpl look like:

<!-- Created by Smarty! -->\n{* rest of template content... *}\n
"},{"location":"api/filters/prefilters/","title":"Prefilters","text":"

Template prefilters are PHP functions that your templates are ran through before they are compiled. This is good for preprocessing your templates to remove unwanted comments, keeping an eye on what people are putting in their templates, etc.

Smarty will pass the template source code as the first argument, and expect the function to return the resulting template source code.

Prefilters can be either added as part of an Extension or registered as shown below.

This will remove all the html comments in the template source:

<?php\nfunction remove_dw_comments($tpl_source, \\Smarty\\Template\\ $template)\n{\nreturn preg_replace(\"/<!--#.*-->/U\",'',$tpl_source);\n}\n// register the prefilter\n$smarty->registerFilter('pre', 'remove_dw_comments');\n$smarty->display('index.tpl');\n

"},{"location":"api/variables/assigning/","title":"Assigning variables","text":"

Templates start to become really useful once you know how to use variables.

"},{"location":"api/variables/assigning/#basic-assigning","title":"Basic assigning","text":"

Let's revisit the example from the basics section. The following script assigns a value to the 'companyName' variable and renders the template:

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->assign('companyName', 'AC & ME Corp.');\n$smarty->display('footer.tpl');\n

footer.tpl:

<small>Copyright {$companyName|escape}</small>\n

Smarty will apply the escape modifier to the value assigned to the variable companyName and replace {$companyName|escape} with the result.

<small>Copyright AC &amp; ME Corp.</small>\n

Using $smarty->assign() is the most common way of assigning data to templates, but there are several other methods.

"},{"location":"api/variables/assigning/#appending-data-to-an-existing-variable","title":"Appending data to an existing variable","text":"

Using append(), you can add data to an existing variable, usually an array.

If you append to a string value, it is converted to an array value and then appended to. You can explicitly pass name/value pairs, or associative arrays containing the name/value pairs. If you pass the optional third parameter of TRUE, the value will be merged with the current array instead of appended.

Examples:

<?php\n// This is effectively the same as assign()\n$smarty->append('foo', 'Fred');\n// After this line, foo will now be seen as an array in the template\n$smarty->append('foo', 'Albert');\n$array = [1 => 'one', 2 => 'two'];\n$smarty->append('X', $array);\n$array2 = [3 => 'three', 4 => 'four'];\n// The following line will add a second element to the X array\n$smarty->append('X', $array2);\n// passing an associative array\n$smarty->append(['city' => 'Lincoln', 'state' => 'Nebraska']);\n
"},{"location":"api/variables/assigning/#assigning-to-template-objects","title":"Assigning to template objects","text":"

When you use a template objects, as explained in rendering a template, you can assign data to the template objects directly instead of assigning it to Smarty. This way, you can use different sets of data for different templates.

For example:

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$tplBlue = $smarty->createTemplate('blue.tpl');\n$tplBlue->assign('name', 'The one');\n$tplBlue->display();\n$tplRed = $smarty->createTemplate('red.tpl');\n$tplRed->assign('name', 'Neo');\n$tplRed->display();\n

"},{"location":"api/variables/assigning/#using-data-objects","title":"Using data objects","text":"

For more complex use cases, Smarty supports the concept of data objects. Data objects are containers to hold data. Data objects can be attached to templates when creating them. This allows for fine-grained re-use of data.

For example:

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n// create a data object\n$data = $smarty->createData();\n// assign variable to the data object\n$data->assign('name', 'Neo');\n// create template object which will use variables from the data object\n$tpl = $smarty->createTemplate('index.tpl', $data);\n// display the template\n$tpl->display();\n

"},{"location":"api/variables/assigning/#clearing-assigned-data","title":"Clearing assigned data","text":"

When re-using templates, you may need to clear data assigned in a previous run. Use clearAllAssign() to clear the values of all assigned variables on data objects, template objects or the Smarty object.

Examples:

<?php\n// assigning data to the Smarty object\n$smarty->assign('Name', 'Fred');\n// ...\n$smarty->clearAllAssign();\n// using a data object\n$data = $smarty->createData();\n$data->assign('name', 'Neo');\n// ...\n$data->clearAllAssign();\n// using a template\n$tplBlue = $smarty->createTemplate('blue.tpl');\n$tplBlue->assign('name', 'The one');\n// ...\n$tplBlue->clearAllAssign();\n

Note that there it's only useful to clear assigned data if you:

  1. repeatedly re-use templates, and
  2. the variables used may change on each repetition

If your script simply runs once and then ends, or you always assign the same variables, clearing assigned data is of no use.

"},{"location":"api/variables/config-files/","title":"Loading data from config files","text":"

Instead of assigning data to templates from PHP, you can also use a config file.

"},{"location":"api/variables/config-files/#example-config-file","title":"Example config file","text":"

Config files are best suited to manage template settings from one file. One example is a multi-language application. Instead of writing multiple templates to support different languages, you can write a single template file and load your language dependent strings from config files.

Example lang.en.ini:

# global variables\npageTitle = \"Main Menu\"\n[Customer]\npageTitle = \"Customer Info\"\n[Login]\npageTitle = \"Login\"\nfocus = \"username\"\nIntro = \"\"\"This is a value that spans more\nthan one line. you must enclose\nit in triple quotes.\"\"\"\n

Values of config file variables can be in quotes, but not necessary. You can use either single or double quotes. If you have a value that spans more than one line, enclose the entire value with triple quotes (\"\"\"). You can put comments into config files by any syntax that is not a valid config file syntax. We recommend using a # (hash) at the beginning of the line.

The example config file above has two sections. Section names are enclosed in [brackets]. Section names can be arbitrary strings not containing [ or ] symbols. The variable at the top is a global variable. Global variables are always loaded from the config file. If a particular section is loaded, then the global variables and the variables from that section are also loaded. If a variable exists both as a global and in a section, the section variable is used.

"},{"location":"api/variables/config-files/#loading-a-config-file","title":"Loading a config file","text":"

Config files are loaded into templates with the built-in template function {config_load} or by calling configLoad() from PHP:

<?php\n$smarty->configLoad('lang.en.ini');\n

Load a specific section with:

<?php\n$smarty->configLoad('lang.en.ini', 'Customer');\n

Note that the global section will always be loaded.

"},{"location":"api/variables/config-files/#retrieving-config-variables-in-php","title":"Retrieving config variables in PHP","text":""},{"location":"api/variables/config-files/#loading-from-a-resource","title":"Loading from a resource","text":"

Config files (or resources) are loaded by the same resource facilities as templates. That means that a config file can also be loaded from a db. See resources for more information.

"},{"location":"api/variables/config-files/#config-overwrite","title":"Config overwrite","text":"

If you name two variables the same within a section, the last one will be used unless you call:

<?php\n$smarty->setConfigOverwrite(false);\n
When config overwrite is disabled, Smarty will create arrays of config file variables when it encounters multiple entries with the same name.

See also {config_load}, $config_overwrite, $default_config_handler_func, getConfigVars(), clearConfig() and configLoad()

"},{"location":"api/variables/objects/","title":"Objects","text":"

Smarty allows access to PHP objects through the templates.

Note

When you assign/register objects to templates, be sure that all properties and methods accessed from the template are for presentation purposes only. It is very easy to inject application logic through objects, and this leads to poor designs that are difficult to manage. See the Best Practices section of the Smarty website.

There are two ways to access them.

"},{"location":"api/variables/objects/#assign-the-object","title":"Assign the object","text":"

You can assign objects to a template and access them much like any other assigned variable.

Example:

<?php\n// the object\nclass My_Object {\npublic function meth1($params, $smarty_obj) {\nreturn 'this is my meth1';\n}\n}\n// We can also assign objects. assign_by_ref when possible.\n$smarty->assign('myobj', new My_Object());\n$smarty->display('index.tpl');\n

And here's how to access your object in index.tpl:

{$myobj->meth1('foo',$bar)}\n
"},{"location":"api/variables/objects/#register-the-object","title":"Register the object","text":"

Registerd objects use a different template syntax. Also, a registered object can be restricted to certain methods or properties. However, a registered object cannot be looped over or assigned in arrays of objects, etc.

If security is enabled, no private methods or functions can be accessed (beginning with '_'). If a method and property of the same name exist, the method will be used.

You can restrict the methods and properties that can be accessed by listing them in an array as the third registration parameter.

By default, parameters passed to objects through the templates are passed the same way custom functions get them. An associative array is passed as the first parameter, and the smarty object as the second. If you want the parameters passed one at a time for each argument like traditional object parameter passing, set the fourth registration parameter to FALSE.

The optional fifth parameter has only effect with format being TRUE and contains a list of methods that should be treated as blocks. That means these methods have a closing tag in the template ({foobar->meth2}...{/foobar->meth2}) and the parameters to the methods have the same synopsis as the parameters for block tags: They get the four parameters $params, $content, $smarty and &$repeat and they also behave like block tags.

<?php\n// the object\nclass My_Object {\nfunction meth1($params, $smarty_obj) {\nreturn 'this is my meth1';\n}\n}\n$myobj = new My_Object;\n// registering the object\n$smarty->registerObject('foobar', $myobj);\n// if we want to restrict access to certain methods or properties, list them\n$smarty->registerObject('foobar', $myobj, array('meth1','meth2','prop1'));\n// if you want to use the traditional object parameter format, pass a boolean of false\n$smarty->registerObject('foobar', $myobj, null, false);\n$smarty->display('index.tpl');\n

And here's how to access your objects in index.tpl:

{* access our registered object *}\n{foobar->meth1 p1='foo' p2=$bar}\n{* you can also assign the output *}\n{foobar->meth1 p1='foo' p2=$bar assign='output'}\nthe output was {$output}\n
"},{"location":"api/variables/static-class-methods/","title":"Static Classes","text":"

You can directly access static classes. The syntax is roughly the same as in PHP.

Note

Direct access to PHP classes is not recommended. This ties the underlying application code structure directly to the presentation, and also complicates template syntax. It is recommended to register plugins which insulate templates from PHP classes/objects. Use at your own discretion.

"},{"location":"api/variables/static-class-methods/#examples","title":"Examples","text":"

class constant BAR

{assign var=foo value=myclass::BAR}\n

method result

{assign var=foo value=myclass::method()} 

method chaining

{assign var=foo value=myclass::method1()->method2}\n

property bar of class myclass

{assign var=foo value=myclass::$bar} 

using Smarty variable bar as class name

{assign var=foo value=$bar::method}\n

"},{"location":"api/variables/streams/","title":"Streams","text":"

You can also use streams to call variables. {$foo:bar} will use the foo://bar stream to get the template variable.

Using a PHP stream for a template variable resource from within a template.

{$foo:bar}\n

See also Template Resources

"},{"location":"appendixes/tips/","title":"Tips & Tricks","text":""},{"location":"appendixes/tips/#blank-variable-handling","title":"Blank Variable Handling","text":"

There may be times when you want to print a default value for an empty variable instead of printing nothing, such as printing &nbsp; so that html table backgrounds work properly. Many would use an {if} statement to handle this, but there is a shorthand way with Smarty, using the default variable modifier.

Note

\"Undefined variable\" errors will show an E_NOTICE if not disabled in PHP's error_reporting() level or Smarty's $error_reporting property and a variable had not been assigned to Smarty.

    {* the long way *}\n{if $title eq ''}\n       &nbsp;\n{else}\n{$title}\n{/if}\n{* the short way *}\n{$title|default:'&nbsp;'}\n

See also default modifier and default variable handling.

"},{"location":"appendixes/tips/#default-variable-handling","title":"Default Variable Handling","text":"

If a variable is used frequently throughout your templates, applying the default modifier every time it is mentioned can get a bit ugly. You can remedy this by assigning the variable its default value with the {assign} function.

{* do this somewhere at the top of your template *}\n{assign var='title' value=$title|default:'no title'}\n\n{* if $title was empty, it now contains the value \"no title\" when you use it *}\n{$title}\n

See also default modifier and blank variable handling.

"},{"location":"appendixes/tips/#passing-variable-title-to-header-template","title":"Passing variable title to header template","text":"

When the majority of your templates use the same headers and footers, it is common to split those out into their own templates and {include} them. But what if the header needs to have a different title, depending on what page you are coming from? You can pass the title to the header as an attribute when it is included.

mainpage.tpl - When the main page is drawn, the title of \"Main Page\" is passed to the header.tpl, and will subsequently be used as the title.

{include file='header.tpl' title='Main Page'}\n{* template body goes here *}\n{include file='footer.tpl'}\n

archives.tpl - When the archives page is drawn, the title will be \"Archives\". Notice in the archive example, we are using a variable from the archives_page.conf file instead of a hard coded variable.

{config_load file='archive_page.conf'}\n{include file='header.tpl' title=#archivePageTitle#}\n{* template body goes here *}\n{include file='footer.tpl'}\n

header.tpl - Notice that \"Smarty News\" is printed if the $title variable is not set, using the default variable modifier.

<html>\n    <head>\n        <title>{$title|default:'Smarty News'}</title>\n    </head>\n<body>\n

footer.tpl

    </body>\n</html>\n
"},{"location":"appendixes/tips/#dates","title":"Dates","text":"

As a rule of thumb, always pass dates to Smarty as timestamps. This allows template designers to use the date_format modifier for full control over date formatting, and also makes it easy to compare dates if necessary.

{$startDate|date_format}\n

This will output:

Jan 4, 2009\n
{$startDate|date_format:\"%Y/%m/%d\"}\n

This will output:

2009/01/04\n

Dates can be compared in the template by timestamps with:

{if $order_date < $invoice_date}\n   ...do something..\n{/if}\n

When using {html_select_date} in a template, the programmer will most likely want to convert the output from the form back into timestamp format. Here is a function to help you with that.

<?php\n// this assumes your form elements are named\n// startDate_Day, startDate_Month, startDate_Year\n$startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day);\nfunction makeTimeStamp($year='', $month='', $day='')\n{\nif(empty($year)) {\n$year = strftime('%Y');\n}\nif(empty($month)) {\n$month = strftime('%m');\n}\nif(empty($day)) {\n$day = strftime('%d');\n}\nreturn mktime(0, 0, 0, $month, $day, $year);\n}\n

See also {html_select_date}, {html_select_time}, date_format and $smarty.now,

"},{"location":"appendixes/tips/#componentized-templates","title":"Componentized Templates","text":"

Traditionally, programming templates into your applications goes as follows: First, you accumulate your variables within your PHP application, (maybe with database queries.) Then, you instantiate your Smarty object, assign() the variables and display() the template. So lets say for example we have a stock ticker on our template. We would collect the stock data in our application, then assign these variables in the template and display it. Now wouldn't it be nice if you could add this stock ticker to any application by merely including the template, and not worry about fetching the data up front?

You can do this by writing a custom plugin for fetching the content and assigning it to a template variable.

function.load_ticker.php

<?php\n// setup our function for fetching stock data\nfunction fetch_ticker($symbol)\n{\n// put logic here that fetches $ticker_info\n// from some ticker resource\nreturn $ticker_info;\n}\nfunction smarty_function_load_ticker($params, $smarty)\n{\n// call the function\n$ticker_info = fetch_ticker($params['symbol']);\n// assign template variable\n$smarty->assign($params['assign'], $ticker_info);\n}\n

index.tpl

{load_ticker symbol='SMARTY' assign='ticker'}\nStock Name: {$ticker.name} Stock Price: {$ticker.price}\n

See also: {include}.

"},{"location":"appendixes/tips/#obfuscating-e-mail-addresses","title":"Obfuscating E-mail Addresses","text":"

Do you ever wonder how your email address gets on so many spam mailing lists? One way spammers collect email addresses is from web pages. To help combat this problem, you can make your email address show up in scrambled javascript in the HTML source, yet it it will look and work correctly in the browser. This is done with the {mailto} plugin.

<div id=\"contact\">Send inquiries to\n{mailto address=$EmailAddress encode='javascript' subject='Hello'}\n</div>\n

Note

This method isn\\'t 100% foolproof. A spammer could conceivably program his e-mail collector to decode these values, but not likely.... hopefully..yet ... wheres that quantum computer :-?.

See also escape modifier and {mailto}.

"},{"location":"appendixes/troubleshooting/","title":"Troubleshooting","text":""},{"location":"appendixes/troubleshooting/#smartyphp-errors","title":"Smarty/PHP errors","text":"

Smarty can catch many errors such as missing tag attributes or malformed variable names. If this happens, you will see an error similar to the following:

Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'\n       in /path/to/smarty/Smarty.class.php on line 1041\n\nFatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name\n       in /path/to/smarty/Smarty.class.php on line 1041\n

Smarty shows you the template name, the line number and the error. After that, the error consists of the actual line number in the Smarty class that the error occurred.

There are certain errors that Smarty cannot catch, such as missing close tags. These types of errors usually end up in PHP compile-time parsing errors.

Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75

When you encounter a PHP parsing error, the error line number will correspond to the compiled PHP script, NOT the template itself. Usually you can look at the template and spot the syntax error. Here are some common things to look for: missing close tags for {if}{/if} or {section}{/section}, or syntax of logic within an {if} tag. If you can\\'t find the error, you might have to open the compiled PHP file and go to the line number to figure out where the corresponding error is in the template.

Warning: Smarty error: unable to read resource: \"index.tpl\" in...\n
or
Warning: Smarty error: unable to read resource: \"site.conf\" in...\n

  • The $template_dir is incorrect, doesn't exist or the file index.tpl is not in the templates/ directory

  • A {config_load} function is within a template (or configLoad() has been called) and either $config_dir is incorrect, does not exist or site.conf is not in the directory.

Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist,\nor is not a directory...\n
  • Either the $compile_diris incorrectly set, the directory does not exist, or templates_c is a file and not a directory.
Fatal error: Smarty error: unable to write to $compile_dir '....\n
  • The $compile_dir is not writable by the web server. See the bottom of the installing smarty page for more about permissions.
Fatal error: Smarty error: the $cache_dir 'cache' does not exist,\nor is not a directory. in /..\n
  • This means that $caching is enabled and either; the $cache_dir is incorrectly set, the directory does not exist, or cache/ is a file and not a directory.
Fatal error: Smarty error: unable to write to $cache_dir '/...\n
  • This means that $caching is enabled and the $cache_dir is not writable by the web server. See the bottom of the installing smarty page for permissions.
Warning: filemtime(): stat failed for /path/to/smarty/cache/3ab50a623e65185c49bf17c63c90cc56070ea85c.one.tpl.php \nin /path/to/smarty/libs/sysplugins/smarty_resource.php\n
  • This means that your application registered a custom error handler (using set_error_handler()) which is not respecting the given $errno as it should. If, for whatever reason, this is the desired behaviour of your custom error handler, please call muteExpectedErrors() after you've registered your custom error handler.

See also debugging.

"},{"location":"designers/chapter-debugging-console/","title":"Debugging Console","text":"

There is a debugging console included with Smarty. The console informs you of all the included templates, assigned variables and config file variables for the current invocation of the template. A template file named debug.tpl is included with the distribution of Smarty which controls the formatting of the console.

Set $debugging to TRUE in Smarty, and if needed set $debug_tpl to the template resource path to debug.tpl. When you load the page, a Javascript console window will pop up and give you the names of all the included templates and assigned variables for the current page.

To see the available variables for a particular template, see the {debug} template function. To disable the debugging console, set $debugging to FALSE. You can also temporarily turn on the debugging console by putting SMARTY_DEBUG in the URL if you enable this option with $debugging_ctrl.

Note

The debugging console does not work when you use the fetch() API, only when using display(). It is a set of javascript statements added to the very bottom of the generated template. If you do not like javascript, you can edit the debug.tpl template to format the output however you like. Debug data is not cached and debug.tpl info is not included in the output of the debug console.

Note

The load times of each template and config file are in seconds, or fractions thereof.

See also troubleshooting.

"},{"location":"designers/config-files/","title":"Config Files","text":"

Config files are handy for designers to manage global template variables from one file. One example is template colors. Normally if you wanted to change the color scheme of an application, you would have to go through each and every template file and change the colors. With a config file, the colors can be kept in one place, and only one file needs to be updated.

# global variables\npageTitle = \"Main Menu\"\nbodyBgColor = #000000\ntableBgColor = #000000\nrowBgColor = #00ff00\n[Customer]\npageTitle = \"Customer Info\"\n[Login]\npageTitle = \"Login\"\nfocus = \"username\"\nIntro = \"\"\"This is a value that spans more\nthan one line. you must enclose\nit in triple quotes.\"\"\"\n# hidden section\n[.Database]\nhost=my.example.com\ndb=ADDRESSBOOK\nuser=php-user\npass=foobar\n

Values of config file variables can be in quotes, but not necessary. You can use either single or double quotes. If you have a value that spans more than one line, enclose the entire value with triple quotes (\"\"\"). You can put comments into config files by any syntax that is not a valid config file syntax. We recommend using a # (hash) at the beginning of the line.

The example config file above has two sections. Section names are enclosed in [brackets]. Section names can be arbitrary strings not containing [ or ] symbols. The four variables at the top are global variables, or variables not within a section. These variables are always loaded from the config file. If a particular section is loaded, then the global variables and the variables from that section are also loaded. If a variable exists both as a global and in a section, the section variable is used. If you name two variables the same within a section, the last one will be used unless $config_overwrite is disabled.

Config files are loaded into templates with the built-in template function {config_load} or the API configLoad() function.

You can hide variables or entire sections by prepending the variable name or section name with a period(.) eg [.hidden]. This is useful if your application reads the config files and gets sensitive data from them that the template engine does not need. If you have third parties doing template editing, you can be certain that they cannot read sensitive data from the config file by loading it into the template.

Config files (or resources) are loaded by the same resource facilities as templates. That means that a config file can also be loaded from a db $smarty->configLoad(\"db:my.conf\").

See also {config_load}, $config_overwrite, $default_config_handler_func, getConfigVars(), clearConfig() and configLoad()

"},{"location":"designers/language-combining-modifiers/","title":"Combining Modifiers","text":"

You can apply any number of modifiers to a variable. They will be applied in the order they are combined, from left to right. They must be separated with a | (pipe) character.

<?php\n$smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');\n

where template is:

{$articleTitle}\n{$articleTitle|upper|spacify}\n{$articleTitle|lower|spacify|truncate}\n{$articleTitle|lower|truncate:30|spacify}\n{$articleTitle|lower|spacify|truncate:30:\". . .\"}\n

The above example will output:

Smokers are Productive, but Death Cuts Efficiency.\nS M O K E R S   A R ....snip....  H   C U T S   E F F I C I E N C Y .\ns m o k e r s   a r ....snip....  b u t   d e a t h   c u t s...\ns m o k e r s   a r e   p r o d u c t i v e ,   b u t . . .\ns m o k e r s   a r e   p. . .\n
"},{"location":"designers/language-basic-syntax/","title":"Basic Syntax","text":"

A simple Smarty template could look like this:

<h1>{$title|escape}</h1>\n<ul>\n{foreach $cities as $city}\n        <li>{$city.name|escape} ({$city.population})</li>\n{foreachelse}\n        <li>no cities found</li>        \n{/foreach}\n</ul>\n

All Smarty template tags are enclosed within delimiters. By default these are { and }, but they can be changed.

For the examples in this manual, we will assume that you are using the default delimiters. In Smarty, all content outside of delimiters is displayed as static content, or unchanged. When Smarty encounters template tags, it attempts to interpret them, and displays the appropriate output in their place.

The basis components of the Smarty syntax are:

  • Comments
  • Variables
  • Operators
  • Functions
  • Attributes
  • Quotes
  • Escaping
"},{"location":"designers/language-basic-syntax/language-escaping/","title":"Escaping Smarty parsing","text":"

It is sometimes desirable or even necessary to have Smarty ignore sections it would otherwise parse. A classic example is embedding Javascript or CSS code in a template. The problem arises as those languages use the { and } characters which are also the default delimiters for Smarty.

Note

A good practice for avoiding escapement altogether is by separating your Javascript/CSS into their own files and use standard HTML methods to access them. This will also take advantage of browser script caching. When you need to embed Smarty variables/functions into your Javascript/CSS, then the following applies.

In Smarty templates, the { and } braces will be ignored so long as they are surrounded by white space. This behavior can be disabled by setting the Smarty class variable $auto_literal to false.

"},{"location":"designers/language-basic-syntax/language-escaping/#examples","title":"Examples","text":"
<script>\n   // the following braces are ignored by Smarty\n   // since they are surrounded by whitespace\n   function foobar {\nalert('foobar!');\n}\n   // this one will need literal escapement\n{literal}\n    function bazzy {alert('foobar!');}\n{/literal}\n</script>\n

{literal}..{/literal} blocks are used for escaping blocks of template logic. You can also escape the braces individually with {ldelim}, {rdelim} tags or {$smarty.ldelim},{$smarty.rdelim} variables.

Smarty's default delimiters { and } cleanly represent presentational content. However, if another set of delimiters suit your needs better, you can change them with Smarty's $left_delimiter and $right_delimiter values.

Note

Changing delimiters affects ALL template syntax and escapement. Be sure to clear out cache and compiled files if you decide to change them.

<?php\n$smarty->left_delimiter = '<!--{';\n$smarty->right_delimiter = '}-->';\n$smarty->assign('foo', 'bar');\n$smarty->assign('name', 'Albert');\n$smarty->display('example.tpl');\n

Where the template is:

Welcome <!--{$name}--> to Smarty\n    <script>\n  var foo = <!--{$foo}-->;\n  function dosomething() {\nalert(\"foo is \" + foo);\n}\n  dosomething();\n</script>\n
"},{"location":"designers/language-basic-syntax/language-syntax-attributes/","title":"Attributes","text":"

Most of the functions take attributes that specify or modify their behavior. Attributes to Smarty functions are much like HTML attributes. Static values don't have to be enclosed in quotes, but it is required for literal strings. Variables with or without modifiers may also be used, and should not be in quotes. You can even use PHP function results, plugin results and complex expressions.

Some attributes require boolean values (TRUE or FALSE). These can be specified as true and false. If an attribute has no value assigned it gets the default boolean value of true.

"},{"location":"designers/language-basic-syntax/language-syntax-attributes/#examples","title":"Examples","text":"
{include file=\"header.tpl\"}\n{include file=\"header.tpl\" nocache}  // is equivalent to nocache=true\n{include file=\"header.tpl\" attrib_name=\"attrib value\"}\n{include file=$includeFile}\n{include file=#includeFile# title=\"My Title\"}\n{assign var=foo value={counter}}  // plugin result\n{assign var=foo value=substr($bar,2,5)}  // PHP function result\n{assign var=foo value=$bar|strlen}  // using modifier\n{assign var=foo value=$buh+$bar|strlen}  // more complex expression\n{html_select_date display_days=true}\n{mailto address=\"smarty@example.com\"}\n<select name=\"company_id\">\n{html_options options=$companies selected=$company_id}\n</select>\n

Note

Although Smarty can handle some very complex expressions and syntax, it is a good rule of thumb to keep the template syntax minimal and focused on presentation. If you find your template syntax getting too complex, it may be a good idea to move the bits that do not deal explicitly with presentation to PHP by way of plugins or modifiers.

"},{"location":"designers/language-basic-syntax/language-syntax-comments/","title":"Comments","text":"

Template comments are surrounded by asterisks, and that is surrounded by the delimiter tags like so:

"},{"location":"designers/language-basic-syntax/language-syntax-comments/#examples","title":"Examples","text":"
{* this is a comment *}\n

Smarty comments are NOT displayed in the final output of the template, unlike <!-- HTML comments -->. These are useful for making internal notes in the templates which no one will see ;-)

{* I am a Smarty comment, I don't exist in the compiled output  *}\n<html>\n    <head>\n     <title>{$title}</title>\n    </head>\n<body>\n{* another single line smarty comment  *}\n    <!-- HTML comment that is sent to the browser -->\n{* this multiline smarty\n       comment is\n       not sent to browser\n    *}\n{*********************************************************\n    Multi line comment block with credits block\n      @ author:         bg@example.com\n      @ maintainer:     support@example.com\n      @ para:           var that sets block style\n      @ css:            the style output\n    **********************************************************}\n{* The header file with the main logo and stuff  *}\n{include file='header.tpl'}\n{* Dev note:  the $includeFile var is assigned in foo.php script  *}\n    <!-- Displays main content block -->\n{include file=$includeFile}\n{* this <select> block is redundant *}\n{*\n    <select name=\"company\">\n      {html_options options=$vals selected=$selected_id}\n    </select>\n    *}\n    <!-- Show header from affiliate is disabled -->\n{* $affiliate|upper *}\n{* you cannot nest comments *}\n{*\n    <select name=\"company\">\n      {* <option value=\"0\">-- none -- </option> *}\n{html_options options=$vals selected=$selected_id}\n    </select>\n    *}\n    </body>\n</html>\n
"},{"location":"designers/language-basic-syntax/language-syntax-functions/","title":"Functions","text":"

Every Smarty tag either prints a variable or invokes some sort of function. These are processed and displayed by enclosing the function and its attributes within delimiters like so: {funcname attr1=\"val1\" attr2=\"val2\"}.

"},{"location":"designers/language-basic-syntax/language-syntax-functions/#examples","title":"Examples","text":"
{config_load file=\"colors.conf\"}\n{include file=\"header.tpl\"}\n{if $logged_in}\n    Welcome, <span style=\"color:{#fontColor#}\">{$name}!</span>\n{else}\n    hi, {$name}\n{/if}\n{include file=\"footer.tpl\"}\n
  • Both built-in functions and custom functions have the same syntax within templates.

  • Built-in functions are the inner workings of Smarty, such as {if}, {section} and {strip}. There should be no need to change or modify them.

  • Custom functions are additional functions implemented via plugins. They can be modified to your liking, or you can create new ones. {html_options} is an example of a custom function.

See also registerPlugin()

"},{"location":"designers/language-basic-syntax/language-syntax-operators/","title":"Operators","text":""},{"location":"designers/language-basic-syntax/language-syntax-operators/#basic","title":"Basic","text":"

Various basic operators can be applied directly to variable values.

"},{"location":"designers/language-basic-syntax/language-syntax-operators/#examples","title":"Examples","text":"
{$foo + 1}\n{$foo * $bar}\n{$foo->bar - $bar[1] * $baz->foo->bar() -3 * 7}\n{if ($foo + $bar.test % $baz * 134232 + 10 + $b + 10)}\n    ...\n{/if}\n{$foo = $foo + $bar}\n

Note

Although Smarty can handle some very complex expressions and syntax, it is a good rule of thumb to keep the template syntax minimal and focused on presentation. If you find your template syntax getting too complex, it may be a good idea to move the bits that do not deal explicitly with presentation to PHP by way of plugins or modifiers.

"},{"location":"designers/language-basic-syntax/language-syntax-operators/#ternary","title":"Ternary","text":"

You can use the ?: (or ternary) operator to test one expression and present the value of the second or third expression, based on the result of the test.

In other words:

{$test ? \"OK\" : \"FAIL\"}\n
will result in OK if $test is set to true, and in FAIL otherwise.

There is also a shorthand ?: operator:

{$myVar ?: \"empty\"}\n
will result in 'empty' if $myVar is not set or set to something that evaluates to false, such as an empty string. If $myVar is set to something that evaluates to true, the value of $myVar is returned. So, the following will return 'hello':
{$myVar=\"hello\"}\n{$myVar ?: \"empty\"}\n

"},{"location":"designers/language-basic-syntax/language-syntax-operators/#testing-for-null","title":"Testing for null","text":"

If \"something that evaluates to false\" is to broad a test for you, you can use the ?? (or null coalescing) operator to trigger only if the tested value is undefined or set to null.

{$myVar ?? \"empty\"}\n
will result in 'empty' if $myVar is not set or set to null. If $myVar is set to something that evaluates to anything else, the value of $myVar is returned. So, the following will return an empty string (''):
{$myVar=\"\"}\n{$myVar ?: \"this is not shown\"}\n

"},{"location":"designers/language-basic-syntax/language-syntax-quotes/","title":"Embedding Vars in Double Quotes","text":"
  • Smarty will recognize assigned variables embedded in \"double quotes\" so long as the variable name contains only numbers, letters and under_scores. See naming for more detail.

  • With any other characters, for example a period(.) or $object->reference, then the variable must be surrounded by `backticks`.

  • In addition, Smarty does allow embedded Smarty tags in double-quoted strings. This is useful if you want to include variables with modifiers, plugin or PHP function results.

"},{"location":"designers/language-basic-syntax/language-syntax-quotes/#examples","title":"Examples","text":"
{func var=\"test $foo test\"}              // sees $foo\n{func var=\"test $foo_bar test\"}          // sees $foo_bar\n{func var=\"test `$foo[0]` test\"}         // sees $foo[0]\n{func var=\"test `$foo[bar]` test\"}       // sees $foo[bar]\n{func var=\"test $foo.bar test\"}          // sees $foo (not $foo.bar)\n{func var=\"test `$foo.bar` test\"}        // sees $foo.bar\n{func var=\"test `$foo.bar` test\"|escape} // modifiers outside quotes!\n{func var=\"test {$foo|escape} test\"}     // modifiers inside quotes!\n{func var=\"test {time()} test\"}          // PHP function result\n{func var=\"test {counter} test\"}         // plugin result\n{func var=\"variable foo is {if !$foo}not {/if} defined\"} // Smarty block function\n{* will replace $tpl_name with value *}\n{include file=\"subdir/$tpl_name.tpl\"}\n{* does NOT replace $tpl_name *}\n{include file='subdir/$tpl_name.tpl'} // vars require double quotes!\n{* must have backticks as it contains a dot \".\" *}\n{cycle values=\"one,two,`$smarty.config.myval`\"}\n{* must have backticks as it contains a dot \".\" *}\n{include file=\"`$module.contact`.tpl\"}\n{* can use variable with dot syntax *}\n{include file=\"`$module.$view`.tpl\"}\n

Note

Although Smarty can handle some very complex expressions and syntax, it is a good rule of thumb to keep the template syntax minimal and focused on presentation. If you find your template syntax getting too complex, it may be a good idea to move the bits that do not deal explicitly with presentation to PHP by way of plugins or modifiers.

See also escape.

"},{"location":"designers/language-basic-syntax/language-syntax-variables/","title":"Variables","text":"

Template variables start with the $dollar sign. They can contain numbers, letters and underscores, much like a PHP variable. You can reference arrays by index numerically or non-numerically. Also reference object properties and methods.

Config file variables are an exception to the \\$dollar syntax and are instead referenced with surrounding #hashmarks#, or via the $smarty.config variable.

"},{"location":"designers/language-basic-syntax/language-syntax-variables/#examples","title":"Examples","text":"
{$foo}        <-- displaying a simple variable (non array/object)\n{$foo[4]}     <-- display the 5th element of a zero-indexed array\n{$foo.bar}    <-- display the \"bar\" key value of an array, similar to PHP $foo['bar']\n{$foo.$bar}   <-- display variable key value of an array, similar to PHP $foo[$bar]\n{$foo->bar}   <-- display the object property \"bar\"\n{$foo->bar()} <-- display the return value of object method \"bar\"\n{#foo#}       <-- display the config file variable \"foo\"\n{$smarty.config.foo} <-- synonym for {#foo#}\n{$foo[bar]}   <-- syntax only valid in a section loop, see {section}\n{assign var=foo value='baa'}{$foo} <--  displays \"baa\", see {assign}\nMany other combinations are allowed\n{$foo.bar.baz}\n{$foo.$bar.$baz}\n{$foo[4].baz}\n{$foo[4].$baz}\n{$foo.bar.baz[4]}\n{$foo->bar($baz,2,$bar)} <-- passing parameters\n{\"foo\"}       <-- static values are allowed\n{* display the server variable \"SERVER_NAME\" ($_SERVER['SERVER_NAME'])*}\n{$smarty.server.SERVER_NAME}\nMath and embedding tags:\n{$x+$y}                             // will output the sum of x and y.\n{assign var=foo value=$x+$y}        // in attributes \n{$foo[$x+3]}                        // as array index\n{$foo={counter}+3}                  // tags within tags\n{$foo=\"this is message {counter}\"}  // tags within double quoted strings\nDefining Arrays:\n{assign var=foo value=[1,2,3]}\n{assign var=foo value=['y'=>'yellow','b'=>'blue']}\n{assign var=foo value=[1,[9,8],3]}   // can be nested\nShort variable assignment:\n{$foo=$bar+2}\n{$foo = strlen($bar)}               // function in assignment\n{$foo = myfunct( ($x+$y)*3 )}       // as function parameter \n{$foo.bar=1}                        // assign to specific array element\n{$foo.bar.baz=1}                    {$foo[]=1}                          // appending to an array\nSmarty \"dot\" syntax (note: embedded {} are used to address ambiguities):\n{$foo.a.b.c}        =>  $foo['a']['b']['c'] \n{$foo.a.$b.c}       =>  $foo['a'][$b]['c']         // with variable index\n{$foo.a.{$b+4}.c}   =>  $foo['a'][$b+4]['c']       // with expression as index\n{$foo.a.{$b.c}}     =>  $foo['a'][$b['c']]         // with nested index\nPHP-like syntax, alternative to \"dot\" syntax:\n{$foo[1]}             // normal access\n{$foo['bar']}\n{$foo['bar'][1]}\n{$foo[$x+$x]}         // index may contain any expression\n{$foo[$bar[1]]}       // nested index\n{$foo[section_name]}  // smarty {section} access, not array access!\nVariable variables:\n$foo                     // normal variable\n$foo_{$bar}              // variable name containing other variable \n$foo_{$x+$y}             // variable name containing expressions \n$foo_{$bar}_buh_{$blar}  // variable name with multiple segments\n{$foo_{$x}}              // will output the variable $foo_1 if $x has a value of 1.\nObject chaining:\n{$object->method1($x)->method2($y)}\nDirect PHP function access:\n{time()}\n

Note

Although Smarty can handle some very complex expressions and syntax, it is a good rule of thumb to keep the template syntax minimal and focused on presentation. If you find your template syntax getting too complex, it may be a good idea to move the bits that do not deal explicitly with presentation to PHP by way of plugins or modifiers.

Request variables such as $_GET, $_SESSION, etc are available via the reserved $smarty variable.

See also $smarty, config variables {assign} and assign().

"},{"location":"designers/language-builtin-functions/","title":"Built-in Functions","text":"

Smarty comes with several built-in functions. These built-in functions are the integral part of the smarty template engine. They are compiled into corresponding inline PHP code for maximum performance.

You cannot create your own custom functions with the same name; and you should not need to modify the built-in functions.

A few of these functions have an assign attribute which collects the result the function to a named template variable instead of being output; much like the {assign} function.

  • {append}
  • {assign} or {$var=...}
  • {block}
  • {call}
  • {capture}
  • {config_load}
  • {debug}
  • {extends}
  • {for}
  • {foreach}, {foreachelse}
  • {function}
  • {if}, {elseif}, {else}
  • {include}
  • {insert}
  • {ldelim}, {rdelim}
  • {literal}
  • {nocache}
  • {section}, {sectionelse}
  • {setfilter}
  • {strip}
  • {while}
"},{"location":"designers/language-builtin-functions/language-function-append/","title":"{append}","text":"

{append} is used for creating or appending template variable arrays during the execution of a template.

"},{"location":"designers/language-builtin-functions/language-function-append/#attributes","title":"Attributes","text":"Attribute Required Description var The name of the variable being assigned value The value being assigned index (optional) The index for the new array element. If not specified the value is append to the end of the array. scope (optional) The scope of the assigned variable: parent, root or global. Defaults to local if omitted."},{"location":"designers/language-builtin-functions/language-function-append/#option-flags","title":"Option Flags","text":"Name Description nocache Assigns the variable with the 'nocache' attribute

Note

Assignment of variables in-template is essentially placing application logic into the presentation that may be better handled in PHP. Use at your own discretion.

"},{"location":"designers/language-builtin-functions/language-function-append/#examples","title":"Examples","text":"
{append var='name' value='Bob' index='first'}\n{append var='name' value='Meyer' index='last'}\n// or \n{append 'name' 'Bob' index='first'} {* short-hand *}\n{append 'name' 'Meyer' index='last'} {* short-hand *}\nThe first name is {$name.first}.<br>\nThe last name is {$name.last}.\n

The above example will output:

The first name is Bob.\nThe last name is Meyer.\n

See also append() and getTemplateVars().

"},{"location":"designers/language-builtin-functions/language-function-assign/","title":"{assign}, {$var=...}","text":"

{assign} or {$var=...} is used for assigning template variables during the execution of a template.

"},{"location":"designers/language-builtin-functions/language-function-assign/#attributes-of-the-assign-syntax","title":"Attributes of the {assign} syntax","text":"Attribute Name Required Description var The name of the variable being assigned value The value being assigned scope (optional) The scope of the assigned variable: \\'parent\\',\\'root\\' or \\'global\\'"},{"location":"designers/language-builtin-functions/language-function-assign/#attributes-of-the-var-syntax","title":"Attributes of the {$var=...} syntax","text":"Attribute Name Required Description scope (optional) The scope of the assigned variable: \\'parent\\',\\'root\\' or \\'global\\'"},{"location":"designers/language-builtin-functions/language-function-assign/#option-flags","title":"Option Flags","text":"Name Description nocache Assigns the variable with the 'nocache' attribute

Note

Assignment of variables in-template is essentially placing application logic into the presentation that may be better handled in PHP. Use at your own discretion.

"},{"location":"designers/language-builtin-functions/language-function-assign/#examples","title":"Examples","text":"
{assign var=\"name\" value=\"Bob\"}  {* or *}\n{assign \"name\" \"Bob\"} {* short-hand, or *}\n{$name='Bob'}\nThe value of $name is {$name}.\n

The above example will output:

The value of $name is Bob.\n

{assign var=\"name\" value=\"Bob\" nocache}  {* or *}\n{assign \"name\" \"Bob\" nocache} {* short-hand, or *}\n{$name='Bob' nocache}\nThe value of $name is {$name}.\n
The above example will output:
The value of $name is Bob.\n

{assign var=running_total value=$running_total+$some_array[$row].some_value}  {* or *}\n{$running_total=$running_total+$some_array[row].some_value}\n

Variables assigned in the included template will be seen in the including template.

{include file=\"sub_template.tpl\"}\n{* display variable assigned in sub_template *}\n{$foo}<br>\n

The template above includes the example sub_template.tpl below:

{* foo will be known also in the including template *}\n{assign var=\"foo\" value=\"something\" scope=parent}\n{$foo=\"something\" scope=parent}\n{* bar is assigned only local in the including template *}\n{assign var=\"bar\" value=\"value\"} {* or *}\n{$var=\"value\"}\n

You can assign a variable to root of the current root tree. The variable is seen by all templates using the same root tree.

{assign var=foo value=\"bar\" scope=\"root\"}\n

A global variable is seen by all templates.

{assign var=foo value=\"bar\" scope=\"global\"} {* or *}\n{assign \"foo\" \"bar\" scope=\"global\"} {* short-hand, or *}\n{$foo=\"bar\" scope=\"global\"}\n

To access {assign} variables from a php script use getTemplateVars(). Here's the template that creates the variable $foo.

{assign var=\"foo\" value=\"Smarty\"} {* or *}\n{$foo=\"Smarty\"}\n

The template variables are only available after/during template execution as in the following script.

<?php\n// this will output nothing as the template has not been executed\necho $smarty->getTemplateVars('foo');\n// fetch the template to a variable\n$whole_page = $smarty->fetch('index.tpl');\n// this will output 'smarty' as the template has been executed\necho $smarty->getTemplateVars('foo');\n$smarty->assign('foo','Even smarter');\n// this will output 'Even smarter'\necho $smarty->getTemplateVars('foo');\n

The following functions can also optionally assign template variables: {capture}, {include}, {counter}, {cycle}, {eval}, {fetch}, {math} and {textformat}.

See also {append}, assign() and getTemplateVars().

"},{"location":"designers/language-builtin-functions/language-function-block/","title":"{block}","text":"

{block} is used to define a named area of template source for template inheritance. For details see section of Template Inheritance.

The {block} template source area of a child template will replace the corresponding areas in the parent template(s).

Optionally {block} areas of child and parent templates can be merged into each other. You can append or prepend the parent {block} content by using the append or prepend option flag with the child's {block} definition. With {$smarty.block.parent} the {block} content of the parent template can be inserted at any location of the child {block} content. {$smarty.block.child} inserts the {block} content of the child template at any location of the parent {block}.

{blocks}'s can be nested.

"},{"location":"designers/language-builtin-functions/language-function-block/#attributes","title":"Attributes","text":"Attribute Name Required Description name yes The name of the template source block assign no The name of variable to assign the output of the block to.

Note

The assign attribute only works on the block that actually gets executed, so you may need to add it to each child block as well.

"},{"location":"designers/language-builtin-functions/language-function-block/#option-flags-in-child-templates-only","title":"Option Flags (in child templates only):","text":"Name Description append The {block} content will be appended to the content of the parent template {block} prepend The {block} content will be prepended to the content of the parent template {block} hide Ignore the block content if no child block of same name is existing. nocache Disables caching of the {block} content"},{"location":"designers/language-builtin-functions/language-function-block/#examples","title":"Examples","text":"

parent.tpl

    <html>\n      <head>\n        <title>{block name=\"title\"}Default Title{/block}</title>\n        <title>{block \"title\"}Default Title{/block}</title>  {* short-hand  *}\n      </head>\n    </html>\n

child.tpl

    {extends file=\"parent.tpl\"} {block name=\"title\"}\n    Page Title\n{/block}\n

The result would look like

    <html>\n<head>\n<title>Page Title</title>\n</head>\n</html>\n

parent.tpl

    <html>\n      <head>\n        <title>{block name=\"title\"}Title - {/block}</title>\n      </head>\n    </html>\n

child.tpl

    {extends file=\"parent.tpl\"} {block name=\"title\" append}\n        Page Title\n{/block}\n

The result would look like

    <html>\n<head>\n<title>Title - Page Title</title>\n</head>\n</html>\n

parent.tpl

    <html>\n      <head>\n        <title>{block name=\"title\"} is my title{/block}</title>\n      </head>\n    </html>\n

child.tpl

    {extends file=\"parent.tpl\"} {block name=\"title\" prepend}\n    Page Title\n{/block}\n

The result would look like

    <html>\n<head>\n<title>Page title is my titel</title>\n</head>\n</html>\n

parent.tpl

    <html>\n      <head>\n        <title>{block name=\"title\"}The {$smarty.block.child} was inserted here{/block}</title>\n      </head>\n    </html>\n

child.tpl

    {extends file=\"parent.tpl\"} {block name=\"title\"}\n        Child Title\n{/block}\n

The result would look like

    <html>\n<head>\n<title>The Child Title was inserted here</title>\n</head>\n</html>\n

parent.tpl

    <html>\n      <head>\n        <title>{block name=\"title\"}Parent Title{/block}</title>\n      </head>\n    </html>\n

child.tpl

    {extends file=\"parent.tpl\"} {block name=\"title\"}\n        You will see now - {$smarty.block.parent} - here\n{/block}\n

The result would look like

    <html>\n<head>\n<title>You will see now - Parent Title - here</title>\n</head>\n</html>\n

See also Template Inheritance, $smarty.block.parent, $smarty.block.child, and {extends}

"},{"location":"designers/language-builtin-functions/language-function-call/","title":"{call}","text":"

{call} is used to call a template function defined by the {function} tag just like a plugin function.

Note

Template functions are defined global. Since the Smarty compiler is a single-pass compiler, The {call} tag must be used to call a template function defined externally from the given template. Otherwise you can directly use the function as {funcname ...} in the template.

  • The {call} tag must have the name attribute which contains the name of the template function.

  • Values for variables can be passed to the template function as attributes.

"},{"location":"designers/language-builtin-functions/language-function-call/#attributes","title":"Attributes","text":"Attribute Name Required Description name Yes The name of the template function assign No The name of the variable that the output of called template function will be assigned to [var ...] No variable to pass local to template function"},{"location":"designers/language-builtin-functions/language-function-call/#option-flags","title":"Option Flags","text":"Name Description nocache Call the template function in nocache mode"},{"location":"designers/language-builtin-functions/language-function-call/#examples","title":"Examples","text":"
    {* define the function *}\n{function name=menu level=0}\n      <ul class=\"level{$level}\">\n{foreach $data as $entry}\n{if is_array($entry)}\n          <li>{$entry@key}</li>\n{call name=menu data=$entry level=$level+1}\n{else}\n          <li>{$entry}</li>\n{/if}\n{/foreach}\n      </ul>\n{/function}\n{* create an array to demonstrate *}\n{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>\n['item3-3-1','item3-3-2']],'item4']}\n{* run the array through the function *}\n{call name=menu data=$menu}\n{call menu data=$menu} {* short-hand *}\n

Will generate the following output

    * item1\n    * item2\n    * item3\n          o item3-1\n          o item3-2\n          o item3-3\n                + item3-3-1\n                + item3-3-2\n    * item4\n

See also {function}.

"},{"location":"designers/language-builtin-functions/language-function-capture/","title":"{capture}","text":"

{capture} is used to collect the output of the template between the tags into a variable instead of displaying it. Any content between {capture name='foo'} and {/capture} is collected into the variable specified in the name attribute.

The captured content can be used in the template from the variable $smarty.capture.foo where \"foo\" is the value passed in the name attribute. If you do not supply the name attribute, then \"default\" will be used as the name ie $smarty.capture.default.

{capture}'s can be nested.

"},{"location":"designers/language-builtin-functions/language-function-capture/#attributes","title":"Attributes","text":"Attribute Name Required Description name Yes The name of the captured block assign No The variable name where to assign the captured output to append No The name of an array variable where to append the captured output to"},{"location":"designers/language-builtin-functions/language-function-capture/#option-flags","title":"Option Flags","text":"Name Description nocache Disables caching of this captured block
{* we don't want to print a div tag unless content is displayed *}\n{capture name=\"banner\"}\n{capture \"banner\"} {* short-hand *}\n{include file=\"get_banner.tpl\"}\n{/capture}\n{if $smarty.capture.banner ne \"\"}\n<div id=\"banner\">{$smarty.capture.banner}</div>\n{/if}\n

This example demonstrates the capture function.

{capture name=some_content assign=popText}\n{capture some_content assign=popText} {* short-hand *}\nThe server is {$my_server_name|upper} at {$my_server_addr}<br>\nYour ip is {$my_ip}.\n{/capture}\n<a href=\"#\">{$popText}</a>\n

This example also demonstrates how multiple calls of capture can be used to create an array with captured content.

{capture append=\"foo\"}hello{/capture}I say just {capture append=\"foo\"}world{/capture}\n{foreach $foo as $text}{$text} {/foreach}\n

The above example will output:

I say just hello world\n

See also $smarty.capture, {eval}, {fetch}, fetch() and {assign}.

"},{"location":"designers/language-builtin-functions/language-function-config-load/","title":"{config_load}","text":"

{config_load} is used for loading config #variables# from a configuration file into the template.

"},{"location":"designers/language-builtin-functions/language-function-config-load/#attributes","title":"Attributes","text":"Attribute Name Required Description file Yes The name of the config file to include section No The name of the section to load scope no How the scope of the loaded variables are treated, which must be one of local, parent or global. local means variables are loaded into the local template context. parent means variables are loaded into both the local context and the parent template that called it. global means variables are available to all templates."},{"location":"designers/language-builtin-functions/language-function-config-load/#examples","title":"Examples","text":"

The example.conf file.

#this is config file comment\n# global variables\npageTitle = \"Main Menu\"\nbodyBgColor = #000000\ntableBgColor = #000000\nrowBgColor = #00ff00\n#customer variables section\n[Customer]\npageTitle = \"Customer Info\"\n

and the template

{config_load file=\"example.conf\"}\n{config_load \"example.conf\"}  {* short-hand *}\n<html>\n    <title>{#pageTitle#|default:\"No title\"}</title>\n    <body bgcolor=\"{#bodyBgColor#}\">\n        <table border=\"{#tableBorderSize#}\" bgcolor=\"{#tableBgColor#}\">\n           <tr bgcolor=\"{#rowBgColor#}\">\n              <td>First</td>\n              <td>Last</td>\n              <td>Address</td>\n           </tr>\n        </table>\n    </body>\n</html>\n

Config Files may also contain sections. You can load variables from within a section with the added attribute section. Note that global config variables are always loaded along with section variables, and same-named section variables overwrite the globals.

Note

Config file sections and the built-in template function called {section} have nothing to do with each other, they just happen to share a common naming convention.

{config_load file='example.conf' section='Customer'}\n{config_load 'example.conf' 'Customer'} {* short-hand *}\n<html>\n    <title>{#pageTitle#}</title>\n    <body bgcolor=\"{#bodyBgColor#}\">\n        <table border=\"{#tableBorderSize#}\" bgcolor=\"{#tableBgColor#}\">\n           <tr bgcolor=\"{#rowBgColor#}\">\n              <td>First</td>\n              <td>Last</td>\n              <td>Address</td>\n           </tr>\n        </table>\n    </body>\n</html>\n

See $config_overwrite to create arrays of config file variables.

See also the config files page, config variables page, $config_dir, getConfigVars() and configLoad().

"},{"location":"designers/language-builtin-functions/language-function-debug/","title":"{debug}","text":"

{debug} dumps the debug console to the page. This works regardless of the debug settings in the php script. Since this gets executed at runtime, this is only able to show the assigned variables; not the templates that are in use. However, you can see all the currently available variables within the scope of a template.

If caching is enabled and a page is loaded from cache {debug} does show only the variables which assigned for the cached page.

In order to see also the variables which have been locally assigned within the template it does make sense to place the {debug} tag at the end of the template.

See also the debugging console page.

"},{"location":"designers/language-builtin-functions/language-function-extends/","title":"{extends}","text":"

{extends} tags are used in child templates in template inheritance for extending parent templates. For details see section of Template Inheritance.

  • The {extends} tag must be on the first line of the template.

  • If a child template extends a parent template with the {extends} tag it may contain only {block} tags. Any other template content is ignored.

  • Use the syntax for template resources to extend files outside the $template_dir directory.

"},{"location":"designers/language-builtin-functions/language-function-extends/#attributes","title":"Attributes","text":"Attribute Required Description file Yes The name of the template file which is extended

Note

When extending a variable parent like {extends file=$parent_file}, make sure you include $parent_file in the $compile_id. Otherwise, Smarty cannot distinguish between different $parent_files.

"},{"location":"designers/language-builtin-functions/language-function-extends/#examples","title":"Examples","text":"
{extends file='parent.tpl'}\n{extends 'parent.tpl'}  {* short-hand *}\n

See also Template Inheritance and {block}.

"},{"location":"designers/language-builtin-functions/language-function-for/","title":"{for}","text":"

The {for}{forelse} tag is used to create simple loops. The following different formats are supported:

  • {for $var=$start to $end} simple loop with step size of 1.

  • {for $var=$start to $end step $step} loop with individual step size.

{forelse} is executed when the loop is not iterated.

"},{"location":"designers/language-builtin-functions/language-function-for/#attributes","title":"Attributes","text":"Attribute Required Description max No Limit the number of iterations"},{"location":"designers/language-builtin-functions/language-function-for/#option-flags","title":"Option Flags","text":"Name Description nocache Disables caching of the {for} loop"},{"location":"designers/language-builtin-functions/language-function-for/#examples","title":"Examples","text":"
<ul>\n{for $foo=1 to 3}\n        <li>{$foo}</li>\n{/for}\n</ul>\n

The above example will output:

<ul>\n<li>1</li>\n<li>2</li>\n<li>3</li>\n</ul>\n
<?php\n$smarty->assign('to',10);\n
<ul>\n{for $foo=3 to $to max=3}\n        <li>{$foo}</li>\n{/for}\n</ul>\n

The above example will output:

<ul>\n<li>3</li>\n<li>4</li>\n<li>5</li>\n</ul>\n
<?php\n$smarty->assign('start',10);\n$smarty->assign('to',5);\n
<ul>\n{for $foo=$start to $to}\n        <li>{$foo}</li>\n{forelse}\n      no iteration\n{/for}\n</ul>\n

The above example will output:

   no iteration\n

See also {foreach}, {section} and {while}

"},{"location":"designers/language-builtin-functions/language-function-foreach/","title":"{foreach},{foreachelse}","text":"

{foreach} is used for looping over arrays of data. {foreach} has a simpler and cleaner syntax than the {section} loop, and can also loop over associative arrays.

"},{"location":"designers/language-builtin-functions/language-function-foreach/#option-flags","title":"Option Flags","text":"Name Description nocache Disables caching of the {foreach} loop"},{"location":"designers/language-builtin-functions/language-function-foreach/#examples","title":"Examples","text":"
{foreach $arrayvar as $itemvar}\n{$itemvar|escape}\n{/foreach}\n{foreach $arrayvar as $keyvar=>$itemvar}\n{$keyvar}: {$itemvar|escape}\n{/foreach}\n

Note

This foreach syntax does not accept any named attributes. This syntax is new to Smarty 3, however the Smarty 2.x syntax {foreach from=$myarray key=\"mykey\" item=\"myitem\"} is still supported.

  • {foreach} loops can be nested.

  • The array variable, usually an array of values, determines the number of times {foreach} will loop. You can also pass an integer for arbitrary loops.

  • {foreachelse} is executed when there are no values in the array variable.

  • {foreach} properties are @index, @iteration, @first, @last, @show, @total.

  • {foreach} constructs are {break}, {continue}.

  • Instead of specifying the key variable you can access the current key of the loop item by {$item@key} (see examples below).

Note

The $var@property syntax is new to Smarty 3, however when using the Smarty 2 {foreach from=$myarray key=\"mykey\" item=\"myitem\"} style syntax, the $smarty.foreach.name.property syntax is still supported.

Note

Although you can retrieve the array key with the syntax {foreach $myArray as $myKey => $myValue}, the key is always available as $myValue@key within the foreach loop.

<?php\n$arr = array('red', 'green', 'blue');\n$smarty->assign('myColors', $arr);\n

Template to output $myColors in an un-ordered list

<ul>\n{foreach $myColors as $color}\n        <li>{$color}</li>\n{/foreach}\n</ul>\n

The above example will output:

<ul>\n<li>red</li>\n<li>green</li>\n<li>blue</li>\n</ul>\n
<?php\n$people = array('fname' => 'John', 'lname' => 'Doe', 'email' => 'j.doe@example.com');\n$smarty->assign('myPeople', $people);\n

Template to output $myArray as key/value pairs.

<ul>\n{foreach $myPeople as $value}\n       <li>{$value@key}: {$value}</li>\n{/foreach}\n</ul>\n

The above example will output:

<ul>\n<li>fname: John</li>\n<li>lname: Doe</li>\n<li>email: j.doe@example.com</li>\n</ul>\n

Assign an array to Smarty, the key contains the key for each looped value.

<?php\n$smarty->assign(\n'contacts', \n[\n['phone' => '555-555-1234', 'fax' => '555-555-5678', 'cell' => '555-555-0357'],\n['phone' => '800-555-4444', 'fax' => '800-555-3333', 'cell' => '800-555-2222'],\n]\n);\n

The template to output $contact.

{* key always available as a property *}\n{foreach $contacts as $contact}\n{foreach $contact as $value}\n{$value@key}: {$value}\n{/foreach}\n{/foreach}\n{* accessing key the PHP syntax alternate *}\n{foreach $contacts as $contact}\n{foreach $contact as $key => $value}\n{$key}: {$value}\n{/foreach}\n{/foreach}\n

Either of the above examples will output:

  phone: 555-555-1234\n  fax: 555-555-5678\n  cell: 555-555-0357\n  phone: 800-555-4444\n  fax: 800-555-3333\n  cell: 800-555-2222\n

A database (PDO) example of looping over search results. This example is looping over a PHP iterator instead of an array().

<?php \nuse Smarty\\Smarty;\n$smarty = new Smarty; \n$dsn = 'mysql:host=localhost;dbname=test'; \n$login = 'test'; \n$passwd = 'test'; \n// setting PDO to use buffered queries in mysql is \n// important if you plan on using multiple result cursors \n// in the template. \n$db = new PDO($dsn, $login, $passwd, array( \nPDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true)); \n$res = $db->prepare(\"select * from users\"); \n$res->execute(); \n$res->setFetchMode(PDO::FETCH_LAZY); \n// assign to smarty \n$smarty->assign('res',$res); \n$smarty->display('index.tpl');?>\n
{foreach $res as $r} {$r.id} {$r.name}\n{foreachelse}\n  .. no results .. \n{/foreach}\n

The above is assuming the results contain the columns named id and name.

What is the advantage of an iterator vs. looping over a plain old array? With an array, all the results are accumulated into memory before being looped. With an iterator, each result is loaded/released within the loop. This saves processing time and memory, especially for very large result sets.

"},{"location":"designers/language-builtin-functions/language-function-foreach/#index","title":"@index","text":"

index contains the current array index, starting with zero.

{* output empty row on the 4th iteration (when index is 3) *}\n<table>\n{foreach $items as $i}\n{if $i@index eq 3}\n{* put empty table row *}\n         <tr><td>nbsp;</td></tr>\n{/if}\n      <tr><td>{$i.label}</td></tr>\n{/foreach}\n</table>\n
"},{"location":"designers/language-builtin-functions/language-function-foreach/#iteration","title":"@iteration","text":"

iteration contains the current loop iteration and always starts at one, unlike index. It is incremented by one on each iteration.

The \"is div by\" operator can be used to detect a specific iteration. Here we bold-face the name every 4th iteration.

{foreach $myNames as $name}\n{if $name@iteration is div by 4}\n    <b>{$name}</b>\n{/if}\n{$name}\n{/foreach}\n

The \"is even by\" and \"is odd by\" operators can be used to alternate something every so many iterations. Choosing between even or odd rotates which one starts. Here we switch the font color every 3rd iteration.

 {foreach $myNames as $name}\n{if $name@iteration is even by 3}\n     <span style=\"color: #000\">{$name}</span>\n{else}\n     <span style=\"color: #eee\">{$name}</span>\n{/if}\n{/foreach}\n

This will output something similar to this:

<span style=\"color: #000\">...</span>\n<span style=\"color: #000\">...</span>\n<span style=\"color: #000\">...</span>\n<span style=\"color: #eee\">...</span>\n<span style=\"color: #eee\">...</span>\n<span style=\"color: #eee\">...</span>\n<span style=\"color: #000\">...</span>\n<span style=\"color: #000\">...</span>\n<span style=\"color: #000\">...</span>\n<span style=\"color: #eee\">...</span>\n<span style=\"color: #eee\">...</span>\n<span style=\"color: #eee\">...</span>\n...\n
"},{"location":"designers/language-builtin-functions/language-function-foreach/#first","title":"@first","text":"

first is TRUE if the current {foreach} iteration is the initial one. Here we display a table header row on the first iteration.

{* show table header at first iteration *}\n<table>\n{foreach $items as $i}\n{if $i@first}\n        <tr>\n          <th>key</td>\n          <th>name</td>\n        </tr>\n{/if}\n      <tr>\n        <td>{$i@key}</td>\n        <td>{$i.name}</td>\n      </tr>\n{/foreach}\n</table>\n
"},{"location":"designers/language-builtin-functions/language-function-foreach/#last","title":"@last","text":"

last is set to TRUE if the current {foreach} iteration is the final one. Here we display a horizontal rule on the last iteration.

{* Add horizontal rule at end of list *}\n{foreach $items as $item}\n  <a href=\"#{$item.id}\">{$item.name}</a>{if $item@last}<hr>{else},{/if}\n{foreachelse}\n  ... no items to loop ...\n{/foreach}\n
"},{"location":"designers/language-builtin-functions/language-function-foreach/#show","title":"@show","text":"

The show show property can be used after the execution of a {foreach} loop to detect if data has been displayed or not. show is a boolean value.

<ul>\n{foreach $myArray as $name}\n        <li>{$name}</li>\n{/foreach}\n</ul>\n{if $name@show} do something here if the array contained data {/if}\n
"},{"location":"designers/language-builtin-functions/language-function-foreach/#total","title":"@total","text":"

total contains the number of iterations that this {foreach} will loop. This can be used inside or after the {foreach}.

{* show number of rows at end *}\n{foreach $items as $item}\n{$item.name}<hr/>\n{if $item@last}\n    <div id=\"total\">{$item@total} items</div>\n{/if}\n{foreachelse}\n ... no items to loop ...\n{/foreach}\n

See also {section}, {for} and {while}

"},{"location":"designers/language-builtin-functions/language-function-foreach/#break","title":"{break}","text":"

{break} aborts the iteration of the array

  {$data = [1,2,3,4,5]}\n{foreach $data as $value}\n{if $value == 3}\n{* abort iterating the array *}\n{break}\n{/if}\n{$value}\n{/foreach}\n{*\n    prints: 1 2\n  *}\n
"},{"location":"designers/language-builtin-functions/language-function-foreach/#continue","title":"{continue}","text":"

{continue} leaves the current iteration and begins with the next iteration.

  {$data = [1,2,3,4,5]}\n{foreach $data as $value}\n{if $value == 3}\n{* skip this iteration *}\n{continue}\n{/if}\n{$value}\n{/foreach}\n{*\n    prints: 1 2 4 5\n  *}\n
"},{"location":"designers/language-builtin-functions/language-function-function/","title":"{function}","text":"

{function} is used to create functions within a template and call them just like a plugin function. Instead of writing a plugin that generates presentational content, keeping it in the template is often a more manageable choice. It also simplifies data traversal, such as deeply nested menus.

Note

Template functions are defined global. Since the Smarty compiler is a single-pass compiler, The {call} tag must be used to call a template function defined externally from the given template. Otherwise, you can directly use the function as {funcname ...} in the template.

"},{"location":"designers/language-builtin-functions/language-function-function/#attributes","title":"Attributes","text":"Attribute Name Required Description name Yes The name of the template function [var ...] No default variable value to pass local to the template function
  • The {function} tag must have the name attribute which contains the name of the template function. A tag with this name can be used to call the template function.

  • Default values for variables can be passed to the template function as attributes. Like in PHP function declarations you can only use scalar values as default. The default values can be overwritten when the template function is being called.

  • You can use all variables from the calling template inside the template function. Changes to variables or new created variables inside the template function have local scope and are not visible inside the calling template after the template function is executed.

Note

You can pass any number of parameter to the template function when it is called. The parameter variables must not be declared in the {funcname ...} tag unless you what to use default values. Default values must be scalar and can not be variable. Variables must be passed when the template is called.

"},{"location":"designers/language-builtin-functions/language-function-function/#examples","title":"Examples","text":"
{* define the function *}\n{function name=menu level=0}\n{function menu level=0}          {* short-hand *}\n  <ul class=\"level{$level}\">\n{foreach $data as $entry}\n{if is_array($entry)}\n      <li>{$entry@key}</li>\n{menu data=$entry level=$level+1}\n{else}\n      <li>{$entry}</li>\n{/if}\n{/foreach}\n  </ul>\n{/function}\n{* create an array to demonstrate *}\n{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>\n['item3-3-1','item3-3-2']],'item4']}\n{* run the array through the function *}\n{menu data=$menu}\n

Will generate the following output

* item1\n* item2\n* item3\n      o item3-1\n      o item3-2\n      o item3-3\n            + item3-3-1\n            + item3-3-2\n* item4\n

See also {call}

"},{"location":"designers/language-builtin-functions/language-function-if/","title":"{if},{elseif},{else}","text":"

{if} statements in Smarty have much the same flexibility as PHP if statements, with a few added features for the template engine. Every {if} must be paired with a matching {/if}. {else} and {elseif} are also permitted. All PHP conditionals and functions are recognized, such as ||, or, &&, and, is_array(), etc.

The following is a list of recognized qualifiers, which must be separated from surrounding elements by spaces. Note that items listed in [brackets] are optional. PHP equivalents are shown where applicable.

"},{"location":"designers/language-builtin-functions/language-function-if/#qualifiers","title":"Qualifiers","text":"Qualifier Alternates Syntax Example Meaning PHP Equivalent == eq $a eq $b equals == != ne, neq $a neq $b not equals != > gt $a gt $b greater than > < lt $a lt $b less than < >= gte, ge $a ge $b greater than or equal >= <= lte, le $a le $b less than or equal <= === $a === 0 check for identity === ! not not $a negation (unary) ! % mod $a mod $b modulo % is [not] div by $a is not div by 4 divisible by $a % $b == 0 is [not] even $a is not even [not] an even number (unary) $a % 2 == 0 is [not] even by $a is not even by $b grouping level [not] even ($a / $b) % 2 == 0 is [not] odd $a is not odd [not] an odd number (unary) $a % 2 != 0 is [not] odd by $a is not odd by $b [not] an odd grouping ($a / $b) % 2 != 0"},{"location":"designers/language-builtin-functions/language-function-if/#examples","title":"Examples","text":"
{if $name eq 'Fred'}\n    Welcome Sir.\n{elseif $name eq 'Wilma'}\n    Welcome Ma'am.\n{else}\n    Welcome, whatever you are.\n{/if}\n{* an example with \"or\" logic *}\n{if $name eq 'Fred' or $name eq 'Wilma'}\n   ...\n{/if}\n{* same as above *}\n{if $name == 'Fred' || $name == 'Wilma'}\n   ...\n{/if}\n{* parenthesis are allowed *}\n{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}\n   ...\n{/if}\n{* you can also embed php function calls *}\n{if count($var) gt 0}\n   ...\n{/if}\n{* check for array. *}\n{if is_array($foo) }\n   .....\n{/if}\n{* check for not null. *}\n{if isset($foo) }\n   .....\n{/if}\n{* test if values are even or odd *}\n{if $var is even}\n   ...\n{/if}\n{if $var is odd}\n   ...\n{/if}\n{if $var is not odd}\n   ...\n{/if}\n{* test if var is divisible by 4 *}\n{if $var is div by 4}\n   ...\n{/if}\n{*\n  test if var is even, grouped by two. i.e.,\n  0=even, 1=even, 2=odd, 3=odd, 4=even, 5=even, etc.\n*}\n{if $var is even by 2}\n   ...\n{/if}\n{* 0=even, 1=even, 2=even, 3=odd, 4=odd, 5=odd, etc. *}\n{if $var is even by 3}\n   ...\n{/if}\n{if isset($name) && $name == 'Blog'}\n{* do something *}\n{elseif $name == $foo}\n{* do something *}\n{/if}\n{if is_array($foo) && count($foo) > 0}\n{* do a foreach loop *}\n{/if}\n
"},{"location":"designers/language-builtin-functions/language-function-include/","title":"{include}","text":"

{include} tags are used for including other templates in the current template. Any variables available in the current template are also available within the included template.

"},{"location":"designers/language-builtin-functions/language-function-include/#attributes","title":"Attributes","text":"Attribute Name Required Description file Yes The name of the template file to include assign No The name of the variable that the output of include will be assigned to cache_lifetime No Enable caching of this subtemplate with an individual cache lifetime compile_id No Compile this subtemplate with an individual compile_id cache_id No Enable caching of this subtemplate with an individual cache_id scope No Define the scope of all in the subtemplate assigned variables: 'parent','root' or 'global' [var ...] No variable to pass local to template
  • The {include} tag must have the file attribute which contains the template resource path.

  • Setting the optional assign attribute specifies the template variable that the output of {include} is assigned to, instead of being displayed. Similar to {assign}.

  • Variables can be passed to included templates as attributes. Any variables explicitly passed to an included template are only available within the scope of the included file. Attribute variables override current template variables, in the case when they are named the same.

  • You can use all variables from the including template inside the included template. But changes to variables or new created variables inside the included template have local scope and are not visible inside the including template after the {include} statement. This default behaviour can be changed for all variables assigned in the included template by using the scope attribute at the {include} statement or for individual variables by using the scope attribute at the {assign} statement. The later is useful to return values from the included template to the including template.

  • Use the syntax for template resources to {include} files outside of the $template_dir directory.

"},{"location":"designers/language-builtin-functions/language-function-include/#option-flags","title":"Option Flags","text":"Name Description nocache Disables caching of this subtemplate caching Enable caching of this subtemplate inline If set, merge the compile-code of the subtemplate into the compiled calling template"},{"location":"designers/language-builtin-functions/language-function-include/#examples","title":"Examples","text":"
<html>\n    <head>\n      <title>{$title}</title>\n    </head>\n    <body>\n{include file='page_header.tpl'}\n{* body of template goes here, the $tpl_name variable\n       is replaced with a value eg 'contact.tpl'\n    *}\n{include file=\"$tpl_name.tpl\"}\n{* using shortform file attribute *}\n{include 'page_footer.tpl'}\n    </body>\n</html>\n
{include 'links.tpl' title='Newest links' links=$link_array}\n{* body of template goes here *}\n{include 'footer.tpl' foo='bar'}\n

The template above includes the example links.tpl below

<div id=\"box\">\n    <h3>{$title}{/h3>\n<ul>\n{foreach from=$links item=l}\n.. do stuff  ...\n</foreach}\n    </ul>\n</div>\n
Variables assigned in the included template will be seen in the including template.

{include 'sub_template.tpl' scope=parent}\n...\n{* display variables assigned in sub_template *}\n{$foo}<br>\n{$bar}<br>\n...\n

The template above includes the example sub_template.tpl below

...\n{assign var=foo value='something'}\n{assign var=bar value='value'}\n...\n

The included template will not be cached.

{include 'sub_template.tpl' nocache}\n...\n

In this example included template will be cached with an individual cache lifetime of 500 seconds.

{include 'sub_template.tpl' cache_lifetime=500}\n...\n

In this example included template will be cached independent of the global caching setting.

{include 'sub_template.tpl' caching}\n...\n

This example assigns the contents of nav.tpl to the $navbar variable, which is then output at both the top and bottom of the page.

<body>\n{include 'nav.tpl' assign=navbar}\n{include 'header.tpl' title='Smarty is cool'}\n{$navbar}\n{* body of template goes here *}\n{$navbar}\n{include 'footer.tpl'}\n</body>\n

This example includes another template relative to the directory of the current template.

{include 'template-in-a-template_dir-directory.tpl'}\n{include './template-in-same-directory.tpl'}\n{include '../template-in-parent-directory.tpl'}\n
{* absolute filepath *}\n{include file='/usr/local/include/templates/header.tpl'}\n{* absolute filepath (same thing) *}\n{include file='file:/usr/local/include/templates/header.tpl'}\n{* windows absolute filepath (MUST use \"file:\" prefix) *}\n{include file='file:C:/www/pub/templates/header.tpl'}\n{* include from template resource named \"db\" *}\n{include file='db:header.tpl'}\n{* include a $variable template - eg $module = 'contacts' *}\n{include file=\"$module.tpl\"}\n{* wont work as its single quotes ie no variable substitution *}\n{include file='$module.tpl'}\n{* include a multi $variable template - eg amber/links.view.tpl *}\n{include file=\"$style_dir/$module.$view.tpl\"}\n

See also template resources and componentized templates.

"},{"location":"designers/language-builtin-functions/language-function-ldelim/","title":"{ldelim}, {rdelim}","text":"

{ldelim} and {rdelim} are used for escaping template delimiters, by default { and }. You can also use {literal}{/literal} to escape blocks of text eg Javascript or CSS. See also the complementary {$smarty.ldelim}.

{* this will print literal delimiters out of the template *}\n{ldelim}funcname{rdelim} is how functions look in Smarty!\n

The above example will output:

{funcname} is how functions look in Smarty!\n

Another example with some Javascript

<script>\nfunction foo() {ldelim}\n    ... code ...\n{rdelim}\n</script>\n

will output

<script>\nfunction foo() {\n.... code ...\n}\n</script>\n
<script>\n    function myJsFunction(){ldelim}\n        alert(\"The server name\\n{$smarty.server.SERVER_NAME|escape:javascript}\\n{$smarty.server.SERVER_ADDR|escape:javascript}\");\n{rdelim}\n</script>\n<a href=\"javascript:myJsFunction()\">Click here for Server Info</a>\n

See also {literal} and escaping Smarty parsing.

"},{"location":"designers/language-builtin-functions/language-function-literal/","title":"{literal}","text":"

{literal} tags allow a block of data to be taken literally. This is typically used around Javascript or stylesheet blocks where {curly braces} would interfere with the template delimiter syntax. Anything within {literal}{/literal} tags is not interpreted, but displayed as-is. If you need template tags embedded in a {literal} block, consider using {ldelim}{rdelim} to escape the individual delimiters instead.

Note

{literal}{/literal} tags are normally not necessary, as Smarty ignores delimiters that are surrounded by whitespace. Be sure your javascript and CSS curly braces are surrounded by whitespace. This is new behavior to Smarty 3.

<script>\n   // the following braces are ignored by Smarty\n   // since they are surrounded by whitespace\n   function myFoo {\nalert('Foo!');\n}\n   // this one will need literal escapement\n{literal}\n     function myBar {alert('Bar!');}\n{/literal}\n</script>\n

See also {ldelim} {rdelim} and the escaping Smarty parsing page.

"},{"location":"designers/language-builtin-functions/language-function-nocache/","title":"{nocache}","text":"

{nocache} is used to disable caching of a template section. Every {nocache} must be paired with a matching {/nocache}.

Note

Be sure any variables used within a non-cached section are also assigned from PHP when the page is loaded from the cache.

Today's date is\n{nocache}\n{$smarty.now|date_format}\n{/nocache}\n

The above code will output the current date on a cached page.

See also the caching section.

"},{"location":"designers/language-builtin-functions/language-function-section/","title":"{section}, {sectionelse}","text":"

A {section} is for looping over sequentially indexed arrays of data, unlike {foreach} which is used to loop over a single associative array. Every {section} tag must be paired with a closing {/section} tag.

Note

The {foreach} loop can do everything a {section} loop can do, and has a simpler and easier syntax. It is usually preferred over the {section} loop.

Note

{section} loops cannot loop over associative arrays, they must be numerically indexed, and sequential (0,1,2,...). For associative arrays, use the {foreach} loop.

"},{"location":"designers/language-builtin-functions/language-function-section/#attributes","title":"Attributes","text":"Attribute Name Required Description name Yes The name of the section loop Yes Value to determine the number of loop iterations start No The index position that the section will begin looping. If the value is negative, the start position is calculated from the end of the array. For example, if there are seven values in the loop array and start is -2, the start index is 5. Invalid values (values outside of the length of the loop array) are automatically truncated to the closest valid value. Defaults to 0. step No The step value that will be used to traverse the loop array. For example, step=2 will loop on index 0, 2, 4, etc. If step is negative, it will step through the array backwards. Defaults to 1. max No Sets the maximum number of times the section will loop. show No Determines whether to show this section (defaults to true)"},{"location":"designers/language-builtin-functions/language-function-section/#option-flags","title":"Option Flags","text":"Name Description nocache Disables caching of the {section} loop
  • Required attributes are name and loop.

  • The name of the {section} can be anything you like, made up of letters, numbers and underscores, like PHP variables.

  • {section}'s can be nested, and the nested {section} names must be unique from each other.

  • The loop attribute, usually an array of values, determines the number of times the {section} will loop. You can also pass an integer as the loop value.

  • When printing a variable within a {section}, the {section} name must be given next to variable name within [brackets].

  • {sectionelse} is executed when there are no values in the loop variable.

  • A {section} also has its own variables that handle {section} properties. These properties are accessible as: {$smarty.section.name.property} where \"name\" is the attribute name.

  • {section} properties are index, index_prev, index_next, iteration, first, last, rownum, loop, show, total.

assign() an array to Smarty

"},{"location":"designers/language-builtin-functions/language-function-section/#examples","title":"Examples","text":"
<?php\n$data = [1000, 1001, 1002];\n$smarty->assign('custid', $data);\n

The template that outputs the array

{* this example will print out all the values of the $custid array *}\n{section name=customer loop=$custid}\n{section customer $custid} {* short-hand *}\n  id: {$custid[customer]}<br />\n{/section}\n<hr />\n{*  print out all the values of the $custid array reversed *}\n{section name=foo loop=$custid step=-1}\n{section foo $custid step=-1} {* short-hand *}\n{$custid[foo]}<br />\n{/section}\n

The above example will output:

id: 1000<br />\nid: 1001<br />\nid: 1002<br />\n<hr />\nid: 1002<br />\nid: 1001<br />\nid: 1000<br />\n
{section name=foo start=10 loop=20 step=2}\n{$smarty.section.foo.index}\n{/section}\n<hr />\n{section name=bar loop=21 max=6 step=-2}\n{$smarty.section.bar.index}\n{/section}\n

The above example will output:

10 12 14 16 18\n<hr />\n20 18 16 14 12 10\n

The name of the {section} can be anything you like, see PHP variables. It is used to reference the data within the {section}.

{section name=anything loop=$myArray}\n{$myArray[anything].foo}\n{$name[anything]}\n{$address[anything].bar}\n{/section}\n

This is an example of printing an associative array of data with a {section}. Following is the php script to assign the $contacts array to Smarty.

<?php\n$data = [\n['name' => 'John Smith', 'home' => '555-555-5555',\n'cell' => '666-555-5555', 'email' => 'john@myexample.com'],\n['name' => 'Jack Jones', 'home' => '777-555-5555',\n'cell' => '888-555-5555', 'email' => 'jack@myexample.com'],\n['name' => 'Jane Munson', 'home' => '000-555-5555',\n'cell' => '123456', 'email' => 'jane@myexample.com']\n];\n$smarty->assign('contacts',$data);\n

The template to output $contacts

{section name=customer loop=$contacts}\n<p>\n  name: {$contacts[customer].name}<br />\n  home: {$contacts[customer].home}<br />\n  cell: {$contacts[customer].cell}<br />\n  e-mail: {$contacts[customer].email}\n</p>\n{/section}\n

The above example will output:

<p>\n  name: John Smith<br />\n  home: 555-555-5555<br />\n  cell: 666-555-5555<br />\n  e-mail: john@myexample.com\n</p>\n<p>\n  name: Jack Jones<br />\n  home phone: 777-555-5555<br />\n  cell phone: 888-555-5555<br />\n  e-mail: jack@myexample.com\n</p>\n<p>\n  name: Jane Munson<br />\n  home phone: 000-555-5555<br />\n  cell phone: 123456<br />\n  e-mail: jane@myexample.com\n</p>\n

This example assumes that $custid, $name and $address are all arrays containing the same number of values. First the php script that assign's the arrays to Smarty.

<?php\n$id = [1001,1002,1003];\n$smarty->assign('custid',$id);\n$fullnames = ['John Smith','Jack Jones','Jane Munson'];\n$smarty->assign('name',$fullnames);\n$addr = ['253 Abbey road', '417 Mulberry ln', '5605 apple st'];\n$smarty->assign('address',$addr);\n

The loop variable only determines the number of times to loop. You can access ANY variable from the template within the {section}. This is useful for looping multiple arrays. You can pass an array which will determine the loop count by the array size, or you can pass an integer to specify the number of loops.

{section name=customer loop=$custid}\n<p>\n  id: {$custid[customer]}<br />\n  name: {$name[customer]}<br />\n  address: {$address[customer]}\n</p>\n{/section}\n

The above example will output:

<p>\n  id: 1000<br />\n  name: John Smith<br />\n  address: 253 Abbey road\n</p>\n<p>\n  id: 1001<br />\n  name: Jack Jones<br />\n  address: 417 Mulberry ln\n</p>\n<p>\n  id: 1002<br />\n  name: Jane Munson<br />\n  address: 5605 apple st\n</p>\n

{section}'s can be nested as deep as you like. With nested {section}'s, you can access complex data structures, such as multidimensional arrays. This is an example .php script that assigns the arrays.

<?php\n$id = [1001,1002,1003];\n$smarty->assign('custid',$id);\n$fullnames = ['John Smith','Jack Jones','Jane Munson'];\n$smarty->assign('name',$fullnames);\n$addr = ['253 N 45th', '417 Mulberry ln', '5605 apple st'];\n$smarty->assign('address',$addr);\n$types = [\n[ 'home phone', 'cell phone', 'e-mail'],\n[ 'home phone', 'web'],\n[ 'cell phone']\n];\n$smarty->assign('contact_type', $types);\n$info = [\n['555-555-5555', '666-555-5555', 'john@myexample.com'],\n[ '123-456-4', 'www.example.com'],\n[ '0457878']\n];\n$smarty->assign('contact_info', $info);\n

In this template, $contact_type[customer] is an array of contact types for the current customer.

{section name=customer loop=$custid}\n<hr>\n  id: {$custid[customer]}<br />\n  name: {$name[customer]}<br />\n  address: {$address[customer]}<br />\n{section name=contact loop=$contact_type[customer]}\n{$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br />\n{/section}\n{/section}\n

The above example will output:

<hr>\n  id: 1000<br />\n  name: John Smith<br />\n  address: 253 N 45th<br />\n    home phone: 555-555-5555<br />\n    cell phone: 666-555-5555<br />\n    e-mail: john@myexample.com<br />\n<hr>\n  id: 1001<br />\n  name: Jack Jones<br />\n  address: 417 Mulberry ln<br />\n    home phone: 123-456-4<br />\n    web: www.example.com<br />\n<hr>\n  id: 1002<br />\n  name: Jane Munson<br />\n  address: 5605 apple st<br />\n    cell phone: 0457878<br />\n

Results of a database search (eg ADODB or PEAR) are assigned to Smarty

<?php\n$sql = 'select id, name, home, cell, email from contacts '\n.\"where name like '$foo%' \";\n$smarty->assign('contacts', $db->getAll($sql));\n

The template to output the database result in a HTML table

<table>\n    <tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>\n{section name=co loop=$contacts}\n      <tr>\n        <td><a href=\"view.php?id={$contacts[co].id}\">view<a></td>\n        <td>{$contacts[co].name}</td>\n        <td>{$contacts[co].home}</td>\n        <td>{$contacts[co].cell}</td>\n        <td>{$contacts[co].email}</td>\n      <tr>\n{sectionelse}\n      <tr><td colspan=\"5\">No items found</td></tr>\n{/section}\n</table>\n
"},{"location":"designers/language-builtin-functions/language-function-section/#index","title":".index","text":"

index contains the current array index, starting with zero or the start attribute if given. It increments by one or by the step attribute if given.

Note

If the step and start properties are not modified, then this works the same as the iteration property, except it starts at zero instead of one.

Note

$custid[customer.index] and $custid[customer] are identical.

{section name=customer loop=$custid}\n{$smarty.section.customer.index} id: {$custid[customer]}<br />\n{/section}\n

The above example will output:

0 id: 1000<br />\n1 id: 1001<br />\n2 id: 1002<br />\n
"},{"location":"designers/language-builtin-functions/language-function-section/#index_prev","title":".index_prev","text":"

index_prev is the previous loop index. On the first loop, this is set to -1.

"},{"location":"designers/language-builtin-functions/language-function-section/#index_next","title":".index_next","text":"

index_next is the next loop index. On the last loop, this is still one more than the current index, respecting the setting of the step attribute, if given.

<?php\n$data = [1001,1002,1003,1004,1005];\n$smarty->assign('rows',$data);\n

Template to output the above array in a table

{* $rows[row.index] and $rows[row] are identical in meaning *}\n<table>\n  <tr>\n    <th>index</th><th>id</th>\n    <th>index_prev</th><th>prev_id</th>\n    <th>index_next</th><th>next_id</th>\n  </tr>\n{section name=row loop=$rows}\n  <tr>\n    <td>{$smarty.section.row.index}</td><td>{$rows[row]}</td>\n    <td>{$smarty.section.row.index_prev}</td><td>{$rows[row.index_prev]}</td>\n    <td>{$smarty.section.row.index_next}</td><td>{$rows[row.index_next]}</td>\n  </tr>\n{/section}\n</table>\n

The above example will output a table containing the following:

    index  id    index_prev prev_id index_next next_id\n    0      1001  -1                 1          1002\n    1      1002  0          1001    2          1003\n    2      1003  1          1002    3          1004\n    3      1004  2          1003    4          1005\n    4      1005  3          1004    5\n
"},{"location":"designers/language-builtin-functions/language-function-section/#iteration","title":".iteration","text":"

iteration contains the current loop iteration and starts at one.

Note

This is not affected by the {section} properties start, step and max, unlike the index property. iteration also starts with one instead of zero unlike index. rownum is an alias to iteration, they are identical.

<?php\n// array of 3000 to 3015\n$id = range(3000,3015);\n$smarty->assign('arr', $id);\n

Template to output every other element of the $arr array as step=2

{section name=cu loop=$arr start=5 step=2}\n  iteration={$smarty.section.cu.iteration}\n  index={$smarty.section.cu.index}\n  id={$custid[cu]}<br />\n{/section}\n

The above example will output:

iteration=1 index=5 id=3005<br />\niteration=2 index=7 id=3007<br />\niteration=3 index=9 id=3009<br />\niteration=4 index=11 id=3011<br />\niteration=5 index=13 id=3013<br />\niteration=6 index=15 id=3015<br />\n

Another example that uses the iteration property to output a table header block every five rows.

<table>\n{section name=co loop=$contacts}\n{if $smarty.section.co.iteration is div by 5}\n        <tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>\n{/if}\n      <tr>\n        <td><a href=\"view.php?id={$contacts[co].id}\">view<a></td>\n        <td>{$contacts[co].name}</td>\n        <td>{$contacts[co].home}</td>\n        <td>{$contacts[co].cell}</td>\n        <td>{$contacts[co].email}</td>\n      <tr>\n{/section}\n</table>\n

An example that uses the iteration property to alternate a text color every third row.

<table>\n{section name=co loop=$contacts}\n{if $smarty.section.co.iteration is even by 3}\n      <span style=\"color: #ffffff\">{$contacts[co].name}</span>\n{else}\n      <span style=\"color: #dddddd\">{$contacts[co].name}</span>\n{/if}\n{/section}\n</table>\n

Note

The \"is div by\" syntax is a simpler alternative to the PHP mod operator syntax. The mod operator is allowed: {if $smarty.section.co.iteration % 5 == 1} will work just the same.

Note

You can also use \"is odd by\" to reverse the alternating.

"},{"location":"designers/language-builtin-functions/language-function-section/#first","title":".first","text":"

first is set to TRUE if the current {section} iteration is the initial one.

"},{"location":"designers/language-builtin-functions/language-function-section/#last","title":".last","text":"

last is set to TRUE if the current section iteration is the final one.

This example loops the $customers array, outputs a header block on the first iteration and on the last outputs the footer block. Also uses the total property.

{section name=customer loop=$customers}\n{if $smarty.section.customer.first}\n    <table>\n    <tr><th>id</th><th>customer</th></tr>\n{/if}\n  <tr>\n    <td>{$customers[customer].id}}</td>\n    <td>{$customers[customer].name}</td>\n  </tr>\n{if $smarty.section.customer.last}\n    <tr><td></td><td>{$smarty.section.customer.total} customers</td></tr>\n    </table>\n{/if}\n{/section}\n
"},{"location":"designers/language-builtin-functions/language-function-section/#rownum","title":".rownum","text":"

rownum contains the current loop iteration, starting with one. It is an alias to iteration, they work identically.

"},{"location":"designers/language-builtin-functions/language-function-section/#loop","title":".loop","text":"

loop contains the last index number that this {section} looped. This can be used inside or after the {section}.

{section name=customer loop=$custid}\n{$smarty.section.customer.index} id: {$custid[customer]}<br />\n{/section}\nThere are {$smarty.section.customer.loop} customers shown above.\n

The above example will output:

0 id: 1000<br />\n1 id: 1001<br />\n2 id: 1002<br />\nThere are 3 customers shown above.\n
"},{"location":"designers/language-builtin-functions/language-function-section/#show","title":".show","text":"

show is used as a parameter to section and is a boolean value. If FALSE, the section will not be displayed. If there is a {sectionelse} present, that will be alternately displayed.

Boolean $show_customer_info has been passed from the PHP application, to regulate whether this section shows.

{section name=customer loop=$customers show=$show_customer_info}\n{$smarty.section.customer.rownum} id: {$customers[customer]}<br />\n{/section}\n{if $smarty.section.customer.show}\n  the section was shown.\n{else}\n  the section was not shown.\n{/if}\n

The above example will output:

1 id: 1000<br />\n2 id: 1001<br />\n3 id: 1002<br />\nthe section was shown.\n
"},{"location":"designers/language-builtin-functions/language-function-section/#total","title":".total","text":"

total contains the number of iterations that this {section} will loop. This can be used inside or after a {section}.

{section name=customer loop=$custid step=2}\n{$smarty.section.customer.index} id: {$custid[customer]}<br />\n{/section}\n   There are {$smarty.section.customer.total} customers shown above.\n

See also {foreach}, {for}, {while} and $smarty.section.

"},{"location":"designers/language-builtin-functions/language-function-setfilter/","title":"{setfilter}","text":"

The {setfilter}...{/setfilter} block tag allows the definition of template instance's variable filters.

SYNTAX: {setfilter filter1\\|filter2\\|filter3\\....}\\...{/setfilter}

The filter can be:

  • A variable filter plugin specified by it's name.

  • A modifier specified by it's name and optional additional parameter.

{setfilter}...{/setfilter} blocks can be nested. The filter definition of inner blocks does replace the definition of the outer block.

Template instance filters run in addition to other modifiers and filters. They run in the following order: modifier, default_modifier, $escape_html, registered variable filters, autoloaded variable filters, template instance's variable filters. Everything after default_modifier can be disabled with the nofilter flag.

Note

The setting of template instance filters does not affect the output of included subtemplates.

"},{"location":"designers/language-builtin-functions/language-function-setfilter/#examples","title":"Examples","text":"
<script>\n{setfilter filter1}\n{$foo} {* filter1 runs on output of $foo *}\n{setfilter filter2|mod:true}\n{$bar} {* filter2 and modifier mod runs on output of $bar *}\n{/setfilter}\n{$buh} {* filter1 runs on output of $buh *}\n{/setfilter}\n{$blar} {* no template instance filter runs on output of $blar}\n</script>\n
"},{"location":"designers/language-builtin-functions/language-function-strip/","title":"{strip}","text":"

Many times web designers run into the issue where white space and carriage returns affect the output of the rendered HTML (browser \"features\"), so you must run all your tags together in the template to get the desired results. This usually ends up in unreadable or unmanageable templates.

Anything within {strip}{/strip} tags are stripped of the extra spaces or carriage returns at the beginnings and ends of the lines before they are displayed. This way you can keep your templates readable, and not worry about extra white space causing problems.

Note

{strip}{/strip} does not affect the contents of template variables, see the strip modifier instead.

{* the following will be all run into one line upon output *}\n{strip}\n    <table>\n     <tr>\n      <td>\n       <a href=\"#\">\n        This is a test\n       </a>\n      </td>\n     </tr>\n    </table>\n{/strip}\n

The above example will output:

<table><tr><td><a href=\"#\">This is a test</a></td></tr></table>\n

Notice that in the above example, all the lines begin and end with HTML tags. Be aware that all the lines are run together. If you have plain text at the beginning or end of any line, they will be run together, and may not be desired results.

See also the strip modifier.

"},{"location":"designers/language-builtin-functions/language-function-while/","title":"{while}","text":"

{while} loops in Smarty have much the same flexibility as PHP while statements, with a few added features for the template engine. Every {while} must be paired with a matching {/while}. All PHP conditionals and functions are recognized, such as ||, or, &&, and, is_array(), etc.

The following is a list of recognized qualifiers, which must be separated from surrounding elements by spaces. Note that items listed in [brackets] are optional. PHP equivalents are shown where applicable.

"},{"location":"designers/language-builtin-functions/language-function-while/#qualifiers","title":"Qualifiers","text":"Qualifier Alternates Syntax Example Meaning PHP Equivalent == eq $a eq $b equals == != ne, neq $a neq $b not equals != > gt $a gt $b greater than > < lt $a lt $b less than < >= gte, ge $a ge $b greater than or equal >= <= lte, le $a le $b less than or equal <= === $a === 0 check for identity === ! not not $a negation (unary) ! % mod $a mod $b modulo % is [not] div by $a is not div by 4 divisible by $a % $b == 0 is [not] even $a is not even [not] an even number (unary) $a % 2 == 0 is [not] even by $a is not even by $b grouping level [not] even ($a / $b) % 2 == 0 is [not] odd $a is not odd [not] an odd number (unary) $a % 2 != 0 is [not] odd by $a is not odd by $b [not] an odd grouping ($a / $b) % 2 != 0"},{"location":"designers/language-builtin-functions/language-function-while/#examples","title":"Examples","text":"
{while $foo > 0}\n{$foo--}\n{/while}\n

The above example will count down the value of $foo until 1 is reached.

See also {foreach}, {for} and {section}.

"},{"location":"designers/language-custom-functions/","title":"Custom Functions","text":"

Smarty comes with several custom plugin functions that you can use in the templates.

  • {counter}
  • {cycle}
  • {eval}
  • {fetch}
  • {html_checkboxes}
  • {html_image}
  • {html_options}
  • {html_radios}
  • {html_select_date}
  • {html_select_time}
  • {html_table}
  • {mailto}
  • {math}
  • {textformat}
"},{"location":"designers/language-custom-functions/language-function-counter/","title":"{counter}","text":"

{counter} is used to print out a count. {counter} will remember the count on each iteration. You can adjust the number, the interval and the direction of the count, as well as determine whether to print the value. You can run multiple counters concurrently by supplying a unique name for each one. If you do not supply a name, the name \"default\" will be used.

"},{"location":"designers/language-custom-functions/language-function-counter/#attributes","title":"Attributes","text":"Attribute Name Required Description name No The name of the counter start No The initial number to start counting from (defaults to 1) skip No The interval to count by (defaults to 1) direction No The direction to count (up/down) (defaults to 'up') print No Whether or not to print the value (defaults to true) assign No the template variable the output will be assigned to

If you supply the assign attribute, the output of the {counter} function will be assigned to this template variable instead of being output to the template.

"},{"location":"designers/language-custom-functions/language-function-counter/#examples","title":"Examples","text":"
{* initialize the count *}\n{counter start=0 skip=2}<br />\n{counter}<br />\n{counter}<br />\n{counter}<br />\n

this will output:

0<br />\n2<br />\n4<br />\n6<br />\n
"},{"location":"designers/language-custom-functions/language-function-cycle/","title":"{cycle}","text":"

{cycle} is used to alternate a set of values. This makes it easy to for example, alternate between two or more colors in a table, or cycle through an array of values.

"},{"location":"designers/language-custom-functions/language-function-cycle/#attributes","title":"Attributes","text":"Attribute Name Required Description name No The name of the cycle values Yes The values to cycle through, either a comma delimited list (see delimiter attribute), or an array of values print No Whether to print the value or not (defaults to true) advance No Whether or not to advance to the next value (defaults to true) delimiter No The delimiter to use in the values attribute (defaults to ',') assign No The template variable the output will be assigned to reset No The cycle will be set to the first value and not advanced (defaults to false)
  • You can {cycle} through more than one set of values in a template by supplying a name attribute. Give each {cycle} a unique name.

  • You can force the current value not to print with the print attribute set to FALSE. This would be useful for silently skipping a value.

  • The advance attribute is used to repeat a value. When set to FALSE, the next call to {cycle} will print the same value.

  • If you supply the assign attribute, the output of the {cycle} function will be assigned to a template variable instead of being output to the template.

"},{"location":"designers/language-custom-functions/language-function-cycle/#examples","title":"Examples","text":"
{section name=rows loop=$data}\n    <tr class=\"{cycle values=\"odd,even\"}\">\n       <td>{$data[rows]}</td>\n    </tr>\n{/section}\n

The above template would output:

    <tr class=\"odd\">\n<td>1</td>\n</tr>\n<tr class=\"even\">\n<td>2</td>\n</tr>\n<tr class=\"odd\">\n<td>3</td>\n</tr>\n
"},{"location":"designers/language-custom-functions/language-function-debug/","title":"{debug}","text":"

{debug} dumps the debug console to the page. This works regardless of the debug settings in the php script. Since this gets executed at runtime, this is only able to show the assigned variables; not the templates that are in use. However, you can see all the currently available variables within the scope of a template.

Attribute Name Required Description output No output type, html or javascript (defaults to 'javascript')

See also the debugging console page.

"},{"location":"designers/language-custom-functions/language-function-eval/","title":"{eval}","text":"

{eval} is used to evaluate a variable as a template. This can be used for things like embedding template tags/variables into variables or tags/variables into config file variables.

"},{"location":"designers/language-custom-functions/language-function-eval/#attributes","title":"Attributes","text":"Attribute Name Required Description var Yes Variable (or string) to evaluate assign No The template variable the output will be assigned to

If you supply the assign attribute, the output of the {eval} function will be assigned to this template variable instead of being output to the template.

Note

  • Evaluated variables are treated the same as templates. They follow the same escapement and security features just as if they were templates.

  • Evaluated variables are compiled on every invocation, the compiled versions are not saved! However, if you have caching enabled, the output will be cached with the rest of the template.

  • If the content to evaluate doesn't change often, or is used repeatedly, consider using {include file=\"string:{$template_code}\"} instead. This may cache the compiled state and thus doesn't have to run the (comparably slow) compiler on every invocation.

"},{"location":"designers/language-custom-functions/language-function-eval/#examples","title":"Examples","text":"

The contents of the config file, setup.conf.

emphstart = <strong>\nemphend = </strong>\ntitle = Welcome to {$company}'s home page!\nErrorCity = You must supply a {#emphstart#}city{#emphend#}.\nErrorState = You must supply a {#emphstart#}state{#emphend#}.\n

Where the template is:

{config_load file='setup.conf'}\n{eval var=$foo}\n{eval var=#title#}\n{eval var=#ErrorCity#}\n{eval var=#ErrorState# assign='state_error'}\n{$state_error}\n

The above template will output:

This is the contents of foo.\nWelcome to Foobar Pub & Grill's home page!\nYou must supply a <strong>city</strong>.\nYou must supply a <strong>state</strong>.\n

This outputs the server name (in uppercase) and IP. The assigned variable $str could be from a database query.

<?php\n$str = 'The server name is {$smarty.server.SERVER_NAME|upper} '\n.'at {$smarty.server.SERVER_ADDR}';\n$smarty->assign('foo',$str);\n

Where the template is:

{eval var=$foo}\n
"},{"location":"designers/language-custom-functions/language-function-fetch/","title":"{fetch}","text":"

{fetch} is used to retrieve files from the local file system, http, or ftp and display the contents.

"},{"location":"designers/language-custom-functions/language-function-fetch/#attributes","title":"Attributes","text":"Attribute Required Description file Yes The file, http or ftp site to fetch assign No The template variable the output will be assigned to
  • If the file name begins with http://, the website page will be fetched and displayed.

    Note

    This will not support http redirects, be sure to include a trailing slash on your web page fetches where necessary.

  • If the file name begins with ftp://, the file will be downloaded from the ftp server and displayed.

  • For local files, either a full system file path must be given, or a path relative to the executed php script.

    Note

    If security is enabled, and you are fetching a file from the local file system, {fetch} will only allow files from within the $secure_dir path of the security policy. See the Security section for details.

  • If the assign attribute is set, the output of the {fetch} function will be assigned to this template variable instead of being output to the template.

"},{"location":"designers/language-custom-functions/language-function-fetch/#examples","title":"Examples","text":"
{* include some javascript in your template *}\n{fetch file='/export/httpd/www.example.com/docs/navbar.js'}\n{* embed some weather text in your template from another web site *}\n{fetch file='http://www.myweather.com/68502/'}\n{* fetch a news headline file via ftp *}\n{fetch file='ftp://user:password@ftp.example.com/path/to/currentheadlines.txt'}\n{* as above but with variables *}\n{fetch file=\"ftp://`$user`:`$password`@`$server`/`$path`\"}\n{* assign the fetched contents to a template variable *}\n{fetch file='http://www.myweather.com/68502/' assign='weather'}\n{if $weather ne ''}\n  <div id=\"weather\">{$weather}</div>\n{/if}\n

See also {capture}, {eval}, {assign} and fetch().

"},{"location":"designers/language-custom-functions/language-function-html-checkboxes/","title":"{html_checkboxes}","text":"

{html_checkboxes} is a custom function that creates an html checkbox group with provided data. It takes care of which item(s) are selected by default as well.

"},{"location":"designers/language-custom-functions/language-function-html-checkboxes/#attributes","title":"Attributes","text":"Attribute Name Required Description name No Name of checkbox list (defaults to 'checkbox') values Yes, unless using options attribute An array of values for checkbox buttons output Yes, unless using options attribute An array of output for checkbox buttons selected No The selected checkbox element(s) as a string or array options Yes, unless using values and output An associative array of values and output separator No String of text to separate each checkbox item assign No Assign checkbox tags to an array instead of output labels No Add <label>-tags to the output (defaults to true) label_ids No Add id-attributes to <label> and <input> to the output (defaults to false) escape No Escape the output / content (values are always escaped) (defaults to true) strict No Will make the \"extra\" attributes disabled and readonly only be set, if they were supplied with either boolean TRUE or string \"disabled\" and \"readonly\" respectively (defaults to false)
  • Required attributes are values and output, unless you use options instead.

  • All output is XHTML compliant.

  • All parameters that are not in the list above are printed as name/value-pairs inside each of the created <input>-tags.

"},{"location":"designers/language-custom-functions/language-function-html-checkboxes/#examples","title":"Examples","text":"
<?php\n$smarty->assign('cust_ids', array(1000,1001,1002,1003));\n$smarty->assign('cust_names', array(\n'Joe Schmoe',\n'Jack Smith',\n'Jane Johnson',\n'Charlie Brown')\n);\n$smarty->assign('customer_id', 1001);\n

where template is

{html_checkboxes name='id' values=$cust_ids output=$cust_names selected=$customer_id  separator='<br />'}\n

or where PHP code is:

<?php\n$smarty->assign(\n'cust_checkboxes', \n[\n1000 => 'Joe Schmoe',\n1001 => 'Jack Smith',\n1002 => 'Jane Johnson',\n1003 => 'Charlie Brown',\n]\n);\n$smarty->assign('customer_id', 1001);\n

and the template is

{html_checkboxes name='id' options=$cust_checkboxes selected=$customer_id separator='<br />'}\n

both examples will output:

<label><input type=\"checkbox\" name=\"id[]\" value=\"1000\" />Joe Schmoe</label><br />\n<label><input type=\"checkbox\" name=\"id[]\" value=\"1001\" checked=\"checked\" />Jack Smith</label>\n<br />\n<label><input type=\"checkbox\" name=\"id[]\" value=\"1002\" />Jane Johnson</label><br />\n<label><input type=\"checkbox\" name=\"id[]\" value=\"1003\" />Charlie Brown</label><br />\n
<?php\n$sql = 'select type_id, types from contact_types order by type';\n$smarty->assign('contact_types',$db->getAssoc($sql));\n$sql = 'select contact_id, contact_type_id, contact '\n.'from contacts where contact_id=12';\n$smarty->assign('contact',$db->getRow($sql));\n

The results of the database queries above would be output with.

{html_checkboxes name='contact_type_id' options=$contact_types selected=$contact.contact_type_id separator='<br />'}\n

See also {html_radios} and {html_options}

"},{"location":"designers/language-custom-functions/language-function-html-image/","title":"{html_image}","text":"

{html_image} is a custom function that generates an HTML <img> tag. The height and width are automatically calculated from the image file if they are not supplied.

"},{"location":"designers/language-custom-functions/language-function-html-image/#attributes","title":"Attributes","text":"Attribute Name Required Description file Yes name/path to image height No Height to display image (defaults to actual image height) width No Width to display image (defaults to actual image width) basedir no Directory to base relative paths from (defaults to web server doc root) alt no Alternative description of the image href no href value to link the image to path_prefix no Prefix for output path
  • basedir is the base directory that relative image paths are based from. If not given, the web server's document root $_ENV['DOCUMENT_ROOT'] is used as the base. If security is enabled, then the image must be located in the $secure_dir path of the security policy. See the Security section for details.

  • href is the href value to link the image to. If link is supplied, an <a href=\"LINKVALUE\"><a> tag is placed around the image tag.

  • path_prefix is an optional prefix string you can give the output path. This is useful if you want to supply a different server name for the image.

  • All parameters that are not in the list above are printed as name/value-pairs inside the created <img> tag.

Note

{html_image} requires a hit to the disk to read the image and calculate the height and width. If you don't use template caching, it is generally better to avoid {html_image} and leave image tags static for optimal performance.

"},{"location":"designers/language-custom-functions/language-function-html-image/#examples","title":"Examples","text":"
{html_image file='pumpkin.jpg'}\n{html_image file='/path/from/docroot/pumpkin.jpg'}\n{html_image file='../path/relative/to/currdir/pumpkin.jpg'}\n

Example output of the above template would be:

<img src=\"pumpkin.jpg\" alt=\"\" width=\"44\" height=\"68\" />\n<img src=\"/path/from/docroot/pumpkin.jpg\" alt=\"\" width=\"44\" height=\"68\" />\n<img src=\"../path/relative/to/currdir/pumpkin.jpg\" alt=\"\" width=\"44\" height=\"68\" />\n
"},{"location":"designers/language-custom-functions/language-function-html-options/","title":"{html_options}","text":"

{html_options} is a custom function that creates the html <select><option> group with the assigned data. It takes care of which item(s) are selected by default as well.

"},{"location":"designers/language-custom-functions/language-function-html-options/#attributes","title":"Attributes","text":"Attribute Name Required Description values Yes, unless using options attribute An array of values for dropdown output Yes, unless using options attribute An array of output for dropdown selected No The selected option element(s) as a string or array options Yes, unless using values and output An associative array of values and output name No Name of select group strict No Will make the \"extra\" attributes disabled and readonly only be set, if they were supplied with either boolean TRUE or string \"disabled\" and \"readonly\" respectively (defaults to false)
  • Required attributes are values and output, unless you use the combined options instead.

  • If the optional name attribute is given, the <select></select> tags are created, otherwise ONLY the <option> list is generated.

  • If a given value is an array, it will treat it as an html <optgroup>, and display the groups. Recursion is supported with <optgroup>.

  • All parameters that are not in the list above are printed as name/value-pairs inside the <select> tag. They are ignored if the optional name is not given.

  • All output is XHTML compliant.

"},{"location":"designers/language-custom-functions/language-function-html-options/#examples","title":"Examples","text":"
<?php\n$smarty->assign('myOptions', [\n1800 => 'Joe Schmoe',\n9904 => 'Jack Smith',\n2003 => 'Charlie Brown']\n);\n$smarty->assign('mySelect', 9904);\n

The following template will generate a drop-down list. Note the presence of the name attribute which creates the <select> tags.

{html_options name=foo options=$myOptions selected=$mySelect}\n

Output of the above example would be:

<select name=\"foo\">\n<option value=\"1800\">Joe Schmoe</option>\n<option value=\"9904\" selected=\"selected\">Jack Smith</option>\n<option value=\"2003\">Charlie Brown</option>\n</select>   \n
<?php\n$smarty->assign('cust_ids', [56,92,13]);\n$smarty->assign('cust_names', [\n'Joe Schmoe',\n'Jane Johnson',\n'Charlie Brown']);\n$smarty->assign('customer_id', 92);\n

The above arrays would be output with the following template (note the use of the php count() function as a modifier to set the select size).

<select name=\"customer_id\" size=\"{$cust_names|@count}\">\n{html_options values=$cust_ids output=$cust_names selected=$customer_id}\n</select>\n

The above example would output:

<select name=\"customer_id\" size=\"3\">\n<option value=\"56\">Joe Schmoe</option>\n<option value=\"92\" selected=\"selected\">Jane Johnson</option>\n<option value=\"13\">Charlie Brown</option>\n</select>\n
<?php\n$sql = 'select type_id, types from contact_types order by type';\n$smarty->assign('contact_types',$db->getAssoc($sql));\n$sql = 'select contact_id, name, email, contact_type_id\n        from contacts where contact_id='.$contact_id;\n$smarty->assign('contact',$db->getRow($sql));\n

Where a template could be as follows. Note the use of the truncate modifier.

<select name=\"type_id\">\n    <option value='null'>-- none --</option>\n{html_options options=$contact_types|truncate:20 selected=$contact.type_id}\n</select>\n
<?php\n$arr['Sport'] = array(6 => 'Golf', 9 => 'Cricket',7 => 'Swim');\n$arr['Rest']  = array(3 => 'Sauna',1 => 'Massage');\n$smarty->assign('lookups', $arr);\n$smarty->assign('fav', 7);\n

The script above and the following template

{html_options name=foo options=$lookups selected=$fav}\n

would output:

<select name=\"foo\">\n<optgroup label=\"Sport\">\n<option value=\"6\">Golf</option>\n<option value=\"9\">Cricket</option>\n<option value=\"7\" selected=\"selected\">Swim</option>\n</optgroup>\n<optgroup label=\"Rest\">\n<option value=\"3\">Sauna</option>\n<option value=\"1\">Massage</option>\n</optgroup>\n</select>\n

See also {html_checkboxes} and {html_radios}

"},{"location":"designers/language-custom-functions/language-function-html-radios/","title":"{html_radios}","text":"

{html_radios} is a custom function that creates an HTML radio button group. It also takes care of which item is selected by default as well.

"},{"location":"designers/language-custom-functions/language-function-html-radios/#attributes","title":"Attributes","text":"Attribute Name Required Description name No Name of radio list values Yes, unless using options attribute An array of values for radio buttons output Yes, unless using options attribute An array of output for radio buttons selected No The selected radio element options Yes, unless using values and output An associative array of values and output separator No String of text to separate each radio item assign No Assign radio tags to an array instead of output labels No Add -tags to the output (defaults to true) label_ids No Add id-attributes to <label> and <input> to the output (defaults to false) escape No Escape the output / content (values are always escaped) (defaults to true) strict No Will make the \"extra\" attributes disabled and readonly only be set, if they were supplied with either boolean TRUE or string \"disabled\" and \"readonly\" respectively (defaults to false)
  • Required attributes are values and output, unless you use options instead.

  • All output is XHTML compliant.

  • All parameters that are not in the list above are output as name/value-pairs inside each of the created <input>-tags.

"},{"location":"designers/language-custom-functions/language-function-html-radios/#examples","title":"Examples","text":"
<?php\n$smarty->assign('cust_ids', array(1000,1001,1002,1003));\n$smarty->assign('cust_names', array(\n'Joe Schmoe',\n'Jack Smith',\n'Jane Johnson',\n'Charlie Brown')\n);\n$smarty->assign('customer_id', 1001);\n

Where template is:

{html_radios name='id' values=$cust_ids output=$cust_names\nselected=$customer_id separator='<br />'}\n
<?php\n$smarty->assign('cust_radios', array(\n1000 => 'Joe Schmoe',\n1001 => 'Jack Smith',\n1002 => 'Jane Johnson',\n1003 => 'Charlie Brown'));\n$smarty->assign('customer_id', 1001);\n

Where template is:

{html_radios name='id' options=$cust_radios\nselected=$customer_id separator='<br />'}\n

Both examples will output:

<label><input type=\"radio\" name=\"id\" value=\"1000\" />Joe Schmoe</label><br />\n<label><input type=\"radio\" name=\"id\" value=\"1001\" checked=\"checked\" />Jack Smith</label><br />\n<label><input type=\"radio\" name=\"id\" value=\"1002\" />Jane Johnson</label><br />\n<label><input type=\"radio\" name=\"id\" value=\"1003\" />Charlie Brown</label><br />\n
<?php\n$sql = 'select type_id, types from contact_types order by type';\n$smarty->assign('contact_types',$db->getAssoc($sql));\n$sql = 'select contact_id, name, email, contact_type_id '\n.'from contacts where contact_id='.$contact_id;\n$smarty->assign('contact',$db->getRow($sql));\n

The variable assigned from the database above would be output with the template:

{html_radios name='contact_type_id' options=$contact_types\nselected=$contact.contact_type_id separator='<br />'}\n

See also {html_checkboxes} and {html_options}

"},{"location":"designers/language-custom-functions/language-function-html-select-date/","title":"{html_select_date}","text":"

{html_select_date} is a custom function that creates date dropdowns. It can display any or all of: year, month, and day. All parameters that are not in the list below are printed as name/value-pairs inside the <select> tags of day, month and year.

"},{"location":"designers/language-custom-functions/language-function-html-select-date/#attributes","title":"Attributes","text":"Attribute Name Default Description prefix Date_ What to prefix the var name with time What date/time to pre-select. Accepts timestamps, DateTime objects or any string parseable by strtotime(). If an array is given, the attributes field_array and prefix are used to identify the array elements to extract year, month and day from. Omitting this parameter or supplying a falsy value will select the current date. To prevent date selection, pass in NULL. start_year current year The first year in the dropdown, either year number, or relative to current year (+/- N) end_year same as start_year The last year in the dropdown, either year number, or relative to current year (+/- N) display_days TRUE Whether to display days or not display_months TRUE Whether to display months or not display_years TRUE Whether to display years or not month_names List of strings to display for months. array(1 => 'Jan', ..., 12 => 'Dec') month_format \\%B What format the month should be in (strftime) day_format \\%02d What format the day output should be in (sprintf) day_value_format \\%d What format the day value should be in (sprintf) year_as_text FALSE Whether or not to display the year as text reverse_years FALSE Display years in reverse order field_array If a name is given, the select boxes will be drawn such that the results will be returned to PHP in the form of name[Day], name[Year], name[Month]. day_size Adds size attribute to select tag if given month_size Adds size attribute to select tag if given year_size Adds size attribute to select tag if given all_extra Adds extra attributes to all select/input tags if given day_extra Adds extra attributes to select/input tags if given month_extra Adds extra attributes to select/input tags if given year_extra Adds extra attributes to select/input tags if given all_id Adds id-attribute to all select/input tags if given day_id Adds id-attribute to select/input tags if given month_id Adds id-attribute to select/input tags if given year_id Adds id-attribute to select/input tags if given field_order MDY The order in which to display the fields field_separator \\n String printed between different fields month_value_format \\%m strftime() format of the month values, default is %m for month numbers. all_empty If supplied then the first element of any select-box has this value as it's label and \"\" as it's value. This is useful to make the select-boxes read \"Please select\" for example. year_empty If supplied then the first element of the year's select-box has this value as it's label and \"\" as it's value. This is useful to make the select-box read \"Please select a year\" for example. Note that you can use values like \"-MM-DD\" as time-attribute to indicate an unselected year. month_empty If supplied then the first element of the month's select-box has this value as it's label and \"\" as it's value. . Note that you can use values like \"YYYY--DD\" as time-attribute to indicate an unselected month. day_empty If supplied then the first element of the day's select-box has this value as it's label and \"\" as it's value. Note that you can use values like \"YYYY-MM-\" as time-attribute to indicate an unselected day.

Note

There is an useful php function on the date tips page for converting {html_select_date} form values to a timestamp.

"},{"location":"designers/language-custom-functions/language-function-html-select-date/#exaples","title":"Exaples","text":"

Template code

{html_select_date}\n

This will output:

<select name=\"Date_Month\">\n<option value=\"1\">January</option>\n<option value=\"2\">February</option>\n<option value=\"3\">March</option>\n      ..... snipped .....\n    <option value=\"10\">October</option>\n<option value=\"11\">November</option>\n<option value=\"12\" selected=\"selected\">December</option>\n</select>\n<select name=\"Date_Day\">\n<option value=\"1\">01</option>\n<option value=\"2\">02</option>\n<option value=\"3\">03</option>\n      ..... snipped .....\n    <option value=\"11\">11</option>\n<option value=\"12\">12</option>\n<option value=\"13\" selected=\"selected\">13</option>\n<option value=\"14\">14</option>\n<option value=\"15\">15</option>\n      ..... snipped .....\n    <option value=\"29\">29</option>\n<option value=\"30\">30</option>\n<option value=\"31\">31</option>\n</select>\n<select name=\"Date_Year\">\n<option value=\"2006\" selected=\"selected\">2006</option>\n</select>\n
{* start and end year can be relative to current year *}\n{html_select_date prefix='StartDate' time=$time start_year='-5'\nend_year='+1' display_days=false}\n

With 2000 as the current year the output:

<select name=\"StartDateMonth\">\n<option value=\"1\">January</option>\n<option value=\"2\">February</option>\n    .... snipped ....\n    <option value=\"11\">November</option>\n<option value=\"12\" selected=\"selected\">December</option>\n</select>\n<select name=\"StartDateYear\">\n<option value=\"1995\">1995</option>\n    .... snipped ....\n    <option value=\"1999\">1999</option>\n<option value=\"2000\" selected=\"selected\">2000</option>\n<option value=\"2001\">2001</option>\n</select>\n

See also {html_select_time}, date_format, $smarty.now and the date tips page.

"},{"location":"designers/language-custom-functions/language-function-html-select-time/","title":"{html_select_time}","text":"

{html_select_time} is a custom function that creates time dropdowns for you. It can display any or all of: hour, minute, second and meridian.

The time attribute can have different formats. It can be a unique timestamp, a string of the format YYYYMMDDHHMMSS or a string that is parseable by PHP's strtotime().

"},{"location":"designers/language-custom-functions/language-function-html-select-time/#attributes","title":"Attributes","text":"Attribute Name Default Description prefix Time_ What to prefix the var name with time current timestamp What date/time to pre-select. Accepts timestamp, DateTime, mysql timestamp or any string parsable by strtotime(). If an array is given, the attributes field_array and prefix are used to identify the array elements to extract hour, minute, second and meridian from. display_hours TRUE Whether or not to display hours display_minutes TRUE Whether or not to display minutes display_seconds TRUE Whether or not to display seconds display_meridian TRUE Whether or not to display meridian (am/pm) use_24_hours TRUE Whether or not to use 24 hour clock minute_interval 1 Number interval in minute dropdown second_interval 1 Number interval in second dropdown hour_format \\%02d What format the hour label should be in (sprintf) hour_value_format \\%20d What format the hour value should be in (sprintf) minute_format \\%02d What format the minute label should be in (sprintf) minute_value_format \\%20d What format the minute value should be in (sprintf) second_format \\%02d What format the second label should be in (sprintf) second_value_format \\%20d What format the second value should be in (sprintf) field_array n/a Outputs values to array of this name all_extra null Adds extra attributes to select/input tags if given hour_extra null Adds extra attributes to select/input tags if given minute_extra null Adds extra attributes to select/input tags if given second_extra null Adds extra attributes to select/input tags if given meridian_extra null Adds extra attributes to select/input tags if given field_separator \\n String printed between different fields option_separator \\n String printed between different options of a field all_id null Adds id-attribute to all select/input tags if given hour_id null Adds id-attribute to select/input tags if given minute_id null Adds id-attribute to select/input tags if given second_id null Adds id-attribute to select/input tags if given meridian_id null Adds id-attribute to select/input tags if given all_empty null If supplied then the first element of any select-box has this value as it's label and \"\" as it's value. This is useful to make the select-boxes read \"Please select\" for example. hour_empty null If supplied then the first element of the hour's select-box has this value as it's label and \"\" as it's value. This is useful to make the select-box read \"Please select an hour\" for example. minute_empty null If supplied then the first element of the minute's select-box has this value as it's label and \"\" as it's value. This is useful to make the select-box read \"Please select an minute\" for example. second_empty null If supplied then the first element of the second's select-box has this value as it's label and \"\" as it's value. This is useful to make the select-box read \"Please select an second\" for example. meridian_empty null If supplied then the first element of the meridian's select-box has this value as it's label and \"\" as it's value. This is useful to make the select-box read \"Please select an meridian\" for example."},{"location":"designers/language-custom-functions/language-function-html-select-time/#examples","title":"Examples","text":"
{html_select_time use_24_hours=true}\n

At 9:20 and 23 seconds in the morning the template above would output:

<select name=\"Time_Hour\">\n<option value=\"00\">00</option>\n<option value=\"01\">01</option>\n    ... snipped ....\n    <option value=\"08\">08</option>\n<option value=\"09\" selected>09</option>\n<option value=\"10\">10</option>\n    ... snipped ....\n    <option value=\"22\">22</option>\n<option value=\"23\">23</option>\n</select>\n<select name=\"Time_Minute\">\n<option value=\"00\">00</option>\n<option value=\"01\">01</option>\n    ... snipped ....\n    <option value=\"19\">19</option>\n<option value=\"20\" selected>20</option>\n<option value=\"21\">21</option>\n    ... snipped ....\n    <option value=\"58\">58</option>\n<option value=\"59\">59</option>\n</select>\n<select name=\"Time_Second\">\n<option value=\"00\">00</option>\n<option value=\"01\">01</option>\n    ... snipped ....\n    <option value=\"22\">22</option>\n<option value=\"23\" selected>23</option>\n<option value=\"24\">24</option>\n    ... snipped ....\n    <option value=\"58\">58</option>\n<option value=\"59\">59</option>\n</select>\n<select name=\"Time_Meridian\">\n<option value=\"am\" selected>AM</option>\n<option value=\"pm\">PM</option>\n</select>\n

See also $smarty.now, {html_select_date} and the date tips page.

"},{"location":"designers/language-custom-functions/language-function-html-table/","title":"{html_table}","text":"

{html_table} is a custom function that dumps an array of data into an HTML <table>.

"},{"location":"designers/language-custom-functions/language-function-html-table/#attributes","title":"Attributes","text":"Attribute Name Required Description loop Yes Array of data to loop through cols No Number of columns in the table or a comma-separated list of column heading names or an array of column heading names.if the cols-attribute is empty, but rows are given, then the number of cols is computed by the number of rows and the number of elements to display to be just enough cols to display all elements. If both, rows and cols, are omitted cols defaults to 3. if given as a list or array, the number of columns is computed from the number of elements in the list or array. rows No Number of rows in the table. if the rows-attribute is empty, but cols are given, then the number of rows is computed by the number of cols and the number of elements to display to be just enough rows to display all elements. inner No Direction of consecutive elements in the loop-array to be rendered. cols means elements are displayed col-by-col. rows means elements are displayed row-by-row. caption No Text to be used for the <caption> element of the table table_attr No Attributes for <table> tag (defaults to 'border=\"1\"') th_attr No Attributes for <th> tag (arrays are cycled) tr_attr No attributes for <tr> tag (arrays are cycled) td_attr No Attributes for <td> tag (arrays are cycled) trailpad No Value to pad the trailing cells on last row with (if any) (defaults to '\u00a0') hdir No Direction of each row to be rendered. possible values: right (left-to-right), and left (right-to-left) (defaults to 'right') vdir No Direction of each column to be rendered. possible values: down (top-to-bottom), up (bottom-to-top) (defaults to 'down')
  • The cols attribute determines how many columns will be in the table.

  • The table_attr, tr_attr and td_attr values determine the attributes given to the <table>, <tr> and <td> tags.

  • If tr_attr or td_attr are arrays, they will be cycled through.

  • trailpad is the value put into the trailing cells on the last table row if there are any present.

"},{"location":"designers/language-custom-functions/language-function-html-table/#examples","title":"Examples","text":"
<?php\n$smarty->assign( 'data', array(1,2,3,4,5,6,7,8,9) );\n$smarty->assign( 'tr', array('bgcolor=\"#eeeeee\"','bgcolor=\"#dddddd\"') );\n$smarty->display('index.tpl');\n

The variables assigned from php could be displayed as these three examples demonstrate. Each example shows the template followed by output.

Example 1

{html_table loop=$data}\n
<table border=\"1\">\n<tbody>\n<tr><td>1</td><td>2</td><td>3</td></tr>\n<tr><td>4</td><td>5</td><td>6</td></tr>\n<tr><td>7</td><td>8</td><td>9</td></tr>\n</tbody>\n</table>\n

Example 2

{html_table loop=$data cols=4 table_attr='border=\"0\"'}\n
<table border=\"0\">\n<tbody>\n<tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>\n<tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>\n<tr><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>\n</tbody>\n</table>\n

Example 3

{html_table loop=$data cols=\"first,second,third,fourth\" tr_attr=$tr}\n
<table border=\"1\">\n<thead>\n<tr>\n<th>first</th><th>second</th><th>third</th><th>fourth</th>\n</tr>\n</thead>\n<tbody>\n<tr bgcolor=\"#eeeeee\"><td>1</td><td>2</td><td>3</td><td>4</td></tr>\n<tr bgcolor=\"#dddddd\"><td>5</td><td>6</td><td>7</td><td>8</td></tr>\n<tr bgcolor=\"#eeeeee\"><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>\n</tbody>\n</table>\n

"},{"location":"designers/language-custom-functions/language-function-mailto/","title":"{mailto}","text":"

{mailto} automates the creation of a mailto: anchor links and optionally encodes them. Encoding emails makes it more difficult for web spiders to lift email addresses off of a site.

"},{"location":"designers/language-custom-functions/language-function-mailto/#attributes","title":"Attributes","text":"Attribute Name Required Description address Yes The e-mail address text No The text to display, default is the e-mail address encode No How to encode the e-mail. Can be one of none, hex, javascript or javascript_charcode. cc No Email addresses to carbon copy, separate entries by a comma. bcc No Email addresses to blind carbon copy, separate entries by a comma subject No Email subject newsgroups No Newsgroups to post to, separate entries by a comma. followupto No Addresses to follow up to, separate entries by a comma. extra No Any extra information you want passed to the link, such as style sheet classes

Note

Javascript is probably the most thorough form of encoding, although you can use hex encoding too.

"},{"location":"designers/language-custom-functions/language-function-mailto/#examples","title":"Examples","text":"
{mailto address=\"me@example.com\"}\n<a href=\"mailto:me@example.com\" >me@example.com</a>\n{mailto address=\"me@example.com\" text=\"send me some mail\"}\n<a href=\"mailto:me@example.com\" >send me some mail</a>\n{mailto address=\"me@example.com\" encode=\"javascript\"}\n    <script>\n   eval(unescape('%64%6f% ... snipped ...%61%3e%27%29%3b'))\n</script>\n{mailto address=\"me@example.com\" encode=\"hex\"}\n<a href=\"mailto:%6d%65.. snipped..3%6f%6d\">&#x6d;&..snipped...#x6f;&#x6d;</a>\n{mailto address=\"me@example.com\" subject=\"Hello to you!\"}\n<a href=\"mailto:me@example.com?subject=Hello%20to%20you%21\" >me@example.com</a>\n{mailto address=\"me@example.com\" cc=\"you@example.com,they@example.com\"}\n<a href=\"mailto:me@example.com?cc=you@example.com,they@example.com\" >me@example.com</a>\n{mailto address=\"me@example.com\" extra='class=\"email\"'}\n<a href=\"mailto:me@example.com\" class=\"email\">me@example.com</a>\n{mailto address=\"me@example.com\" encode=\"javascript_charcode\"}\n    <script>\n{document.write(String.fromCharCode(60,97, ... snipped ....60,47,97,62))}\n</script>\n

See also escape, {textformat} and obfuscating email addresses.

"},{"location":"designers/language-custom-functions/language-function-math/","title":"{math}","text":"

{math} allows the template designer to do math equations in the template.

"},{"location":"designers/language-custom-functions/language-function-math/#attributes","title":"Attributes","text":"Attribute Name Required Description equation Yes The equation to execute format No The format of the result (sprintf) var Yes Equation variable value assign No Template variable the output will be assigned to [var ...] Yes Equation variable value
  • Any numeric template variables may be used in the equations, and the result is printed in place of the tag.

  • The variables used in the equation are passed as parameters, which can be template variables or static values.

  • +, -, /, *, abs, ceil, cos, exp, floor, log, log10, max, min, pi, pow, rand, round, sin, sqrt, srans and tan are all valid operators. Check the PHP documentation for further information on these math functions.

  • If you supply the assign attribute, the output of the {math} function will be assigned to this template variable instead of being output to the template.

Note

{math} is an expensive function in performance due to its use of the php eval() function. Doing the math in PHP is much more efficient, so whenever possible do the math calculations in the script and assign() the results to the template. Definitely avoid repetitive {math} function calls, eg within {section} loops.

"},{"location":"designers/language-custom-functions/language-function-math/#examples","title":"Examples","text":"

Example 1

{* $height=4, $width=5 *}\n{math equation=\"x + y\" x=$height y=$width}\n

The above example will output:

9\n

Example 2

{* $row_height = 10, $row_width = 20, #col_div# = 2, assigned in template *}\n{math equation=\"height * width / division\"\nheight=$row_height\nwidth=$row_width\ndivision=#col_div#}\n

The above example will output:

100\n

Example 3

{* you can use parenthesis *}\n{math equation=\"(( x + y ) / z )\" x=2 y=10 z=2}\n

The above example will output:

6\n

Example 4

{* you can supply a format parameter in sprintf format *}\n{math equation=\"x + y\" x=4.4444 y=5.0000 format=\"%.2f\"}\n

The above example will output:

9.44\n

"},{"location":"designers/language-custom-functions/language-function-textformat/","title":"{textformat}","text":"

{textformat} is a block function used to format text. It basically cleans up spaces and special characters, and formats paragraphs by wrapping at a boundary and indenting lines.

You can set the parameters explicitly, or use a preset style. Currently, \"email\" is the only available style.

"},{"location":"designers/language-custom-functions/language-function-textformat/#attributes","title":"Attributes","text":"Attribute Name Default Description style n/a Preset style indent 0 The number of chars to indent every line indent_first 0 The number of chars to indent the first line indent_char (single space) The character (or string of chars) to indent with wrap 80 How many characters to wrap each line to wrap_char \\n The character (or string of chars) to break each line with wrap_cut FALSE If TRUE, wrap will break the line at the exact character instead of at a word boundary assign n/a The template variable the output will be assigned to"},{"location":"designers/language-custom-functions/language-function-textformat/#examples","title":"Examples","text":"
{textformat wrap=40}\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is bar.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\n{/textformat}\n

The above example will output:

This is foo. This is foo. This is foo.\nThis is foo. This is foo. This is foo.\n\nThis is bar.\n\nbar foo bar foo foo. bar foo bar foo\nfoo. bar foo bar foo foo. bar foo bar\nfoo foo. bar foo bar foo foo. bar foo\nbar foo foo. bar foo bar foo foo.\n
{textformat wrap=40 indent=4}\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is bar.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\n{/textformat}\n

The above example will output:

    This is foo. This is foo. This is\n    foo. This is foo. This is foo. This\n    is foo.\n\n    This is bar.\n\n    bar foo bar foo foo. bar foo bar foo\n    foo. bar foo bar foo foo. bar foo\n    bar foo foo. bar foo bar foo foo.\n    bar foo bar foo foo. bar foo bar\n    foo foo.\n
{textformat wrap=40 indent=4 indent_first=4}\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is bar.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\n{/textformat}\n

The above example will output:

   This is foo. This is foo. This\n   is foo. This is foo. This is foo.\n   This is foo.\n\n   This is bar.\n\n   bar foo bar foo foo. bar foo bar\n   foo foo. bar foo bar foo foo. bar\n   foo bar foo foo. bar foo bar foo\n   foo. bar foo bar foo foo. bar foo\n   bar foo foo.\n
{textformat style=\"email\"}\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is foo.\nThis is bar.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\nbar foo bar foo     foo.\n{/textformat}\n

The above example will output:

This is foo. This is foo. This is foo. This is foo. This is foo. This is\nfoo.\n\nThis is bar.\n\nbar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo\nbar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo\nfoo.\n

See also {strip} and wordwrap.

"},{"location":"designers/language-modifiers/","title":"Variable Modifiers","text":"

Variable modifiers can be applied to variables, custom functions or strings. To apply a modifier, specify the value followed by a | (pipe) and the modifier name. A modifier may accept additional parameters that affect its behavior. These parameters follow the modifier name and are separated by a : (colon). Also, all php-functions can be used as modifiers implicitly (more below) and modifiers can be combined.

  • capitalize
  • cat
  • count_characters
  • count_paragraphs
  • count_sentences
  • count_words
  • date_format
  • default
  • escape
  • from_charset
  • indent
  • lower
  • nl2br
  • regex_replace
  • replace
  • spacify
  • string_format
  • strip
  • strip_tags
  • to_charset
  • truncate
  • unescape
  • upper
  • wordwrap
"},{"location":"designers/language-modifiers/#examples","title":"Examples","text":"
{* apply modifier to a variable *}\n{$title|upper}\n{* modifier with parameters *}\n{$title|truncate:40:\"...\"}\n{* apply modifier to a function parameter *}\n{html_table loop=$myvar|upper}\n{* with parameters *}\n{html_table loop=$myvar|truncate:40:\"...\"}\n{* apply modifier to literal string *}\n{\"foobar\"|upper}\n{* using date_format to format the current date *}\n{$smarty.now|date_format:\"%Y/%m/%d\"}\n{* apply modifier to a custom function *}\n{mailto|upper address=\"smarty@example.com\"}\n{* using  php's str_repeat *}\n{\"=\"|str_repeat:80}\n{* php's count *}\n{$myArray|@count}\n{* this will uppercase and truncate the whole array *}\n<select name=\"name_id\">\n{html_options output=$my_array|upper|truncate:20}\n</select>\n
  • Modifiers can be applied to any type of variables, including arrays and objects.

    Note

    The default behavior was changed with Smarty 3. In Smarty 2.x, you had to use an \"@\" symbol to apply a modifier to an array, such as {$articleTitle|@count}. With Smarty 3, the \"@\" is no longer necessary, and is ignored.

    If you want a modifier to apply to each individual item of an array, you will either need to loop the array in the template, or provide for this functionality inside your modifier function.

    Note

    Second, in Smarty 2.x, modifiers were applied to the result of math expressions like {8+2}, meaning that {8+2|count_characters} would give 2, as 8+2=10 and 10 is two characters long. With Smarty 3, modifiers are applied to the variables or atomic expressions before executing the calculations, so since 2 is one character long, {8+2|count_characters} gives 9. To get the old result use parentheses like {(8+2)|count_characters}.

  • Custom modifiers can be registered with the registerPlugin() function.

See also registerPlugin(), combining modifiers. and extending smarty with plugins

"},{"location":"designers/language-modifiers/language-modifier-capitalize/","title":"capitalize","text":"

This is used to capitalize the first letter of all words in a variable. This is similar to the PHP ucwords() function.

"},{"location":"designers/language-modifiers/language-modifier-capitalize/#basic-usage","title":"Basic usage","text":"
{$myVar|capitalize}\n
"},{"location":"designers/language-modifiers/language-modifier-capitalize/#parameters","title":"Parameters","text":"Parameter Type Required Description 1 boolean No This determines whether or not words with digits will be uppercased 2 boolean No This determines whether or not Capital letters within words should be lowercased, e.g. \"aAa\" to \"Aaa\""},{"location":"designers/language-modifiers/language-modifier-capitalize/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', 'next x-men film, x3, delayed.');\n

Where the template is:

    {$articleTitle}\n{$articleTitle|capitalize}\n{$articleTitle|capitalize:true}\n

Will output:

    next x-men film, x3, delayed.\n    Next X-Men Film, x3, Delayed.\n    Next X-Men Film, X3, Delayed.\n

See also lower and upper

"},{"location":"designers/language-modifiers/language-modifier-cat/","title":"cat","text":"

This value is concatenated to the given variable.

"},{"location":"designers/language-modifiers/language-modifier-cat/#basic-usage","title":"Basic usage","text":"
{$myVar|cat:' units'}\n
"},{"location":"designers/language-modifiers/language-modifier-cat/#parameters","title":"Parameters","text":"Parameter Type Required Description 1 string No This value to concatenate to the given variable."},{"location":"designers/language-modifiers/language-modifier-cat/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', \"Psychics predict world didn't end\");\n

Where template is:

    {$articleTitle|cat:' yesterday.'}\n

Will output:

    Psychics predict world didn't end yesterday.\n
"},{"location":"designers/language-modifiers/language-modifier-count-characters/","title":"count_characters","text":"

This is used to count the number of characters in a variable.

"},{"location":"designers/language-modifiers/language-modifier-count-characters/#basic-usage","title":"Basic usage","text":"
{$myVar|count_characters}\n
"},{"location":"designers/language-modifiers/language-modifier-count-characters/#parameters","title":"Parameters","text":"Parameter Type Required Description 1 boolean No This determines whether to include whitespace characters in the count."},{"location":"designers/language-modifiers/language-modifier-count-characters/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', 'Cold Wave Linked to Temperatures.');\n

Where template is:

    {$articleTitle}\n{$articleTitle|count_characters}\n{$articleTitle|count_characters:true}\n

Will output:

    Cold Wave Linked to Temperatures.\n    29\n    33\n

See also count_words, count_sentences and count_paragraphs.

"},{"location":"designers/language-modifiers/language-modifier-count-paragraphs/","title":"count_paragraphs","text":"

This is used to count the number of paragraphs in a variable.

"},{"location":"designers/language-modifiers/language-modifier-count-paragraphs/#basic-usage","title":"Basic usage","text":"
{$myVar|count_paragraphs}\n
"},{"location":"designers/language-modifiers/language-modifier-count-paragraphs/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle',\n\"War Dims Hope for Peace. Child's Death Ruins Couple's Holiday.\\n\\n\n                     Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation.\"\n);\n

Where template is:

    {$articleTitle}\n{$articleTitle|count_paragraphs}\n

Will output:

    War Dims Hope for Peace. Child's Death Ruins Couple's Holiday.\n\n    Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation.\n    2\n

See also count_characters, count_sentences and count_words.

"},{"location":"designers/language-modifiers/language-modifier-count-sentences/","title":"count_sentences","text":"

This is used to count the number of sentences in a variable. A sentence being delimited by a dot, question- or exclamation-mark (.?!).

"},{"location":"designers/language-modifiers/language-modifier-count-sentences/#basic-usage","title":"Basic usage","text":"
{$myVar|count_sentences}\n
"},{"location":"designers/language-modifiers/language-modifier-count-sentences/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle',\n'Two Soviet Ships Collide - One Dies.\n                     Enraged Cow Injures Farmer with Axe.'\n);\n

Where template is:

    {$articleTitle}\n{$articleTitle|count_sentences}\n

Will output:

    Two Soviet Ships Collide - One Dies. Enraged Cow Injures Farmer with Axe.\n    2\n

See also count_characters, count_paragraphs and count_words.

"},{"location":"designers/language-modifiers/language-modifier-count-words/","title":"count_words","text":"

This is used to count the number of words in a variable.

"},{"location":"designers/language-modifiers/language-modifier-count-words/#basic-usage","title":"Basic usage","text":"
{$myVar|count_words}\n
"},{"location":"designers/language-modifiers/language-modifier-count-words/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');\n

Where template is:

    {$articleTitle}\n{$articleTitle|count_words}\n

This will output:

    Dealers Will Hear Car Talk at Noon.\n    7\n

See also count_characters, count_paragraphs and count_sentences.

"},{"location":"designers/language-modifiers/language-modifier-date-format/","title":"date_format","text":"

This formats a date and time into the given strftime() format. Dates can be passed to Smarty as unix timestamps, DateTime objects, mysql timestamps or any string made up of month day year, parsable by php\\'s strtotime(). Designers can then use date_format to have complete control of the formatting of the date. If the date passed to date_format is empty and a second parameter is passed, that will be used as the date to format.

"},{"location":"designers/language-modifiers/language-modifier-date-format/#basic-usage","title":"Basic usage","text":"
{$myVar|date_format:\"%Y-%m-%d\"}\n
"},{"location":"designers/language-modifiers/language-modifier-date-format/#parameters","title":"Parameters","text":"Parameter Position Type Required Default Description 1 string No %b %e, %Y This is the format for the outputted date. 2 string No n/a This is the default date if the input is empty.

Note

Since Smarty-2.6.10 numeric values passed to date_format are always (except for mysql timestamps, see below) interpreted as a unix timestamp.

Before Smarty-2.6.10 numeric strings that where also parsable by strtotime() in php (like YYYYMMDD) where sometimes (depending on the underlying implementation of strtotime()) interpreted as date strings and NOT as timestamps.

The only exception are mysql timestamps: They are also numeric only and 14 characters long (YYYYMMDDHHMMSS), mysql timestamps have precedence over unix timestamps.

Note

date_format is essentially a wrapper to PHP's strftime() function. You may have more or less conversion specifiers available depending on your system's strftime() function where PHP was compiled. Check your system\\'s manpage for a full list of valid specifiers. However, a few of the specifiers are emulated on Windows. These are: %D, %e, %h, %l, %n, %r, %R, %t, %T.

"},{"location":"designers/language-modifiers/language-modifier-date-format/#examples","title":"Examples","text":"
<?php\n$config['date'] = '%I:%M %p';\n$config['time'] = '%H:%M:%S';\n$smarty->assign('config', $config);\n$smarty->assign('yesterday', strtotime('-1 day'));\n

This template uses $smarty.now to get the current time:

{$smarty.now|date_format}\n{$smarty.now|date_format:\"%D\"}\n{$smarty.now|date_format:$config.date}\n{$yesterday|date_format}\n{$yesterday|date_format:\"%A, %B %e, %Y\"}\n{$yesterday|date_format:$config.time}\n

This above will output:

Jan 1, 2022\n01/01/22\n02:33 pm\nDec 31, 2021\nMonday, December 1, 2021\n14:33:00\n
"},{"location":"designers/language-modifiers/language-modifier-date-format/#conversion-specifiers","title":"Conversion specifiers","text":"

date_format conversion specifiers:

  • %a - abbreviated weekday name according to the current locale
  • %A - full weekday name according to the current locale
  • %b - abbreviated month name according to the current locale
  • %B - full month name according to the current locale
  • %c - preferred date and time representation for the current locale
  • %C - century number (the year divided by 100 and truncated to an integer, range 00 to 99)
  • %d - day of the month as a decimal number (range 01 to 31)
  • %D - same as %m/%d/%y
  • %e - day of the month as a decimal number, a single digit is preceded by a space (range 1 to 31)
  • %g - Week-based year within century [00,99]
  • %G - Week-based year, including the century [0000,9999]
  • %h - same as %b
  • %H - hour as a decimal number using a 24-hour clock (range 00 to 23)
  • %I - hour as a decimal number using a 12-hour clock (range 01 to 12)
  • %j - day of the year as a decimal number (range 001 to 366)
  • %k - Hour (24-hour clock) single digits are preceded by a blank. (range 0 to 23)
  • %l - hour as a decimal number using a 12-hour clock, single digits preceded by a space (range 1 to 12)
  • %m - month as a decimal number (range 01 to 12)
  • %M - minute as a decimal number
  • %n - newline character
  • %p - either 'am' or 'pm' according to the given time value, or the corresponding strings for the current locale
  • %r - time in a.m. and p.m. notation
  • %R - time in 24 hour notation
  • %S - second as a decimal number
  • %t - tab character
  • %T - current time, equal to %H:%M:%S
  • %u - weekday as a decimal number [1,7], with 1 representing Monday
  • %U - week number of the current year as a decimal number, starting with the first Sunday as the first day of the first week
  • %V - The ISO 8601:1988 week number of the current year as a decimal number, range 01 to 53, where week 1 is the first week that has at least 4 days in the current year, and with Monday as the first day of the week.
  • %w - day of the week as a decimal, Sunday being 0
  • %W - week number of the current year as a decimal number, starting with the first Monday as the first day of the first week
  • %x - preferred date representation for the current locale without the time
  • %X - preferred time representation for the current locale without the date
  • %y - year as a decimal number without a century (range 00 to 99)
  • %Y - year as a decimal number including the century
  • %Z - time zone or name or abbreviation
  • %% - a literal '%' character

See also $smarty.now, strftime(), {html_select_date} and the date tips page.

"},{"location":"designers/language-modifiers/language-modifier-default/","title":"default","text":"

This is used to set a default value for a variable. If the variable is unset or an empty string, the given default value is printed instead. Default takes the one argument.

"},{"location":"designers/language-modifiers/language-modifier-default/#basic-usage","title":"Basic usage","text":"
{$myVar|default:\"(none)\"}\n
"},{"location":"designers/language-modifiers/language-modifier-default/#parameters","title":"Parameters","text":"Parameter Type Required Default Description 1 string No empty This is the default value to output if the variable is empty."},{"location":"designers/language-modifiers/language-modifier-default/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');\n$smarty->assign('email', '');\n

Where template is:

{$articleTitle|default:'no title'}\n{$myTitle|default:'no title'}\n{$email|default:'No email address available'}\n

Will output:

Dealers Will Hear Car Talk at Noon.\nno title\nNo email address available\n

See also the default variable handling and the blank variable handling pages.

"},{"location":"designers/language-modifiers/language-modifier-escape/","title":"escape","text":"

escape is used to encode or escape a variable to html, url, single quotes, hex, hexentity, javascript and mail. By default its html.

"},{"location":"designers/language-modifiers/language-modifier-escape/#basic-usage","title":"Basic usage","text":"
{$myVar|escape}\n
"},{"location":"designers/language-modifiers/language-modifier-escape/#parameters","title":"Parameters","text":"Parameter Position Type Required Possible Values Default Description 1 string No html, htmlall, url, urlpathinfo, quotes, hex, hexentity, javascript, mail html This is the escape format to use. 2 string No ISO-8859-1, UTF-8, and any character set supported by htmlentities() UTF-8 The character set encoding passed to htmlentities() et. al. 3 boolean No FALSE TRUE Double encode entities from & to &amp; (applies to html and htmlall only)"},{"location":"designers/language-modifiers/language-modifier-escape/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle',\n\"'Stiff Opposition Expected to Casketless Funeral Plan'\"\n);\n$smarty->assign('EmailAddress','smarty@example.com');\n

These are example escape template lines followed by the output

{$articleTitle}\n'Stiff Opposition Expected to Casketless Funeral Plan'\n{$articleTitle|escape}\n&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;\n{$articleTitle|escape:'html'}    {* escapes  & \" ' < > *}\n&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;\n{$articleTitle|escape:'htmlall'} {* escapes ALL html entities *}\n&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;\n<a href=\"?title={$articleTitle|escape:'url'}\">click here</a>\n<a\nhref=\"?title=%27Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan%27\">click here</a>\n{$articleTitle|escape:'quotes'}\n\\'Stiff Opposition Expected to Casketless Funeral Plan\\'\n<a href=\"mailto:{$EmailAddress|escape:\"hex\"}\">{$EmailAddress|escape:\"hexentity\"}</a>\n{$EmailAddress|escape:'mail'}    {* this converts to email to text *}\n<a href=\"mailto:%62%6f%..snip..%65%74\">&#x62;&#x6f;&#x62..snip..&#x65;&#x74;</a>\n{'mail@example.com'|escape:'mail'}\nsmarty [AT] example [DOT] com\n{* the \"rewind\" parameter registers the current location *}\n<a href=\"$my_path?page=foo&rewind={$my_uri|escape:url}\">click here</a>\n

This snippet is useful for emails, but see also {mailto}

{* email address mangled *}\n<a href=\"mailto:{$EmailAddress|escape:'hex'}\">{$EmailAddress|escape:'mail'}</a>\n

See also escaping smarty parsing, {mailto} and the obfuscating email addresses page.

"},{"location":"designers/language-modifiers/language-modifier-from-charset/","title":"from_charset","text":"

from_charset is used to transcode a string from a given charset to the internal charset. This is the exact opposite of the to_charset modifier.

"},{"location":"designers/language-modifiers/language-modifier-from-charset/#parameters","title":"Parameters","text":"Parameter Position Type Required Possible Values Default Description 1 string No ISO-8859-1, UTF-8, and any character set supported by mb_convert_encoding() ISO-8859-1 The charset encoding the value is supposed to be decoded from

Note

Charset encoding should be handled by the application itself. This modifier should only be used in cases where the application cannot anticipate that a certain string is required in another encoding.

See also Configuring Smarty, to_charset modifier.

"},{"location":"designers/language-modifiers/language-modifier-indent/","title":"indent","text":"

This indents a string on each line, default is 4. As an optional parameter, you can specify the number of characters to indent. As an optional second parameter, you can specify the character to use to indent with. For example: use \"\\t\" for a tab.

"},{"location":"designers/language-modifiers/language-modifier-indent/#basic-usage","title":"Basic usage","text":"
{$myVar|indent:4}\n
"},{"location":"designers/language-modifiers/language-modifier-indent/#parameters","title":"Parameters","text":"Parameter Position Type Required Default Description 1 integer No 4 This determines how many characters to indent to. 2 string No (one space) This is the character used to indent with."},{"location":"designers/language-modifiers/language-modifier-indent/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle',\n'NJ judge to rule on nude beach.\nSun or rain expected today, dark tonight.\nStatistics show that teen pregnancy drops off significantly after 25.'\n);\n

Where template is:

{$articleTitle}\n{$articleTitle|indent}\n{$articleTitle|indent:10}\n{$articleTitle|indent:1:\"\\t\"}\n

Will output:

NJ judge to rule on nude beach.\nSun or rain expected today, dark tonight.\nStatistics show that teen pregnancy drops off significantly after 25.\n\n    NJ judge to rule on nude beach.\n    Sun or rain expected today, dark tonight.\n    Statistics show that teen pregnancy drops off significantly after 25.\n\n          NJ judge to rule on nude beach.\n          Sun or rain expected today, dark tonight.\n          Statistics show that teen pregnancy drops off significantly after 25.\n\n        NJ judge to rule on nude beach.\n        Sun or rain expected today, dark tonight.\n        Statistics show that teen pregnancy drops off significantly after 25.\n

See also strip, wordwrap and spacify.

"},{"location":"designers/language-modifiers/language-modifier-lower/","title":"lower","text":"

This is used to lowercase a variable. This is equivalent to the PHP strtolower() function.

"},{"location":"designers/language-modifiers/language-modifier-lower/#basic-usage","title":"Basic usage","text":"
{$myVar|lower}\n
"},{"location":"designers/language-modifiers/language-modifier-lower/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', 'Two Convicts Evade Noose, Jury Hung.');\n

Where template is:

{$articleTitle}\n{$articleTitle|lower}\n

This will output:

Two Convicts Evade Noose, Jury Hung.\ntwo convicts evade noose, jury hung.\n

See also upper and capitalize.

"},{"location":"designers/language-modifiers/language-modifier-nl2br/","title":"nl2br","text":"

All \"\\n\" line breaks will be converted to html <br /> tags in the given variable. This is equivalent to the PHP\\'s nl2br() function.

"},{"location":"designers/language-modifiers/language-modifier-nl2br/#basic-usage","title":"Basic usage","text":"
{$myVar|nl2br}\n
"},{"location":"designers/language-modifiers/language-modifier-nl2br/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle',\n\"Sun or rain expected\\ntoday, dark tonight\"\n);\n

Where the template is:

{$articleTitle|nl2br}\n

Will output:

Sun or rain expected<br />today, dark tonight\n

See also word_wrap, count_paragraphs and count_sentences.

"},{"location":"designers/language-modifiers/language-modifier-regex-replace/","title":"regex_replace","text":"

A regular expression search and replace on a variable. Use the preg_replace() syntax from the PHP manual.

"},{"location":"designers/language-modifiers/language-modifier-regex-replace/#basic-usage","title":"Basic usage","text":"
{$myVar|regex_replace:\"/foo/\":\"bar\"}\n

Note

Although Smarty supplies this regex convenience modifier, it is usually better to apply regular expressions in PHP, either via custom functions or modifiers. Regular expressions are considered application code and are not part of presentation logic.

"},{"location":"designers/language-modifiers/language-modifier-regex-replace/#parameters","title":"Parameters","text":"Parameter Position Type Required Description 1 string Yes This is the regular expression to be replaced. 2 string Yes This is the string of text to replace with."},{"location":"designers/language-modifiers/language-modifier-regex-replace/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', \"Infertility unlikely to\\nbe passed on, experts say.\");\n

Where template is:

{* replace each carriage return, tab and new line with a space *}\n{$articleTitle}\n{$articleTitle|regex_replace:\"/[\\r\\t\\n]/\":\" \"}\n

Will output:

Infertility unlikely to\nbe passed on, experts say.\nInfertility unlikely to be passed on, experts say.\n

See also replace and escape.

"},{"location":"designers/language-modifiers/language-modifier-replace/","title":"replace","text":"

A simple search and replace on a variable. This is equivalent to the PHP's str_replace() function.

"},{"location":"designers/language-modifiers/language-modifier-replace/#basic-usage","title":"Basic usage","text":"
{$myVar|replace:\"foo\":\"bar\"}\n
"},{"location":"designers/language-modifiers/language-modifier-replace/#parameters","title":"Parameters","text":"Parameter Position Type Required Description 1 string Yes This is the string of text to be replaced. 2 string Yes This is the string of text to replace with."},{"location":"designers/language-modifiers/language-modifier-replace/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', \"Child's Stool Great for Use in Garden.\");\n

Where template is:

{$articleTitle}\n{$articleTitle|replace:'Garden':'Vineyard'}\n{$articleTitle|replace:' ':'   '}\n

Will output:

Child's Stool Great for Use in Garden.\nChild's Stool Great for Use in Vineyard.\nChild's   Stool   Great   for   Use   in   Garden.\n

See also regex_replace and escape.

"},{"location":"designers/language-modifiers/language-modifier-spacify/","title":"spacify","text":"

spacify is a way to insert a space between every character of a variable. You can optionally pass a different character or string to insert.

"},{"location":"designers/language-modifiers/language-modifier-spacify/#basic-usage","title":"Basic usage","text":"
{$myVar|spacify}\n
"},{"location":"designers/language-modifiers/language-modifier-spacify/#parameters","title":"Parameters","text":"Parameter Position Type Required Default Description 1 string No one space This what gets inserted between each character of the variable."},{"location":"designers/language-modifiers/language-modifier-spacify/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', 'Something Went Wrong in Jet Crash, Experts Say.');\n

Where template is:

{$articleTitle}\n{$articleTitle|spacify}\n{$articleTitle|spacify:\"^^\"}\n

Will output:

Something Went Wrong in Jet Crash, Experts Say.\nS o m e t h i n g   W .... snip ....  s h ,   E x p e r t s   S a y .\nS^^o^^m^^e^^t^^h^^i^^n^^g^^ .... snip .... ^^e^^r^^t^^s^^ ^^S^^a^^y^^.\n

See also wordwrap and nl2br.

"},{"location":"designers/language-modifiers/language-modifier-string-format/","title":"string_format","text":"

This is a way to format strings, such as decimal numbers and such. Use the syntax for sprintf() for the formatting.

"},{"location":"designers/language-modifiers/language-modifier-string-format/#basic-usage","title":"Basic usage","text":"
{$myVar|string_format:\"%d\"}\n
"},{"location":"designers/language-modifiers/language-modifier-string-format/#parameters","title":"Parameters","text":"Parameter Position Type Required Description 1 string Yes This is what format to use. (sprintf)"},{"location":"designers/language-modifiers/language-modifier-string-format/#examples","title":"Examples","text":"
<?php\n$smarty->assign('number', 23.5787446);\n

Where template is:

{$number}\n{$number|string_format:\"%.2f\"}\n{$number|string_format:\"%d\"}\n

Will output:

23.5787446\n23.58\n23\n

See also date_format.

"},{"location":"designers/language-modifiers/language-modifier-strip-tags/","title":"strip_tags","text":"

This strips out HTML markup tags, basically anything between < and >.

"},{"location":"designers/language-modifiers/language-modifier-strip-tags/#basic-usage","title":"Basic usage","text":"
{$myVar|strip_tags}\n
"},{"location":"designers/language-modifiers/language-modifier-strip-tags/#parameters","title":"Parameters","text":"Parameter Position Type Required Default Description 1 bool No TRUE This determines whether the tags are replaced by ' ' or ''"},{"location":"designers/language-modifiers/language-modifier-strip-tags/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle',\n\"Blind Woman Gets <font face=\\\"helvetica\\\">New\nKidney</font> from Dad she Hasn't Seen in <b>years</b>.\"\n);\n

Where template is:

{$articleTitle}\n{$articleTitle|strip_tags} {* same as {$articleTitle|strip_tags:true} *}\n{$articleTitle|strip_tags:false}\n

Will output:

Blind Woman Gets <font face=\"helvetica\">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>.\nBlind Woman Gets  New Kidney  from Dad she Hasn't Seen in  years .\nBlind Woman Gets New Kidney from Dad she Hasn't Seen in years.\n

See also replace and regex_replace.

"},{"location":"designers/language-modifiers/language-modifier-strip/","title":"strip","text":"

This replaces all spaces, newlines and tabs with a single space, or with the supplied string.

"},{"location":"designers/language-modifiers/language-modifier-strip/#basic-usage","title":"Basic usage","text":"
{$myVar|strip}\n

Note

If you want to strip blocks of template text, use the built-in {strip} function.

"},{"location":"designers/language-modifiers/language-modifier-strip/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', \"Grandmother of\\neight makes\\t    hole in one.\");\n$smarty->display('index.tpl');\n

Where template is:

{$articleTitle}\n{$articleTitle|strip}\n{$articleTitle|strip:'&nbsp;'}\n

Will output:

Grandmother of\neight makes        hole in one.\nGrandmother of eight makes hole in one.\nGrandmother&nbsp;of&nbsp;eight&nbsp;makes&nbsp;hole&nbsp;in&nbsp;one.\n

See also {strip} and truncate.

"},{"location":"designers/language-modifiers/language-modifier-to-charset/","title":"to_charset","text":"

to_charset is used to transcode a string from the internal charset to a given charset. This is the exact opposite of the from_charset modifier.

"},{"location":"designers/language-modifiers/language-modifier-to-charset/#parameters","title":"Parameters","text":"Parameter Position Type Required Possible Values Default Description 1 string No ISO-8859-1, UTF-8, and any character set supported by mb_convert_encoding() ISO-8859-1 The charset encoding the value is supposed to be encoded to

Note

Charset encoding should be handled by the application itself. This modifier should only be used in cases where the application cannot anticipate that a certain string is required in another encoding.

See also Configuring Smarty, from_charset modifier.

"},{"location":"designers/language-modifiers/language-modifier-truncate/","title":"truncate","text":"

This truncates a variable to a character length, the default is 80. As an optional second parameter, you can specify a string of text to display at the end if the variable was truncated. The characters in the string are included with the original truncation length. By default, truncate will attempt to cut off at a word boundary. If you want to cut off at the exact character length, pass the optional third parameter of TRUE.

"},{"location":"designers/language-modifiers/language-modifier-truncate/#basic-usage","title":"Basic usage","text":"
{$myVar|truncate:40:\"...\"}\n
"},{"location":"designers/language-modifiers/language-modifier-truncate/#parameters","title":"Parameters","text":"Parameter Position Type Required Default Description 1 integer No 80 This determines how many characters to truncate to. 2 string No ... This is a text string that replaces the truncated text. Its length is included in the truncation length setting. 3 boolean No FALSE This determines whether or not to truncate at a word boundary with FALSE, or at the exact character with TRUE. 4 boolean No FALSE This determines whether the truncation happens at the end of the string with FALSE, or in the middle of the string with TRUE. Note that if this setting is TRUE, then word boundaries are ignored."},{"location":"designers/language-modifiers/language-modifier-truncate/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');\n

where template is:

{$articleTitle}\n{$articleTitle|truncate}\n{$articleTitle|truncate:30}\n{$articleTitle|truncate:30:\"\"}\n{$articleTitle|truncate:30:\"---\"}\n{$articleTitle|truncate:30:\"\":true}\n{$articleTitle|truncate:30:\"...\":true}\n{$articleTitle|truncate:30:'..':true:true}\n

This will output:

Two Sisters Reunite after Eighteen Years at Checkout Counter.\nTwo Sisters Reunite after Eighteen Years at Checkout Counter.\nTwo Sisters Reunite after...\nTwo Sisters Reunite after\nTwo Sisters Reunite after---\nTwo Sisters Reunite after Eigh\nTwo Sisters Reunite after E...\nTwo Sisters Re..ckout Counter.\n
"},{"location":"designers/language-modifiers/language-modifier-unescape/","title":"unescape","text":"

unescape is used to decode entity, html and htmlall. It counters the effects of the escape modifier for the given types.

"},{"location":"designers/language-modifiers/language-modifier-unescape/#basic-usage","title":"Basic usage","text":"
{$myVar|unescape}\n
"},{"location":"designers/language-modifiers/language-modifier-unescape/#parameters","title":"Parameters","text":"Parameter Position Type Required Possible Values Default Description 1 string No html, htmlall, entity, html This is the escape format to use. 2 string No ISO-8859-1, UTF-8, and any character set supported by htmlentities() UTF-8 The character set encoding passed to html_entity_decode() or htmlspecialchars_decode() or mb_convert_encoding() et. al."},{"location":"designers/language-modifiers/language-modifier-unescape/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle',\n\"Germans use &quot;&Uuml;mlauts&quot; and pay in &euro;uro\"\n);\n

These are example unescape template lines followed by the output

{$articleTitle}\nGermans use &quot;&Uuml;mlauts&quot; and pay in &euro;uro\n{$articleTitle|unescape:\"html\"}\nGermans use \"&Uuml;mlauts\" and pay in &euro;uro\n{$articleTitle|unescape:\"htmlall\"}\nGermans use \"\u00dcmlauts\" and pay in \u20acuro\n

See also escaping smarty parsing, escape modifier.

"},{"location":"designers/language-modifiers/language-modifier-upper/","title":"upper","text":"

This is used to uppercase a variable. This is equivalent to the PHP strtoupper() function.

"},{"location":"designers/language-modifiers/language-modifier-upper/#basic-usage","title":"Basic usage","text":"
{$myVar|upper}\n
"},{"location":"designers/language-modifiers/language-modifier-upper/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle', \"If Strike isn't Settled Quickly it may Last a While.\");\n

Where template is:

{$articleTitle}\n{$articleTitle|upper}\n

Will output:

If Strike isn't Settled Quickly it may Last a While.\nIF STRIKE ISN'T SETTLED QUICKLY IT MAY LAST A WHILE.\n

See also lower and capitalize.

"},{"location":"designers/language-modifiers/language-modifier-wordwrap/","title":"wordwrap","text":"

Wraps a string to a column width, the default is 80. As an optional second parameter, you can specify a string of text to wrap the text to the next line, the default is a carriage return \"\\n\". By default, wordwrap will attempt to wrap at a word boundary. If you want to cut off at the exact character length, pass the optional third parameter as TRUE. This is equivalent to the PHP wordwrap() function.

"},{"location":"designers/language-modifiers/language-modifier-wordwrap/#basic-usage","title":"Basic usage","text":"
{$myVar|wordwrap:30}\n
"},{"location":"designers/language-modifiers/language-modifier-wordwrap/#parameters","title":"Parameters","text":"Parameter Position Type Required Default Description 1 integer No 80 This determines how many columns to wrap to. 2 string No \\n This is the string used to wrap words with. 3 boolean No FALSE This determines whether to wrap at a word boundary (FALSE), or at the exact character (TRUE)."},{"location":"designers/language-modifiers/language-modifier-wordwrap/#examples","title":"Examples","text":"
<?php\n$smarty->assign('articleTitle',\n\"Blind woman gets new kidney from dad she hasn't seen in years.\"\n);\n

Where template is

{$articleTitle}\n{$articleTitle|wordwrap:30}\n{$articleTitle|wordwrap:20}\n{$articleTitle|wordwrap:30:\"<br />\\n\"}\n{$articleTitle|wordwrap:26:\"\\n\":true}\n

Will output:

Blind woman gets new kidney from dad she hasn't seen in years.\n\nBlind woman gets new kidney\nfrom dad she hasn't seen in\nyears.\n\nBlind woman gets new\nkidney from dad she\nhasn't seen in\nyears.\n\nBlind woman gets new kidney<br />\nfrom dad she hasn't seen in<br />\nyears.\n\nBlind woman gets new kidn\ney from dad she hasn't se\nen in years.\n

See also nl2br and {textformat}.

"},{"location":"designers/language-variables/","title":"Variables","text":"

Smarty has several types of variables. The type of the variable depends on what symbol it is prefixed or enclosed within.

  • Variables assigned from PHP
  • Variables loaded from config files
  • {$smarty} reserved variable

Variables in Smarty can be either displayed directly or used as arguments for functions, attributes and modifiers, inside conditional expressions, etc. To print a variable, simply enclose it in the delimiters so that it is the only thing contained between them.

{$Name}\n{$product.part_no} <b>{$product.description}</b>\n{$Contacts[row].Phone}\n<body bgcolor=\"{#bgcolor#}\">\n
"},{"location":"designers/language-variables/#scopes","title":"Scopes","text":"

You can assign variables to specific variable scopes.

Note

An easy way to examine assigned Smarty variables is with the debugging console.

"},{"location":"designers/language-variables/language-assigned-variables/","title":"Variables assigned from PHP","text":"

Variables assigned from PHP are referenced by preceding them with a dollar ($) sign.

"},{"location":"designers/language-variables/language-assigned-variables/#examples","title":"Examples","text":"
<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->assign('firstname', 'Doug');\n$smarty->assign('lastname', 'Evans');\n$smarty->assign('meetingPlace', 'New York');\n$smarty->display('index.tpl');\n

index.tpl source:

Hello {$firstname} {$lastname}, glad to see you can make it.\n<br />\n{* this will not work as $variables are case sensitive *}\nThis weeks meeting is in {$meetingplace}.\n{* this will work *}\nThis weeks meeting is in {$meetingPlace}.\n

This above would output:

Hello Doug Evans, glad to see you can make it.\n<br />\nThis weeks meeting is in .\nThis weeks meeting is in New York.\n
"},{"location":"designers/language-variables/language-assigned-variables/#associative-arrays","title":"Associative arrays","text":"

You can also reference associative array variables by specifying the key after a dot \".\" symbol.

<?php\n$smarty->assign('Contacts',\narray('fax' => '555-222-9876',\n'email' => 'zaphod@slartibartfast.example.com',\n'phone' => array('home' => '555-444-3333',\n'cell' => '555-111-1234')\n)\n);\n$smarty->display('index.tpl');\n

index.tpl source:

{$Contacts.fax}<br />\n{$Contacts.email}<br />\n{* you can print arrays of arrays as well *}\n{$Contacts.phone.home}<br />\n{$Contacts.phone.cell}<br />\n

this will output:

555-222-9876<br />\nzaphod@slartibartfast.example.com<br />\n555-444-3333<br />\n555-111-1234<br />\n
"},{"location":"designers/language-variables/language-assigned-variables/#array-indexes","title":"Array indexes","text":"

You can reference arrays by their index, much like native PHP syntax.

<?php\n$smarty->assign('Contacts', array(\n'555-222-9876',\n'zaphod@slartibartfast.example.com',\narray('555-444-3333',\n'555-111-1234')\n));\n$smarty->display('index.tpl');\n

index.tpl source:

{$Contacts[0]}<br />\n{$Contacts[1]}<br />\n{* you can print arrays of arrays as well *}\n{$Contacts[2][0]}<br />\n{$Contacts[2][1]}<br />\n

This will output:

555-222-9876<br />\nzaphod@slartibartfast.example.com<br />\n555-444-3333<br />\n555-111-1234<br />\n
"},{"location":"designers/language-variables/language-assigned-variables/#objects","title":"Objects","text":"

Properties of objects assigned from PHP can be referenced by specifying the property name after the -> symbol.

name:  {$person->name}<br />\nemail: {$person->email}<br />\n

this will output:

name:  Zaphod Beeblebrox<br />\nemail: zaphod@slartibartfast.example.com<br />\n
"},{"location":"designers/language-variables/language-config-variables/","title":"Variables loaded from config files","text":"

Variables that are loaded from the config files are referenced by enclosing them within #hash_marks#, or with the smarty variable $smarty.config. The later syntax is useful for embedding into quoted attribute values, or accessing variable values such as $smarty.config.$foo.

"},{"location":"designers/language-variables/language-config-variables/#examples","title":"Examples","text":"

Example config file - foo.conf:

pageTitle = \"This is mine\"\nbodyBgColor = '#eeeeee'\ntableBorderSize = 3\ntableBgColor = \"#bbbbbb\"\nrowBgColor = \"#cccccc\"\n

A template demonstrating the #hash# method:

{config_load file='foo.conf'}\n<html>\n    <title>{#pageTitle#}</title>\n    <body bgcolor=\"{#bodyBgColor#}\">\n        <table border=\"{#tableBorderSize#}\" bgcolor=\"{#tableBgColor#}\">\n            <tr bgcolor=\"{#rowBgColor#}\">\n                <td>First</td>\n                <td>Last</td>\n                <td>Address</td>\n            </tr>\n        </table>\n    </body>\n</html>\n

A template demonstrating the $smarty.config method:

{config_load file='foo.conf'}\n<html>\n<title>{$smarty.config.pageTitle}</title>\n    <body bgcolor=\"{$smarty.config.bodyBgColor}\">\n        <table border=\"{$smarty.config.tableBorderSize}\" bgcolor=\"{$smarty.config.tableBgColor}\">\n            <tr bgcolor=\"{$smarty.config.rowBgColor}\">\n                <td>First</td>\n                <td>Last</td>\n                <td>Address</td>\n            </tr>\n        </table>\n    </body>\n</html>\n

Both examples would output:

<html>\n<title>This is mine</title>\n<body bgcolor=\"#eeeeee\">\n<table border=\"3\" bgcolor=\"#bbbbbb\">\n<tr bgcolor=\"#cccccc\">\n<td>First</td>\n<td>Last</td>\n<td>Address</td>\n</tr>\n</table>\n</body>\n</html>\n

Config file variables cannot be used until after they are loaded in from a config file. This procedure is explained later in this document under {config_load}.

See also variables and $smarty reserved variables.

"},{"location":"designers/language-variables/language-variable-scopes/","title":"Variable scopes","text":"

You have the choice to assign variables to the scope of the main Smarty object, data objects created with createData(), and template objects created with createTemplate(). 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(...) or $smarty->fetch(...) 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\n// assign variable to Smarty object scope\n$smarty->assign('foo','smarty');\n// assign variables to data object scope\n$data = $smarty->createData();\n$data->assign('foo','data');\n$data->assign('bar','bar-data');\n// assign variables to other data object scope\n$data2 = $smarty->createData($data);\n$data2->assign('bar','bar-data2');\n// assign variable to template object scope\n$tpl = $smarty->createTemplate('index.tpl');\n$tpl->assign('bar','bar-template');\n// assign variable to template object scope with link to Smarty object\n$tpl2 = $smarty->createTemplate('index.tpl',$smarty);\n$tpl2->assign('bar','bar-template2');\n// This display() does see $foo='smarty' from the $smarty object\n$smarty->display('index.tpl');\n// This display() does see $foo='data' and $bar='bar-data' from the data object $data\n$smarty->display('index.tpl',$data);\n// This display() does see $foo='data' from the data object $data \n// and $bar='bar-data2' from the data object $data2\n$smarty->display('index.tpl',$data2);\n// This display() does see $bar='bar-template' from the template object $tpl\n$tpl->display();  // or $smarty->display($tpl);\n// This display() does see $bar='bar-template2' from the template object $tpl2\n// and $foo='smarty' form the Smarty object $foo\n$tpl2->display();  // or $smarty->display($tpl2);\n

See also assign(), createData() and createTemplate().

"},{"location":"designers/language-variables/language-variables-smarty/","title":"{$smarty} reserved variable","text":"

The PHP reserved {$smarty} variable can be used to access several environment and request variables. The full list of them follows.

"},{"location":"designers/language-variables/language-variables-smarty/#request-variables","title":"Request variables","text":"

The request variables such as $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV and $_SESSION can be accessed as demonstrated in the examples below:

{* display value of page from URL ($_GET) http://www.example.com/index.php?page=foo *}\n{$smarty.get.page}\n{* display the variable \"page\" from a form ($_POST['page']) *}\n{$smarty.post.page}\n{* display the value of the cookie \"username\" ($_COOKIE['username']) *}\n{$smarty.cookies.username}\n{* display the server variable \"SERVER_NAME\" ($_SERVER['SERVER_NAME'])*}\n{$smarty.server.SERVER_NAME}\n{* display the system environment variable \"PATH\" *}\n{$smarty.env.PATH}\n{* display the php session variable \"id\" ($_SESSION['id']) *}\n{$smarty.session.id}\n{* display the variable \"username\" from merged get/post/cookies/server/env *}\n{$smarty.request.username}\n

Note

For historical reasons {$SCRIPT_NAME} is shorthand for {$smarty.server.SCRIPT_NAME}.

<a href=\"{$SCRIPT_NAME}?page=smarty\">click me</a>\n<a href=\"{$smarty.server.SCRIPT_NAME}?page=smarty\">click me</a>\n

Note

Although Smarty provides direct access to PHP super globals for convenience, it should be used with caution. Directly accessing super globals mixes underlying application code structure with templates. A good practice is to assign specific needed values to template vars.

"},{"location":"designers/language-variables/language-variables-smarty/#smartynow","title":"{$smarty.now}","text":"

The current timestamp can be accessed with {$smarty.now}. The value reflects the number of seconds passed since the so-called Epoch on January 1, 1970, and can be passed directly to the date_format modifier for display. Note that time() is called on each invocation; eg a script that takes three seconds to execute with a call to $smarty.now at start and end will show the three-second difference.

{* use the date_format modifier to show current date and time *}\n{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}\n
"},{"location":"designers/language-variables/language-variables-smarty/#smartyconst","title":"{$smarty.const}","text":"

You can access PHP constant values directly.

<?php\n// the constant defined in php\ndefine('MY_CONST_VAL','CHERRIES');\n

Output the constant in a template with

{$smarty.const.MY_CONST_VAL}\n

Note

Although Smarty provides direct access to PHP constants for convenience, it is typically avoided as this is mixing underlying application code structure into the templates. A good practice is to assign specific needed values to template vars.

"},{"location":"designers/language-variables/language-variables-smarty/#smartycapture","title":"{$smarty.capture}","text":"

Template output captured via the built-in {capture}..{/capture} function can be accessed using the {$smarty.capture} variable. See the {capture} page for more information.

"},{"location":"designers/language-variables/language-variables-smarty/#smartyconfig","title":"{$smarty.config}","text":"

{$smarty.config} variable can be used to refer to loaded config variables. {$smarty.config.foo} is a synonym for {#foo#}. See the {config_load} page for more info.

"},{"location":"designers/language-variables/language-variables-smarty/#smartysection","title":"{$smarty.section}","text":"

The {$smarty.section} variables can be used to refer to {section} loop properties. These have some very useful values such as .first, .index, etc.

Note

The {$smarty.foreach} variable is no longer used with the new {foreach} syntax, but is still supported with Smarty 2.x style foreach syntax.

"},{"location":"designers/language-variables/language-variables-smarty/#smartytemplate","title":"{$smarty.template}","text":"

Returns the name of the current template being processed (without the directory).

"},{"location":"designers/language-variables/language-variables-smarty/#smartytemplate_object","title":"{$smarty.template_object}","text":"

Returns the template object of the current template being processed.

"},{"location":"designers/language-variables/language-variables-smarty/#smartycurrent_dir","title":"{$smarty.current_dir}","text":"

Returns the name of the directory for the current template being processed if it is loaded from the filesystem (the default).

"},{"location":"designers/language-variables/language-variables-smarty/#smartyversion","title":"{$smarty.version}","text":"

Returns the version of Smarty the template was compiled with.

<div id=\"footer\">Powered by Smarty {$smarty.version}</div>\n
"},{"location":"designers/language-variables/language-variables-smarty/#smartyblockchild","title":"{$smarty.block.child}","text":"

Returns block text from child template. See Template inheritance.

"},{"location":"designers/language-variables/language-variables-smarty/#smartyblockparent","title":"{$smarty.block.parent}","text":"

Returns block text from parent template. See Template inheritance

"},{"location":"designers/language-variables/language-variables-smarty/#smartyldelim-smartyrdelim","title":"{$smarty.ldelim}, {$smarty.rdelim}","text":"

These variables are used for printing the left-delimiter and right-delimiter value literally, the same as {ldelim},{rdelim}.

See also assigned variables and config variables

"},{"location":"programmers/api-functions/api-add-plugins-dir/","title":"Api add plugins dir","text":"

addPluginsDir()

add a directory to the list of directories where plugins are stored

"},{"location":"programmers/api-functions/api-add-plugins-dir/#description","title":"Description","text":"

Smarty

addPluginsDir

string|array

plugins_dir

<?php\n\n// add directory where plugins are stored\n$smarty->addPluginsDir('./plugins_1');\n\n// add multiple directories where plugins are stored\n$smarty->setPluginsDir(array(\n    './plugins_2',\n    './plugins_3',\n));\n\n// view the plugins dir chain\nvar_dump($smarty->getPluginsDir());\n\n// chaining of method calls\n$smarty->setPluginsDir('./plugins')\n       ->addPluginsDir('./plugins_1')\n       ->addPluginsDir('./plugins_2');\n\n?>\n

See also getPluginsDir(), setPluginsDir() and $plugins_dir.

"},{"location":"programmers/api-functions/api-append/","title":"Api append","text":"

append()

append an element to an assigned array

"},{"location":"programmers/api-functions/api-append/#description","title":"Description","text":"

void

append

mixed

var

void

append

string

varname

mixed

var

bool

merge

If you append to a string value, it is converted to an array value and then appended to. You can explicitly pass name/value pairs, or associative arrays containing the name/value pairs. If you pass the optional third parameter of TRUE, the value will be merged with the current array instead of appended.

NOTE.PARAMETER.MERGE

<?php\n// This is effectively the same as assign()\n$smarty->append('foo', 'Fred');\n// After this line, foo will now be seen as an array in the template\n$smarty->append('foo', 'Albert');\n\n$array = array(1 => 'one', 2 => 'two');\n$smarty->append('X', $array);\n$array2 = array(3 => 'three', 4 => 'four');\n// The following line will add a second element to the X array\n$smarty->append('X', $array2);\n\n// passing an associative array\n$smarty->append(array('city' => 'Lincoln', 'state' => 'Nebraska'));\n?>\n

See also assign() and getTemplateVars()

"},{"location":"programmers/api-functions/api-assign/","title":"Api assign","text":"

assign()

assign variables/objects to the templates

"},{"location":"programmers/api-functions/api-assign/#description","title":"Description","text":"

void

assign

mixed

var

void

assign

string

varname

mixed

var

bool

nocache

You can explicitly pass name/value pairs, or associative arrays containing the name/value pairs.

If you pass the optional third nocache parameter of TRUE, the variable is assigned as nocache variable. See Cacheability of Variables for details.

Note

When you assign/register objects to templates, be sure that all properties and methods accessed from the template are for presentation purposes only. It is very easy to inject application logic through objects, and this leads to poor designs that are difficult to manage. See the Best Practices section of the Smarty website.

<?php\n// passing name/value pairs\n$smarty->assign('Name', 'Fred');\n$smarty->assign('Address', $address);\n\n// passing an associative array\n$smarty->assign(array('city' => 'Lincoln', 'state' => 'Nebraska'));\n\n// passing an array\n$myArray = array('no' => 10, 'label' => 'Peanuts');\n$smarty->assign('foo',$myArray);\n\n// passing a row from a database (eg adodb)\n$sql = 'select id, name, email from contacts where contact ='.$id;\n$smarty->assign('contact', $db->getRow($sql));\n?>\n

These are accessed in the template with

{* note the vars are case sensitive like php *}\n{$Name}\n{$Address}\n{$city}\n{$state}\n\n{$foo.no}, {$foo.label}\n{$contact.id}, {$contact.name},{$contact.email}\n

To access more complex array assignments see {foreach} and {section}

See also getTemplateVars(), clearAssign(), append() and {assign}

"},{"location":"programmers/api-functions/api-clear-all-assign/","title":"Api clear all assign","text":"

clearAllAssign()

clears the values of all assigned variables

"},{"location":"programmers/api-functions/api-clear-all-assign/#description","title":"Description","text":"

void

clearAllAssign

<?php\n// passing name/value pairs\n$smarty->assign('Name', 'Fred');\n$smarty->assign('Address', $address);\n\n// will output above\nprint_r( $smarty->getTemplateVars() );\n\n// clear all assigned variables\n$smarty->clearAllAssign();\n\n// will output nothing\nprint_r( $smarty->getTemplateVars() );\n\n?>\n

See also clearAssign(), clearConfig(), getTemplateVars(), assign() and append()

"},{"location":"programmers/api-functions/api-clear-all-cache/","title":"Api clear all cache","text":"

clearAllCache()

clears the entire template cache

"},{"location":"programmers/api-functions/api-clear-all-cache/#description","title":"Description","text":"

void

clearAllCache

int

expire_time

As an optional parameter, you can supply a minimum age in seconds the cache files must be before they will get cleared.

Note

Since Smarty version 3.1.14 it is possible to delete cache files by their individual expiration time at creation by passing constant SMARTY::CLEAR_EXPIRED as expire_time parameter.

<?php\n// clear the entire cache\n$smarty->clearAllCache();\n\n// clears all files over one hour old\n$smarty->clearAllCache(3600);\n?>\n

See also clearCache(), isCached() and the caching page.

"},{"location":"programmers/api-functions/api-clear-assign/","title":"Api clear assign","text":"

clearAssign()

clears the value of an assigned variable

"},{"location":"programmers/api-functions/api-clear-assign/#description","title":"Description","text":"

void

clearAssign

mixed

var

This can be a single value, or an array of values.

<?php\n// clear a single variable\n$smarty->clearAssign('Name');\n\n// clears multiple variables\n$smarty->clearAssign(array('Name', 'Address', 'Zip'));\n?>\n

See also clearAllAssign(), clearConfig(), getTemplateVars(), assign() and append()

"},{"location":"programmers/api-functions/api-clear-cache/","title":"Api clear cache","text":"

clearCache()

clears the cache for a specific template

"},{"location":"programmers/api-functions/api-clear-cache/#description","title":"Description","text":"

void

clearCache

string

template

string

cache_id

string

compile_id

int

expire_time

  • If you have multiple caches for a template, you can clear a specific cache by supplying the cache_id as the second parameter.

  • You can also pass a $compile_id as a third parameter. You can group templates together so they can be removed as a group, see the caching section for more information.

  • As an optional fourth parameter, you can supply a minimum age in seconds the cache file must be before it will get cleared.

    Note

    Since Smarty version 3.1.14 it is possible to delete cache files by their individual expiration time at creation by passing constant SMARTY::CLEAR_EXPIRED as fourth parameter.

<?php\n// clear the cache for a template\n$smarty->clearCache('index.tpl');\n\n// clear the cache for a particular cache id in an multiple-cache template\n$smarty->clearCache('index.tpl', 'MY_CACHE_ID');\n?>\n

See also clearAllCache() and caching section.

"},{"location":"programmers/api-functions/api-clear-compiled-tpl/","title":"Api clear compiled tpl","text":"

clearCompiledTemplate()

clears the compiled version of the specified template resource

"},{"location":"programmers/api-functions/api-clear-compiled-tpl/#description","title":"Description","text":"

void

clearCompiledTemplate

string

tpl_file

string

compile_id

int

exp_time

This clears the compiled version of the specified template resource, or all compiled template files if one is not specified. If you pass a $compile_id only the compiled template for this specific $compile_id is cleared. If you pass an exp_time, then only compiled templates older than exp_time seconds are cleared, by default all compiled templates are cleared regardless of their age. This function is for advanced use only, not normally needed.

<?php\n// clear a specific template resource\n$smarty->clearCompiledTemplate('index.tpl');\n\n// clear entire compile directory\n$smarty->clearCompiledTemplate();\n?>\n

See also clearCache().

"},{"location":"programmers/api-functions/api-clear-config/","title":"Api clear config","text":"

clearConfig()

clears assigned config variables

"},{"location":"programmers/api-functions/api-clear-config/#description","title":"Description","text":"

void

clearConfig

string

var

This clears all assigned config variables. If a variable name is supplied, only that variable is cleared.

<?php\n// clear all assigned config variables.\n$smarty->clearConfig();\n\n// clear one variable\n$smarty->clearConfig('foobar');\n?>\n

See also getConfigVars(), config variables, config files, {config_load}, configLoad() and clearAssign().

"},{"location":"programmers/api-functions/api-compile-all-config/","title":"Api compile all config","text":"

compileAllConfig()

compiles all known config files

"},{"location":"programmers/api-functions/api-compile-all-config/#description","title":"Description","text":"

string

compileAllConfig

string

extension

boolean

force

integer

timelimit

integer

maxerror

This function compiles config files found in the $config_dir folder. It uses the following parameters:

  • extension is an optional string which defines the file extension for the config files. The default is \\\".conf\\\".

  • force is an optional boolean which controls if only modified (false) or all (true) config files shall be compiled. The default is \\\"false\\\".

  • timelimit is an optional integer to set a runtime limit in seconds for the compilation process. The default is no limit.

  • maxerror is an optional integer to set an error limit. If more config files failed to compile the function will be aborted. The default is no limit.

Note

This function may not create desired results in all configurations. Use is on own risk.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n\n// force compilation of all config files\n$smarty->compileAllConfig('.config',true);\n\n?>\n
"},{"location":"programmers/api-functions/api-compile-all-templates/","title":"Api compile all templates","text":"

compileAllTemplates()

compiles all known templates

"},{"location":"programmers/api-functions/api-compile-all-templates/#description","title":"Description","text":"

string

compileAllTemplates

string

extension

boolean

force

integer

timelimit

integer

maxerror

This function compiles template files found in the $template_dir folder. It uses the following parameters:

  • extension is an optional string which defines the file extension for the template files. The default is \\\".tpl\\\".

  • force is an optional boolean which controls if only modified (false) or all (true) templates shall be compiled. The default is \\\"false\\\".

  • timelimit is an optional integer to set a runtime limit in seconds for the compilation process. The default is no limit.

  • maxerror is an optional integer to set an error limit. If more templates failed to compile the function will be aborted. The default is no limit.

Note

This function may not create desired results in all configurations. Use is on own risk.

Note

If any template requires registered plugins, filters or objects you must register all of them before running this function.

Note

If you are using template inheritance this function will create compiled files of parent templates which will never be used.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n\n// force compilation of all template files\n$smarty->compileAllTemplates('.tpl',true);\n\n?>\n
"},{"location":"programmers/api-functions/api-config-load/","title":"Api config load","text":"

configLoad()

loads config file data and assigns it to the template

"},{"location":"programmers/api-functions/api-config-load/#description","title":"Description","text":"

void

configLoad

string

file

string

section

This loads config file data and assigns it to the template. This works identically to the template {config_load} function.

Note

As of Smarty 2.4.0, assigned template variables are kept across invocations of fetch() and display(). Config vars loaded from configLoad() are always global in scope. Config files are also compiled for faster execution, and respect the $force_compile and $compile_check settings.

<?php\n// load config variables and assign them\n$smarty->configLoad('my.conf');\n\n// load a section\n$smarty->configLoad('my.conf', 'foobar');\n?>\n

See also {config_load}, getConfigVars(), clearConfig(), and config variables

"},{"location":"programmers/api-functions/api-create-data/","title":"Api create data","text":"

createData()

creates a data object

"},{"location":"programmers/api-functions/api-create-data/#description","title":"Description","text":"

string

createData

object

parent

string

createData

This creates a data object which will hold assigned variables. It uses the following parameters:

  • parent is an optional parameter. It is an uplink to the main Smarty object, a another user-created data object or to user-created template object. These objects can be chained. Templates can access variables assigned to any of the objects in it\\'s parent chain.

Data objects are used to create scopes for assigned variables. They can be used to control which variables are seen by which templates.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n\n// create data object with its private variable scope\n$data = $smarty->createData();\n\n// assign variable to data scope\n$data->assign('foo','bar');\n\n// create template object which will use variables from data object\n$tpl = $smarty->createTemplate('index.tpl',$data);\n\n// display the template\n$tpl->display();\n?>\n

See also display(), and createTemplate(),

"},{"location":"programmers/api-functions/api-create-template/","title":"Api create template","text":"

createTemplate()

returns a template object

"},{"location":"programmers/api-functions/api-create-template/#description","title":"Description","text":"

Smarty_Internal_Template

createTemplate

string

template

object

parent

Smarty_Internal_Template

createTemplate

string

template

array

data

Smarty_Internal_Template

createTemplate

string

template

string

cache_id

string

compile_id

object

parent

Smarty_Internal_Template

createTemplate

string

template

string

cache_id

string

compile_id

array

data

This creates a template object which later can be rendered by the display or fetch method. It uses the following parameters:

  • template must be a valid template resource type and path.
<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n\n// create template object with its private variable scope\n$tpl = $smarty->createTemplate('index.tpl');\n\n// assign variable to template scope\n$tpl->assign('foo','bar');\n\n// display the template\n$tpl->display();\n?>\n

See also display(), and templateExists().

"},{"location":"programmers/api-functions/api-disable-security/","title":"Api disable security","text":"

disableSecurity()

disables template security

"},{"location":"programmers/api-functions/api-disable-security/#description","title":"Description","text":"

string

disableSecurity

This disables security checking on templates.

See also enableSecurity(), and Security.

"},{"location":"programmers/api-functions/api-display/","title":"Api display","text":"

display()

displays the template

"},{"location":"programmers/api-functions/api-display/#description","title":"Description","text":"

void

display

string

template

string

cache_id

string

compile_id

This displays the contents of a template. To return the contents of a template into a variable, use fetch(). Supply a valid template resource type and path. As an optional second parameter, you can pass a $cache_id, see the caching section for more information.

PARAMETER.COMPILEID

<?php\n\nuse Smarty\\Smarty;\n\n$smarty = new Smarty();\n$smarty->setCaching(true);\n\n// only do db calls if cache doesn't exist\nif(!$smarty->isCached('index.tpl')) {\n\n  // dummy up some data\n  $address = '245 N 50th';\n  $db_data = array(\n               'City' => 'Lincoln',\n               'State' => 'Nebraska',\n               'Zip' => '68502'\n             );\n\n  $smarty->assign('Name', 'Fred');\n  $smarty->assign('Address', $address);\n  $smarty->assign('data', $db_data);\n\n}\n\n// display the output\n$smarty->display('index.tpl');\n?>\n

Use the syntax for template resources to display files outside of the $template_dir directory.

<?php\n// absolute filepath\n$smarty->display('/usr/local/include/templates/header.tpl');\n\n// absolute filepath (same thing)\n$smarty->display('file:/usr/local/include/templates/header.tpl');\n\n// windows absolute filepath (MUST use \"file:\" prefix)\n$smarty->display('file:C:/www/pub/templates/header.tpl');\n\n// include from template resource named \"db\"\n$smarty->display('db:header.tpl');\n?>\n

See also fetch() and templateExists().

"},{"location":"programmers/api-functions/api-enable-security/","title":"Api enable security","text":"

enableSecurity()

enables template security

"},{"location":"programmers/api-functions/api-enable-security/#description","title":"Description","text":"

string

enableSecurity

string

securityclass

string

enableSecurity

object

securityobject

string

enableSecurity

This enables security checking on templates. It uses the following parameters:

  • securityclass is an optional parameter. It\\'s the name of the class with defines the security policy parameters.

  • securityobject is an optional parameter. It\\'s the object with defines the security policy parameters.

For the details how to setup a security policy see the Security section.

See also disableSecurity(), and Security.

"},{"location":"programmers/api-functions/api-fetch/","title":"Api fetch","text":"

fetch()

returns the template output

"},{"location":"programmers/api-functions/api-fetch/#description","title":"Description","text":"

string

fetch

string

template

string

cache_id

string

compile_id

This returns the template output instead of displaying it. Supply a valid template resource type and path. As an optional second parameter, you can pass a $cache id, see the caching section for more information.

PARAMETER.COMPILEID

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty;\n\n$smarty->setCaching(true);\n\n// set a separate cache_id for each unique URL\n$cache_id = md5($_SERVER['REQUEST_URI']);\n\n// capture the output\n$output = $smarty->fetch('index.tpl', $cache_id);\n\n// do something with $output here\necho $output;\n?>\n

The email_body.tpl template

Dear {$contact_info.name},\n\nWelcome and thank you for signing up as a member of our user group.\n\nClick on the link below to login with your user name\nof '{$contact_info.username}' so you can post in our forums.\n\n{$login_url}\n\nList master\n\n{textformat wrap=40}\nThis is some long-winded disclaimer text that would automatically get wrapped\nat 40 characters. This helps make the text easier to read in mail programs that\ndo not wrap sentences for you.\n{/textformat}\n

The php script using the PHP mail() function

<?php\n\n// get $contact_info from db or other resource here\n\n$smarty->assign('contact_info',$contact_info);\n$smarty->assign('login_url',\"http://{$_SERVER['SERVER_NAME']}/login\");\n\nmail($contact_info['email'], 'Thank You', $smarty->fetch('email_body.tpl'));\n\n?>\n

See also {fetch} display(), {eval}, and templateExists().

"},{"location":"programmers/api-functions/api-get-config-dir/","title":"Api get config dir","text":"

getConfigDir()

return the directory where config files are stored

"},{"location":"programmers/api-functions/api-get-config-dir/#description","title":"Description","text":"

string|array

getConfigDir

string

key

<?php\n\n// set some config directories\n$smarty->setConfigDir(array(\n    'one' => './config',\n    'two' => './config_2',\n    'three' => './config_3',\n));\n\n// get all directories where config files are stored\n$config_dir = $smarty->getConfigDir();\nvar_dump($config_dir); // array\n\n// get directory identified by key\n$config_dir = $smarty->getConfigDir('one');\nvar_dump($config_dir); // string\n\n?>\n

See also setConfigDir(), addConfigDir() and $config_dir.

"},{"location":"programmers/api-functions/api-get-config-vars/","title":"Api get config vars","text":"

getConfigVars()

returns the given loaded config variable value

"},{"location":"programmers/api-functions/api-get-config-vars/#description","title":"Description","text":"

array

getConfigVars

string

varname

If no parameter is given, an array of all loaded config variables is returned.

<?php\n\n// get loaded config template var #foo#\n$myVar = $smarty->getConfigVars('foo');\n\n// get all loaded config template vars\n$all_config_vars = $smarty->getConfigVars();\n\n// take a look at them\nprint_r($all_config_vars);\n?>\n

See also clearConfig(), {config_load}, configLoad() and getTemplateVars().

"},{"location":"programmers/api-functions/api-get-plugins-dir/","title":"Api get plugins dir","text":"

getPluginsDir()

return the directory where plugins are stored

"},{"location":"programmers/api-functions/api-get-plugins-dir/#description","title":"Description","text":"

array

getPluginsDir

<?php\n\n// set some plugins directories\n$smarty->setPluginsDir(array(\n    './plugins',\n    './plugins_2',\n));\n\n// get all directories where plugins are stored\n$config_dir = $smarty->getPluginsDir();\nvar_dump($config_dir); // array\n\n?>\n

See also setPluginsDir(), addPluginsDir() and $plugins_dir.

"},{"location":"programmers/api-functions/api-get-registered-object/","title":"Api get registered object","text":"

getRegisteredObject()

returns a reference to a registered object

"},{"location":"programmers/api-functions/api-get-registered-object/#description","title":"Description","text":"

array

getRegisteredObject

string

object_name

This is useful from within a custom function when you need direct access to a registered object. See the objects page for more info.

<?php\nfunction smarty_block_foo($params, $smarty)\n{\n  if (isset($params['object'])) {\n    // get reference to registered object\n    $obj_ref = $smarty->getRegisteredObject($params['object']);\n    // use $obj_ref is now a reference to the object\n  }\n}\n?>\n

See also registerObject(), unregisterObject() and objects page

"},{"location":"programmers/api-functions/api-get-template-vars/","title":"Api get template vars","text":"

getTemplateVars()

returns assigned variable value(s)

"},{"location":"programmers/api-functions/api-get-template-vars/#description","title":"Description","text":"

array

getTemplateVars

string

varname

If no parameter is given, an array of all assigned variables are returned.

<?php\n// get assigned template var 'foo'\n$myVar = $smarty->getTemplateVars('foo');\n\n// get all assigned template vars\n$all_tpl_vars = $smarty->getTemplateVars();\n\n// take a look at them\nprint_r($all_tpl_vars);\n?>\n

See also assign(), {assign}, append(), clearAssign(), clearAllAssign() and getConfigVars()

"},{"location":"programmers/api-functions/api-is-cached/","title":"Api is cached","text":"

isCached()

returns true if there is a valid cache for this template

"},{"location":"programmers/api-functions/api-is-cached/#description","title":"Description","text":"

bool

isCached

string

template

string

cache_id

string

compile_id

  • This only works if $caching is set to one of \\Smarty\\Smarty::CACHING_LIFETIME_CURRENT or \\Smarty\\Smarty::CACHING_LIFETIME_SAVED to enable caching. See the caching section for more info.

  • You can also pass a $cache_id as an optional second parameter in case you want multiple caches for the given template.

  • You can supply a $compile id as an optional third parameter. If you omit that parameter the persistent $compile_id is used if its set.

  • If you do not want to pass a $cache_id but want to pass a $compile_id you have to pass NULL as a $cache_id.

Note

If isCached() returns TRUE it actually loads the cached output and stores it internally. Any subsequent call to display() or fetch() will return this internally stored output and does not try to reload the cache file. This prevents a race condition that may occur when a second process clears the cache between the calls to isCached() and to display() in the example above. This also means calls to clearCache() and other changes of the cache-settings may have no effect after isCached() returned TRUE.

<?php\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);\n\nif(!$smarty->isCached('index.tpl')) {\n// do database calls, assign vars here\n}\n\n$smarty->display('index.tpl');\n?>\n\n\n\n\n<?php\n$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);\n\nif(!$smarty->isCached('index.tpl', 'FrontPage')) {\n  // do database calls, assign vars here\n}\n\n$smarty->display('index.tpl', 'FrontPage');\n?>\n

See also clearCache(), clearAllCache(), and caching section.

"},{"location":"programmers/api-functions/api-load-filter/","title":"Api load filter","text":"

loadFilter()

load a filter plugin

"},{"location":"programmers/api-functions/api-load-filter/#description","title":"Description","text":"

void

loadFilter

string

type

string

name

The first argument specifies the type of the filter to load and can be one of the following: variable, pre, post or output. The second argument specifies the name of the filter plugin.

<?php\n\n// load prefilter named 'trim'\n$smarty->loadFilter('pre', 'trim');\n\n// load another prefilter named 'datefooter'\n$smarty->loadFilter('pre', 'datefooter');\n\n// load output filter named 'compress'\n$smarty->loadFilter('output', 'compress');\n\n?>\n

See also registerFilter() and advanced features.

"},{"location":"programmers/api-functions/api-mute-expected-errors/","title":"Api mute expected errors","text":"

mutes expected warnings and notices deliberately generated by Smarty

"},{"location":"programmers/api-functions/api-mute-expected-errors/#description","title":"Description","text":"

string

muteExpectedErrors

muteExpectedErrors() registers a custom error handler using set_error_handler(). The error handler merely inspects $errno and $errfile to determine if the given error was produced deliberately and must be ignored, or should be passed on to the next error handler.

\\Smarty\\Smarty::unmuteExpectedErrors() removes the current error handler. Please note, that if you\\'ve registered any custom error handlers after the muteExpectedErrors() call, the unmute will not remove Smarty\\'s muting error handler, but the one registered last.

"},{"location":"programmers/api-functions/api-register-cacheresource/","title":"Api register cacheresource","text":"

registerCacheResource()

dynamically register CacheResources

"},{"location":"programmers/api-functions/api-register-cacheresource/#description","title":"Description","text":"

void

registerCacheResource

string

name

Smarty_CacheResource

resource_handler

Use this to dynamically register a CacheResource plugin with Smarty. Pass in the name of the CacheResource and the object extending Smarty_CacheResource. See Custom Cache Implementation for more information on how to create custom CacheResources.

Note

In Smarty2 this used to be a callback function called $cache_handler_func. Smarty3 replaced this callback by the Smarty_CacheResource module.

<?php\n$smarty->registerCacheResource('mysql', new My_CacheResource_Mysql());\n?>\n

See also unregisterCacheResource() and the Custom CacheResource Implementation section.

"},{"location":"programmers/api-functions/api-register-class/","title":"Api register class","text":"

registerClass()

register a class for use in the templates

"},{"location":"programmers/api-functions/api-register-class/#description","title":"Description","text":"

void

registerClass

string

class_name

string

class_impl

Smarty allows you to access static classes from templates as long as the Security Policy does not tell it otherwise. If security is enabled, classes registered with registerClass() are accessible to templates.

<?php\nuse Smarty\\Smarty;\n\nclass Bar {\n  $property = \"hello world\";\n}\n\n$smarty = new Smarty();\n$smarty->registerClass(\"Foo\", \"Bar\");\n\n\n\n\n{* Smarty will access this class as long as it's not prohibited by security *}\n{Bar::$property}\n{* Foo translates to the real class Bar *}\n{Foo::$property}\n\n\n\n\n<?php\nuse Smarty\\Smarty;\n\nnamespace my\\php\\application {\n  class Bar {\n    $property = \"hello world\";\n  }\n}\n\n$smarty = new Smarty();\n$smarty->registerClass(\"Foo\", \"\\my\\php\\application\\Bar\");\n\n\n\n\n{* Foo translates to the real class \\my\\php\\application\\Bar *}\n{Foo::$property}\n

See also registerObject(), and Security.

"},{"location":"programmers/api-functions/api-register-default-plugin-handler/","title":"Api register default plugin handler","text":"

registerDefaultPluginHandler()

register a function which gets called on undefined tags

"},{"location":"programmers/api-functions/api-register-default-plugin-handler/#description","title":"Description","text":"

void

registerDefaultPluginHandler

mixed

callback

Register a default plugin handler which gets called if the compiler can not find a definition for a tag otherwise. It uses the following parameters:

If during compilation Smarty encounters tag which is not defined internal, registered or located in the plugins folder it tries to resolve it by calling the registered default plugin handler. The handler may be called several times for same undefined tag looping over valid plugin types.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->registerDefaultPluginHandler('my_plugin_handler');\n\n/**\n * Default Plugin Handler\n *\n * called when Smarty encounters an undefined tag during compilation\n * \n * @param string                     $name      name of the undefined tag\n * @param string                     $type     tag type (e.g. Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK, \n                                               Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_MODIFIER, Smarty::PLUGIN_MODIFIERCOMPILER)\n * @param \\Smarty\\Template\\   $template     template object\n * @param string                     &$callback    returned function name \n * @param string                     &$script      optional returned script filepath if function is external\n * @param bool                       &$cacheable    true by default, set to false if plugin is not cachable (Smarty >= 3.1.8)\n * @return bool                      true if successfull\n */\nfunction my_plugin_handler ($name, $type, $template, &$callback, &$script, &$cacheable)\n{\n    switch ($type) {\n        case Smarty::PLUGIN_FUNCTION:\n            switch ($name) {\n                case 'scriptfunction':\n                    $script = './scripts/script_function_tag.php';\n                    $callback = 'default_script_function_tag';\n                    return true;\n                case 'localfunction':\n                    $callback = 'default_local_function_tag';\n                    return true;\n                default:\n                return false;\n            }\n        case Smarty::PLUGIN_COMPILER:\n            switch ($name) {\n                case 'scriptcompilerfunction':\n                    $script = './scripts/script_compiler_function_tag.php';\n                    $callback = 'default_script_compiler_function_tag';\n                    return true;\n                default:\n                return false;\n            }\n        case Smarty::PLUGIN_BLOCK:\n            switch ($name) {\n                case 'scriptblock':\n                    $script = './scripts/script_block_tag.php';\n                    $callback = 'default_script_block_tag';\n                    return true;\n                default:\n                return false;\n            }\n        default:\n        return false;\n    }\n }\n\n?>\n

Note

The return callback must be static; a function name or an array of class and method name.

Dynamic callbacks like objects methods are not supported.

"},{"location":"programmers/api-functions/api-register-filter/","title":"Api register filter","text":"

registerFilter()

dynamically register filters

"},{"location":"programmers/api-functions/api-register-filter/#description","title":"Description","text":"

void

registerFilter

string

type

mixed

callback

Use this to dynamically register filters to operate on a templates. It uses the following parameters:

NOTE.PARAMETER.FUNCTION

A prefilter runs through the template source before it gets compiled. See template prefilters for more information on how to setup a prefiltering function.

A postfilter runs through the template code after it was compiled to PHP. See template postfilters for more information on how to setup a postfiltering function.

A outputfilter operates on a template\\'s output before it is displayed. See template output filters for more information on how to set up an output filter function.

See also unregisterFilter(), loadFilter(), template pre filters template post filters template output filters section.

"},{"location":"programmers/api-functions/api-register-object/","title":"Api register object","text":"

registerObject()

register an object for use in the templates

"},{"location":"programmers/api-functions/api-register-object/#description","title":"Description","text":"

void

registerObject

string

object_name

object

object

array

allowed_methods_properties

boolean

format

array

block_methods

Note

When you register/assign objects to templates, be sure that all properties and methods accessed from the template are for presentation purposes only. It is very easy to inject application logic through objects, and this leads to poor designs that are difficult to manage. See the Best Practices section of the Smarty website.

See the objects section for more information.

See also getRegisteredObject(), and unregisterObject().

"},{"location":"programmers/api-functions/api-register-plugin/","title":"Api register plugin","text":"

registerPlugin()

dynamically register plugins

"},{"location":"programmers/api-functions/api-register-plugin/#description","title":"Description","text":"

void

registerPlugin

string

type

string

name

mixed

callback

bool

cacheable

mixed

cache_attrs

This method registers functions or methods defined in your script as plugin. It uses the following parameters:

  • cacheable can be omitted in most cases. See controlling cacheability of plugins output on how to use this properly.
<?php\n$smarty->registerPlugin(\"function\",\"date_now\", \"print_current_date\");\n\nfunction print_current_date($params, $smarty)\n{\n  if(empty($params[\"format\"])) {\n    $format = \"%b %e, %Y\";\n  } else {\n    $format = $params[\"format\"];\n  }\n  return strftime($format,time());\n}\n?>\n

And in the template

{date_now}\n\n{* or to format differently *}\n{date_now format=\"%Y/%m/%d\"}\n\n\n<?php\n// function declaration\nfunction do_translation ($params, $content, $smarty, &$repeat, $template)\n{\n  if (isset($content)) {\n    $lang = $params[\"lang\"];\n    // do some translation with $content\n    return $translation;\n  }\n}\n\n// register with smarty\n$smarty->registerPlugin(\"block\",\"translate\", \"do_translation\");\n?>\n

Where the template is:

{translate lang=\"br\"}Hello, world!{/translate}\n\n\n\n\n<?php\n\n// let's map PHP's stripslashes function to a Smarty modifier.\n$smarty->registerPlugin(\"modifier\",\"ss\", \"stripslashes\");\n\n?>\n

In the template, use ss to strip slashes.

<?php\n{$var|ss}\n?>\n

See also unregisterPlugin(), plugin functions, plugin block functions, plugin compiler functions, and the creating plugin modifiers section.

"},{"location":"programmers/api-functions/api-register-resource/","title":"Api register resource","text":"

registerResource()

dynamically register resources

"},{"location":"programmers/api-functions/api-register-resource/#description","title":"Description","text":"

void

registerResource

string

name

Smarty_resource

resource_handler

Use this to dynamically register a Resource plugin with Smarty. Pass in the name of the Resource and the object extending Smarty_Resource. See template resources for more information on how to setup a function for fetching templates.

Note

A resource name must be at least two characters in length. One character resource names will be ignored and used as part of the file path, such as $smarty->display('c:/path/to/index.tpl');

Note

Prior to Smarty 3.1 registerResource() accepted an array of callback functions. While this is still possible for backward compatibility reasons, it is strongly discouraged as callback functions have been deprecated as of Smarty 3.1.

<?php\n$smarty->registerResource('mysql', new My_Resource_Mysql());\n?>\n

See also unregisterResource() and the template resources section.

"},{"location":"programmers/api-functions/api-set-plugins-dir/","title":"Api set plugins dir","text":"

setPluginsDir()

set the directories where plugins are stored

"},{"location":"programmers/api-functions/api-set-plugins-dir/#description","title":"Description","text":"

Smarty

setPluginsDir

string|array

plugins_dir

<?php\n\n// set a single directory where the plugins are stored\n$smarty->setPluginsDir('./plugins');\n\n// view the plugins dir chain\nvar_dump($smarty->getPluginsDir());\n\n// set multiple director\u00edes where plugins are stored\n$smarty->setPluginsDir(array(\n    './plugins',\n    './plugins_2',\n));\n\n// view the plugins dir chain\nvar_dump($smarty->getPluginsDir());\n\n// chaining of method calls\n$smarty->setTemplateDir('./templates')\n       ->setPluginsDir('./plugins')\n       ->setCompileDir('./templates_c')\n       ->setCacheDir('./cache');\n\n?>\n

See also getPluginsDir(), addPluginsDir() and $plugins_dir.

"},{"location":"programmers/api-functions/api-test-install/","title":"Api test install","text":"

testInstall()

checks Smarty installation

"},{"location":"programmers/api-functions/api-test-install/#description","title":"Description","text":"

void

testInstall

This function verifies that all required working folders of the Smarty installation can be accessed. It does output a corresponding protocol.

<?php\nuse Smarty\\Smarty;\n$smarty  = new Smarty();\n$smarty->testInstall();\n?>\n
"},{"location":"programmers/api-functions/api-unregister-cacheresource/","title":"Api unregister cacheresource","text":"

unregisterCacheResource()

dynamically unregister a CacheResource plugin

"},{"location":"programmers/api-functions/api-unregister-cacheresource/#description","title":"Description","text":"

void

unregisterCacheResource

string

name

Pass in the name of the CacheResource.

<?php\n\n$smarty->unregisterCacheResource('mysql');\n\n?>\n

See also registerCacheResource() and the Custom CacheResource Implementation section.

"},{"location":"programmers/api-functions/api-unregister-filter/","title":"Api unregister filter","text":"

unregisterFilter()

dynamically unregister a filter

"},{"location":"programmers/api-functions/api-unregister-filter/#description","title":"Description","text":"

void

unregisterFilter

string

type

string|array

callback

Use this to dynamically unregister filters. It uses the following parameters:

See also registerFilter().

"},{"location":"programmers/api-functions/api-unregister-object/","title":"Api unregister object","text":"

unregisterObject()

dynamically unregister an object

"},{"location":"programmers/api-functions/api-unregister-object/#description","title":"Description","text":"

void

unregisterObject

string

object_name

See also registerObject() and objects section

"},{"location":"programmers/api-functions/api-unregister-plugin/","title":"Api unregister plugin","text":"

unregisterPlugin

dynamically unregister plugins

"},{"location":"programmers/api-functions/api-unregister-plugin/#description","title":"Description","text":"

void

unregisterPlugin

string

type

string

name

This method unregisters plugins which previously have been registered by registerPlugin(), It uses the following parameters:

<?php\n\n// we don't want template designers to have access to function plugin \"date_now\" \n$smarty->unregisterPlugin(\"function\",\"date_now\");\n\n?>\n

See also registerPlugin().

"},{"location":"programmers/api-functions/api-unregister-resource/","title":"Api unregister resource","text":"

unregisterResource()

dynamically unregister a resource plugin

"},{"location":"programmers/api-functions/api-unregister-resource/#description","title":"Description","text":"

void

unregisterResource

string

name

Pass in the name of the resource.

<?php\n\n$smarty->unregisterResource('db');\n\n?>\n

See also registerResource() and template resources

"},{"location":"programmers/api-variables/variable-auto-literal/","title":"\\$auto_literal {#variable.auto.literal}","text":"

The Smarty delimiter tags { and } will be ignored so long as they are surrounded by white space. This behavior can be disabled by setting auto_literal to false.

::: {.informalexample}

<?php\n$smarty->auto_literal = false;\n?>\n

:::

See also Escaping Smarty parsing,

"},{"location":"programmers/api-variables/variable-cache-dir/","title":"\\$cache_dir {#variable.cache.dir}","text":"

This is the name of the directory where template caches are stored. By default this is ./cache, meaning that Smarty will look for the cache/ directory in the same directory as the executing php script. This directory must be writeable by the web server, see install for more info.

You can also use your own custom cache implementation to control cache files, which will ignore this setting. See also $use_sub_dirs.

Note

This setting must be either a relative or absolute path. include_path is not used for writing files.

Note

It is not recommended to put this directory under the web server document root.

Note

As of Smarty 3.1 the attribute \\$cache_dir is no longer accessible directly. Use getCacheDir() and setCacheDir() instead.

See also getCacheDir(), setCacheDir(), $caching, $use_sub_dirs, $cache_lifetime, $cache_modified_check and the caching section.

"},{"location":"programmers/api-variables/variable-cache-id/","title":"\\$cache_id {#variable.cache.id}","text":"

Persistent cache_id identifier. As an alternative to passing the same $cache_id to each and every function call, you can set this $cache_id and it will be used implicitly thereafter.

With a $cache_id you can have multiple cache files for a single call to display() or fetch() depending for example from different content of the same template. See the caching section for more information.

"},{"location":"programmers/api-variables/variable-cache-lifetime/","title":"\\$cache_lifetime {#variable.cache.lifetime}","text":"

This is the length of time in seconds that a template cache is valid. Once this time has expired, the cache will be regenerated.

  • $caching must be turned on (either \\Smarty\\Smarty::CACHING_LIFETIME_CURRENT or \\Smarty\\Smarty::CACHING_LIFETIME_SAVED) for $cache_lifetime to have any purpose.

  • A $cache_lifetime value of -1 will force the cache to never expire.

  • A value of 0 will cause the cache to always regenerate (good for testing only, to disable caching a more efficient method is to set $caching = \\Smarty\\Smarty::CACHING_OFF).

  • If you want to give certain templates their own cache lifetime, you could do this by setting $caching = \\Smarty\\Smarty::CACHING_LIFETIME_SAVED, then set $cache_lifetime to a unique value just before calling display() or fetch().

If $force_compile is enabled, the cache files will be regenerated every time, effectively disabling caching. You can clear all the cache files with the clear_all_cache() function, or individual cache files (or groups) with the clear_cache() function.

"},{"location":"programmers/api-variables/variable-cache-locking/","title":"\\$cache_locking {#variable.cache.locking}","text":"

Cache locking avoids concurrent cache generation. This means resource intensive pages can be generated only once, even if they\\'ve been requested multiple times in the same moment.

Cache locking is disabled by default. To enable it set $cache_locking to TRUE.

See also $locking_timeout

"},{"location":"programmers/api-variables/variable-cache-modified-check/","title":"\\$cache_modified_check {#variable.cache.modified.check}","text":"

If set to TRUE, Smarty will respect the If-Modified-Since header sent from the client. If the cached file timestamp has not changed since the last visit, then a '304: Not Modified' header will be sent instead of the content.

See also $caching, $cache_lifetime, and the caching section.

"},{"location":"programmers/api-variables/variable-caching-type/","title":"\\$caching_type {#variable.caching.type}","text":"

This property specifies the name of the caching handler to use. It defaults to file, enabling the internal filesystem based cache handler.

See Custom Cache Implementation for pointers on setting up your own cache handler.

"},{"location":"programmers/api-variables/variable-caching/","title":"\\$caching {#variable.caching}","text":"

This tells Smarty whether or not to cache the output of the templates to the $cache_dir. By default this is set to the constant \\Smarty\\Smarty::CACHING_OFF. If your templates consistently generate the same content, it is advisable to turn on $caching, as this may result in significant performance gains.

You can also have multiple caches for the same template.

  • A constant value of \\Smarty\\Smarty::CACHING_LIFETIME_CURRENT or \\Smarty\\Smarty ::CACHING_LIFETIME_SAVED enables caching.

  • A value of \\Smarty\\Smarty::CACHING_LIFETIME_CURRENT tells Smarty to use the current $cache_lifetime variable to determine if the cache has expired.

  • A value of \\Smarty\\Smarty::CACHING_LIFETIME_SAVED tells Smarty to use the $cache_lifetime value at the time the cache was generated. This way you can set the $cache_lifetime just before fetching the template to have granular control over when that particular cache expires. See also isCached().

  • If $compile_check is enabled, the cached content will be regenerated if any of the templates or config files that are part of this cache are changed.

  • If $force_compile is enabled, the cached content will always be regenerated.

See also $cache_dir, $cache_lifetime, $cache_modified_check, is_cached() and the caching section.

"},{"location":"programmers/api-variables/variable-compile-dir/","title":"\\$compile_dir {#variable.compile.dir}","text":"

This is the name of the directory where compiled templates are located. By default this is ./templates_c, meaning that Smarty will look for the templates_c/ directory in the same directory as the executing php script. This directory must be writeable by the web server, see install for more info.

Note

This setting must be either a relative or absolute path. include_path is not used for writing files.

Note

It is not recommended to put this directory under the web server document root.

Note

As of Smarty 3.1 the attribute \\$compile_dir is no longer accessible directly. Use getCompileDir() and setCompileDir() instead.

See also getCompileDir(), setCompileDir(), $compile_id and $use_sub_dirs.

"},{"location":"programmers/api-variables/variable-compile-id/","title":"\\$compile_id {#variable.compile.id}","text":"

Persistent compile identifier. As an alternative to passing the same $compile_id to each and every function call, you can set this $compile_id and it will be used implicitly thereafter.

If you use the same template with different pre- and/or post-filters you must use a unique $compile_id to keep the compiled template files separated.

For example a prefilter that localizes your templates (that is: translates language dependent parts) at compile time, then you could use the current language as $compile_id and you will get a set of compiled templates for each language you use.

<?php\n$smarty->compile_id = 'en';\n?>\n

Another application would be to use the same compile directory across multiple domains / multiple virtual hosts.

<?php\n\n$smarty->compile_id = $_SERVER['SERVER_NAME'];\n$smarty->compile_dir = '/path/to/shared_compile_dir';\n\n?>\n

Note

In Smarty 3 a $compile_id is no longer required to keep templates with same name in different $template_dir folders separated. The $template_dir file path is encoded in the file name of compiled and cached template files.

"},{"location":"programmers/api-variables/variable-compile-locking/","title":"\\$compile_locking {#variable.compile.locking}","text":"

Compile locking avoids concurrent compilation of the same template.

Compile locking is enabled by default. To disable it set $compile_locking to FALSE.

"},{"location":"programmers/api-variables/variable-compiler-class/","title":"\\$compiler_class {#variable.compiler.class}","text":"

Specifies the name of the compiler class that Smarty will use to compile the templates. The default is \\'Smarty_Compiler\\'. For advanced users only.

"},{"location":"programmers/api-variables/variable-config-booleanize/","title":"\\$config_booleanize {#variable.config.booleanize}","text":"

If set to TRUE, config files values of on/true/yes and off/false/no get converted to boolean values automatically. This way you can use the values in the template like so: {if #foobar#}...{/if}. If foobar was on, true or yes, the {if} statement will execute. Defaults to TRUE.

"},{"location":"programmers/api-variables/variable-config-dir/","title":"\\$config_dir {#variable.config.dir}","text":"

This is the directory used to store config files used in the templates. Default is ./configs, meaning that Smarty will look for the configs/ directory in the same directory as the executing php script.

Note

It is not recommended to put this directory under the web server document root.

Note

As of Smarty 3.1 the attribute \\$config_dir is no longer accessible directly. Use getConfigDir(), setConfigDir() and addConfigDir() instead.

See also getConfigDir(), setConfigDir() and addConfigDir().

"},{"location":"programmers/api-variables/variable-config-overwrite/","title":"\\$config_overwrite {#variable.config.overwrite}","text":"

If set to TRUE, the default then variables read in from config files will overwrite each other. Otherwise, the variables will be pushed onto an array. This is helpful if you want to store arrays of data in config files, just list each element multiple times.

This examples uses {cycle} to output a table with alternating red/green/blue row colors with $config_overwrite = FALSE.

The config file.

# row colors\nrowColors = #FF0000\nrowColors = #00FF00\nrowColors = #0000FF\n

The template with a {section} loop.

<table>\n  {section name=r loop=$rows}\n  <tr bgcolor=\"{cycle values=#rowColors#}\">\n    <td> ....etc.... </td>\n  </tr>\n  {/section}\n</table>\n

See also {config_load}, getConfigVars(), clearConfig(), configLoad() and the config files section.

"},{"location":"programmers/api-variables/variable-config-read-hidden/","title":"\\$config_read_hidden {#variable.config.read.hidden}","text":"

If set to TRUE, hidden sections ie section names beginning with a period(.) in config files can be read from templates. Typically you would leave this FALSE, that way you can store sensitive data in the config files such as database parameters and not worry about the template loading them. FALSE by default.

"},{"location":"programmers/api-variables/variable-debug-template/","title":"\\$debug_tpl {#variable.debug_template}","text":"

This is the name of the template file used for the debugging console. By default, it is named debug.tpl and is located in src/debug.tpl.

See also $debugging and the debugging console section.

"},{"location":"programmers/api-variables/variable-debugging-ctrl/","title":"\\$debugging_ctrl {#variable.debugging.ctrl}","text":"

This allows alternate ways to enable debugging. NONE means no alternate methods are allowed. URL means when the keyword SMARTY_DEBUG is found in the QUERY_STRING, debugging is enabled for that invocation of the script. If $debugging is TRUE, this value is ignored.

<?php\n// shows debug console only on localhost ie\n// http://localhost/script.php?foo=bar&SMARTY_DEBUG\n$smarty->debugging = false; // the default\n$smarty->debugging_ctrl = ($_SERVER['SERVER_NAME'] == 'localhost') ? 'URL' : 'NONE';\n?>\n

See also debugging console section, $debugging and $smarty_debug_id.

"},{"location":"programmers/api-variables/variable-debugging/","title":"\\$debugging {#variable.debugging}","text":"

This enables the debugging console. The console is a javascript popup window that informs you of the included templates, variables assigned from php and config file variables for the current script. It does not show variables assigned within a template with the {assign} function.

The console can also be enabled from the url with $debugging_ctrl.

See also {debug}, $debug_tpl, and $debugging_ctrl.

"},{"location":"programmers/api-variables/variable-default-config-handler-func/","title":"\\$default_config_handler_func {#variable.default.config.handler.func}","text":"

This function is called when a config file cannot be obtained from its resource.

Note

The default handler is currently only invoked for file resources. It is not triggered when the resource itself cannot be found, in which case a \\Smarty\\Exception is thrown.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->default_config_handler_func = 'my_default_config_handler_func';\n\n/**\n * Default Config Handler\n *\n * called when Smarty's file: resource is unable to load a requested file\n * \n * @param string   $type     resource type (e.g. \"file\", \"string\", \"eval\", \"resource\")\n * @param string   $name     resource name (e.g. \"foo/bar.tpl\")\n * @param string  &$content  config's content\n * @param integer &$modified config's modification time\n * @param Smarty   $smarty   Smarty instance\n * @return string|boolean   path to file or boolean true if $content and $modified \n *                          have been filled, boolean false if no default config \n *                          could be loaded\n */\nfunction my_default_config_handler_func($type, $name, &$content, &$modified, Smarty $smarty) {\n    if (false) {\n        // return corrected filepath\n        return \"/tmp/some/foobar.tpl\";\n    } elseif (false) {\n        // return a config directly\n        $content = 'someVar = \"the config source\"';\n        $modified = time();\n        return true;\n    } else {\n        // tell smarty that we failed\n        return false;\n    }\n}\n\n?>\n
"},{"location":"programmers/api-variables/variable-default-config-type/","title":"\\$default_config_type {#variable.default.config.type}","text":"

This tells smarty what resource type to use for config files. The default value is file, meaning that $smarty->configLoad('test.conf') and $smarty->configLoad('file:test.conf') are identical in meaning. See the resource chapter for more details.

"},{"location":"programmers/api-variables/variable-default-modifiers/","title":"\\$default_modifiers {#variable.default.modifiers}","text":"

This is an array of modifiers to implicitly apply to every variable in a template. For example, to HTML-escape every variable by default, use array('escape:\"htmlall\"'). To make a variable exempt from default modifiers, add the \\'nofilter\\' attribute to the output tag such as {$var nofilter}.

"},{"location":"programmers/api-variables/variable-default-resource-type/","title":"\\$default_resource_type {#variable.default.resource.type}","text":"

This tells smarty what resource type to use implicitly. The default value is file, meaning that $smarty->display('index.tpl') and $smarty->display('file:index.tpl') are identical in meaning. See the resource chapter for more details.

"},{"location":"programmers/api-variables/variable-default-template-handler-func/","title":"\\$default_template_handler_func {#variable.default.template.handler.func}","text":"

This function is called when a template cannot be obtained from its resource.

Note

The default handler is currently only invoked for file resources. It is not triggered when the resource itself cannot be found, in which case a \\Smarty\\Exception is thrown.

<?php\nuse Smarty\\Smarty;\n$smarty = new Smarty();\n$smarty->default_template_handler_func = 'my_default_template_handler_func';\n\n/**\n * Default Template Handler\n *\n * called when Smarty's file: resource is unable to load a requested file\n * \n * @param string   $type     resource type (e.g. \"file\", \"string\", \"eval\", \"resource\")\n * @param string   $name     resource name (e.g. \"foo/bar.tpl\")\n * @param string  &$content  template's content\n * @param integer &$modified template's modification time\n * @param Smarty   $smarty   Smarty instance\n * @return string|boolean   path to file or boolean true if $content and $modified \n *                          have been filled, boolean false if no default template \n *                          could be loaded\n */\nfunction my_default_template_handler_func($type, $name, &$content, &$modified, Smarty $smarty) {\n    if (false) {\n        // return corrected filepath\n        return \"/tmp/some/foobar.tpl\";\n    } elseif (false) {\n        // return a template directly\n        $content = \"the template source\";\n        $modified = time();\n        return true;\n    } else {\n        // tell smarty that we failed\n        return false;\n    }\n}\n\n?>\n
"},{"location":"programmers/api-variables/variable-error-reporting/","title":"\\$error_reporting {#variable.error.reporting}","text":"

When this value is set to a non-null-value it\\'s value is used as php\\'s error_reporting level inside of display() and fetch().

Smarty 3.1.2 introduced the muteExpectedErrors() function. Calling \\Smarty\\Smarty::muteExpectedErrors(); after setting up custom error handling will ensure that warnings and notices (deliberately) produced by Smarty will not be passed to other custom error handlers. If your error logs are filling up with warnings regarding filemtime() or unlink() calls, please enable Smarty\\'s error muting.

See also debugging and troubleshooting.

"},{"location":"programmers/api-variables/variable-escape-html/","title":"\\$escape_html {#variable.escape.html}","text":"

Setting $escape_html to TRUE will escape all template variable output by wrapping it in htmlspecialchars({$output}, ENT_QUOTES, $char_set);, which is the same as {$variable|escape:\"html\"}.

Template designers can choose to selectively disable this feature by adding the nofilter flag: {$variable nofilter}.

Modifiers and Filters are run in the following order: modifier, default_modifier, \\$escape_html, registered variable filters, autoloaded variable filters, template instance\\'s variable filters. Everything except the individual modifier can be disabled with the nofilter flag.

Note

This is a compile time option. If you change the setting you must make sure that the templates get recompiled.

"},{"location":"programmers/api-variables/variable-force-cache/","title":"\\$force_cache {#variable.force.cache}","text":"

This forces Smarty to (re)cache templates on every invocation. It does not override the $caching level, but merely pretends the template has never been cached before.

"},{"location":"programmers/api-variables/variable-force-compile/","title":"\\$force_compile {#variable.force.compile}","text":"

This forces Smarty to (re)compile templates on every invocation. This setting overrides $compile_check. By default this is FALSE. This is handy for development and debugging. It should never be used in a production environment. If $caching is enabled, the cache file(s) will be regenerated every time.

"},{"location":"programmers/api-variables/variable-left-delimiter/","title":"\\$left_delimiter {#variable.left.delimiter}","text":"

This is the left delimiter used by the template language. Default is {.

See also $right_delimiter and escaping smarty parsing .

"},{"location":"programmers/api-variables/variable-locking-timeout/","title":"\\$locking_timeout {#variable.locking.timeout}","text":"

This is maximum time in seconds a cache lock is valid to avoid dead locks. The default value is 10 seconds.

See also $cache_locking

"},{"location":"programmers/api-variables/variable-merge-compiled-includes/","title":"\\$merge_compiled_includes {#variable.merge.compiled.includes}","text":"

By setting $merge_compiled_includes to TRUE Smarty will merge the compiled template code of subtemplates into the compiled code of the main template. This increases rendering speed of templates using a many different sub-templates.

Individual sub-templates can be merged by setting the inline option flag within the {include} tag. $merge_compiled_includes does not have to be enabled for the inline merge.

::: {.informalexample}

<?php\n$smarty->merge_compiled_includes = true;\n?>\n

:::

Note

This is a compile time option. If you change the setting you must make sure that the templates get recompiled.

See also {include} tag

"},{"location":"programmers/api-variables/variable-right-delimiter/","title":"\\$right_delimiter {#variable.right.delimiter}","text":"

This is the right delimiter used by the template language. Default is }.

See also $left_delimiter and escaping smarty parsing.

"},{"location":"programmers/api-variables/variable-smarty-debug-id/","title":"\\$smarty_debug_id {#variable.smarty.debug.id}","text":"

The value of $smarty_debug_id defines the URL keyword to enable debugging at browser level. The default value is SMARTY_DEBUG.

See also debugging console section, $debugging and $debugging_ctrl.

"},{"location":"programmers/api-variables/variable-template-dir/","title":"\\$template_dir {#variable.template.dir}","text":"

This is the name of the default template directory. If you do not supply a resource type when including files, they will be found here. By default this is ./templates, meaning that Smarty will look for the templates/ directory in the same directory as the executing php script. \\$template_dir can also be an array of directory paths: Smarty will traverse the directories and stop on the first matching template found.

Note

It is not recommended to put this directory under the web server document root.

Note As of Smarty 3.1 the attribute \\$template_dir is no longer accessible directly. Use getTemplateDir(), setTemplateDir() and addTemplateDir() instead.

See also Template Resources, getTemplateDir(), setTemplateDir() and addTemplateDir().

"},{"location":"programmers/api-variables/variable-use-sub-dirs/","title":"\\$use_sub_dirs {#variable.use.sub.dirs}","text":"

Smarty will create subdirectories under the compiled templates and cache directories if $use_sub_dirs is set to TRUE, default is FALSE. In an environment where there are potentially tens of thousands of files created, this may help the filesystem speed. On the other hand, some environments do not allow PHP processes to create directories, so this must be disabled which is the default.

Sub directories are more efficient, so use them if you can. Theoretically you get much better performance on a filesystem with 10 directories each having 100 files, than with 1 directory having 1000 files. This was certainly the case with Solaris 7 (UFS)... with newer filesystems such as ext3 and especially reiserfs, the difference is almost nothing.

Note

  • $use_sub_dirs=true doesn\\'t work with safe_mode=On, that\\'s why it\\'s switchable and why it\\'s off by default.

  • $use_sub_dirs=true on Windows can cause problems.

  • Safe_mode is being deprecated in PHP6.

See also $compile_id, $cache_dir, and $compile_dir.

"}]} \ No newline at end of file diff --git a/5.0/sitemap.xml b/5.0/sitemap.xml new file mode 100644 index 000000000..ca7674f24 --- /dev/null +++ b/5.0/sitemap.xml @@ -0,0 +1,928 @@ + + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + + None + 2023-08-06 + daily + + \ No newline at end of file diff --git a/5.0/sitemap.xml.gz b/5.0/sitemap.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..f588e89fe2430af04e06b296ba0996b1a18fc07a GIT binary patch literal 296 zcmb2|=HQrMa3O{1e{p6>YHnhIUPW#W!`rjodCdkQtq&{18g1CEJ42REEliUwyQ0U? z$nBA!9<$wKw|?b{q-(r?${)RctX%)?hcVyH?emxPFATYTXvLX!E3?`R@2?;K&62-z zG55`NlMerzL3}~0^p;-kzV_Kh{F1tTn7ZbpD_JXdKUMlAm=$cJz5V30oplBG^OD;m zc5j#1bM<=e-vCdkH23#@I&p1QX?W|kdcS{fX04Lf3tK;F_lo}>1vCO5 U{(ro!Xty(-_iV?PLs1M20J^G=LI3~& literal 0 HcmV?d00001 diff --git a/versions.json b/versions.json index c58cf3af0..aa992aca5 100644 --- a/versions.json +++ b/versions.json @@ -1 +1 @@ -[{"version": "5.x", "title": "5.x", "aliases": ["rc"]}, {"version": "4.x", "title": "4.x", "aliases": ["stable"]}] \ No newline at end of file +[{"version": "5.x", "title": "5.x", "aliases": ["rc"]}, {"version": "5.0", "title": "5.0", "aliases": []}, {"version": "4.x", "title": "4.x", "aliases": ["stable"]}] \ No newline at end of file