Forums / Suggestions / PHP execution in templates

PHP execution in templates

Author Message

Jan Borsodi

Saturday 26 July 2003 3:52:23 am

From the many threads on how to execute php functions or scripts in templates it only seems right to provide a simpler way to do this than it is now. (At least for integrating old scripts to eZ publish)

Note: eZ publish will never support inline PHP in templates, the goal is to have a clear separation of code and design. And also to have better control over what is executed.

1.
Create a runscript template operator. It will take the scriptname as the first parameter and will look for the scriptname in a script repository. The rest of the operator parameters are optional arguments which are sent to the script.

Repositories are defined in a new .ini file and will also support extensions. This means that it's not possible execute arbitrary scripts/php-files in eZ publish, ie. it's safer.

The optional operator parameters can be defined to map to named php variables when the script is run. For instance the first optional parameter can be mapped to a variable called $name, etc.
The default behaviour is to have all optional parameters in a sequential array.

Any output of the script is returned from the operator as a single string. To catch the output the php functions ob_start(), ob_get_contents() and ob_end_clear() is used.

Example:
{runscript('ads.php',$node.id)}

It could also be possible to let runscript be a template function instead of an operator.

2.
Improve the eztemplatephpoperator operator. It was primarily meant to map simple modifying php functions to template operators. For example.
{$str|upcase}

I suggest adding support for sending all operator parameters as php function arguments. For this to happen the operator must be defined in the template.ini file to do so, if not the normal modifying behaviour is used.
For instance mapping php function rand to random operator.
{random(1,5)}

I also suggest a naming convention for these new operators so that they won't clash with new operators in future eZ publish releases.
The best way is perhaps to do automatic prefixing of operators, for instance prefix with php_.
{php_random(1,5)}
The prefix could be set in the template.ini file, so those who don't want it (and accept the consequences with future updates) can remove the prefix.

--
Amos

Documentation: http://ez.no/ez_publish/documentation
FAQ: http://ez.no/ez_publish/documentation/faq

Norman Leutner

Friday 28 November 2003 4:48:16 am

****************************
Create a runscript template operator
****************************

Could you please explain exactly how to create that new "runscript template operator" and where to place it.

thanks

Norman Leutner

Mit freundlichen Grüßen
Best regards

Norman Leutner

____________________________________________________________
eZ Publish Platinum Partner - http://www.all2e.com
http://ez.no/partners/worldwide_partners/all2e_gmbh

eZ debug

Timing: Jan 18 2025 04:20:19
Script start
Timing: Jan 18 2025 04:20:19
Module start 'content'
Timing: Jan 18 2025 04:20:19
Module end 'content'
Timing: Jan 18 2025 04:20:20
Script end

Main resources:

Total runtime0.6976 sec
Peak memory usage4,096.0000 KB
Database Queries191

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0055 587.7109180.8359
Module start 'content' 0.00550.5160 768.5469545.3281
Module end 'content' 0.52150.1761 1,313.8750334.5547
Script end 0.6975  1,648.4297 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.00530.7535210.0003
Check MTime0.00160.2358210.0001
Mysql Total
Database connection0.00050.069710.0005
Mysqli_queries0.614788.12141910.0032
Looping result0.00270.38341890.0000
Template Total0.668095.820.3340
Template load0.00210.305120.0011
Template processing0.665895.443920.3329
Template load and register function0.00010.015010.0001
states
state_id_array0.00260.372410.0026
state_identifier_array0.00090.134820.0005
Override
Cache load0.00170.2495330.0001
Sytem overhead
Fetch class attribute can translate value0.00230.332430.0008
Fetch class attribute name0.00280.398940.0007
XML
Image XML parsing0.00150.211230.0005
class_abstraction
Instantiating content class attribute0.00000.001140.0000
General
dbfile0.00200.2926350.0001
String conversion0.00000.000830.0000
Note: percentages do not add up to 100% because some accumulators overlap

CSS/JS files loaded with "ezjscPacker" during request:

CacheTypePacklevelSourceFiles
CSS0extension/community/design/community/stylesheets/ext/jquery.autocomplete.css
extension/community_design/design/suncana/stylesheets/scrollbars.css
extension/community_design/design/suncana/stylesheets/tabs.css
extension/community_design/design/suncana/stylesheets/roadmap.css
extension/community_design/design/suncana/stylesheets/content.css
extension/community_design/design/suncana/stylesheets/star-rating.css
extension/community_design/design/suncana/stylesheets/syntax_and_custom_tags.css
extension/community_design/design/suncana/stylesheets/buttons.css
extension/community_design/design/suncana/stylesheets/tweetbox.css
extension/community_design/design/suncana/stylesheets/jquery.fancybox-1.3.4.css
extension/bcsmoothgallery/design/standard/stylesheets/magnific-popup.css
extension/sevenx/design/simple/stylesheets/star_rating.css
extension/sevenx/design/simple/stylesheets/libs/fontawesome/css/all.min.css
extension/sevenx/design/simple/stylesheets/main.v02.css
extension/sevenx/design/simple/stylesheets/main.v02.res.css
JS0extension/ezjscore/design/standard/lib/yui/3.17.2/build/yui/yui-min.js
extension/ezjscore/design/standard/javascript/jquery-3.7.0.min.js
extension/community_design/design/suncana/javascript/jquery.ui.core.min.js
extension/community_design/design/suncana/javascript/jquery.ui.widget.min.js
extension/community_design/design/suncana/javascript/jquery.easing.1.3.js
extension/community_design/design/suncana/javascript/jquery.ui.tabs.js
extension/community_design/design/suncana/javascript/jquery.hoverIntent.min.js
extension/community_design/design/suncana/javascript/jquery.popmenu.js
extension/community_design/design/suncana/javascript/jScrollPane.js
extension/community_design/design/suncana/javascript/jquery.mousewheel.js
extension/community_design/design/suncana/javascript/jquery.cycle.all.js
extension/sevenx/design/simple/javascript/jquery.scrollTo.js
extension/community_design/design/suncana/javascript/jquery.cookie.js
extension/community_design/design/suncana/javascript/ezstarrating_jquery.js
extension/community_design/design/suncana/javascript/jquery.initboxes.js
extension/community_design/design/suncana/javascript/app.js
extension/community_design/design/suncana/javascript/twitterwidget.js
extension/community_design/design/suncana/javascript/community.js
extension/community_design/design/suncana/javascript/roadmap.js
extension/community_design/design/suncana/javascript/ez.js
extension/community_design/design/suncana/javascript/ezshareevents.js
extension/sevenx/design/simple/javascript/main.js

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1node/view/full.tplfull/forum_topic.tplextension/sevenx/design/simple/override/templates/full/forum_topic.tplEdit templateOverride template
2content/datatype/view/ezimage.tpl<No override>extension/sevenx/design/simple/templates/content/datatype/view/ezimage.tplEdit templateOverride template
2content/datatype/view/ezxmltext.tpl<No override>extension/community_design/design/suncana/templates/content/datatype/view/ezxmltext.tplEdit templateOverride template
8content/datatype/view/ezxmltags/paragraph.tpl<No override>extension/ezwebin/design/ezwebin/templates/content/datatype/view/ezxmltags/paragraph.tplEdit templateOverride template
7content/datatype/view/ezxmltags/line.tpl<No override>design/standard/templates/content/datatype/view/ezxmltags/line.tplEdit templateOverride template
1pagelayout.tpl<No override>extension/sevenx/design/simple/templates/pagelayout.tplEdit templateOverride template
 Number of times templates used: 21
 Number of unique templates used: 6

Time used to render debug report: 0.0001 secs