Forums / Developer / Execute template code from with object attribute

Execute template code from with object attribute

Author Message

James Robertson

Wednesday 07 September 2005 8:25:19 pm

I would like to be able to execute a piece of eZ publish template code from within an object's attribute content? (ie. Perhaps something a bit like JavaScript eval() function.)

For example: I have Text-block attribute that stored a fragment of XHTML. This fragment is displayed without washing. However, I would like to be able to insert a piece of eZ publish template code within the XHTML and have it execute prior to display.

I imagine, within the template, this might look like:
{$node.data_map.xhtml|eval()}

James Robertson

Wednesday 21 September 2005 4:09:56 pm

I guess one solution might be to modify the eZ template 'include' function so that it can be passed template code as a string instead of having to point to a template file.

What URI schemas does 'include' support. I guess if it support HTTP you could pass it the template code this way - instead of from the file-system.

Anyone have any ideas?

James Robertson

Thursday 18 May 2006 3:24:55 pm

Solution supplied by eZ systems [thanks Kristion] for eZ publish version 3.6.4. It can be added as a 'template operator' extension [good luck working out how to do that ;-]:

/*
 * WARNING:
 * - This function works directly towards the template system, 
 *     and might not be compatible with new versions of eZ publish.
 * - The evaluated code will run in interpreted mode which can behave 
(sligtly) 
 *     different from compiled code, and is slower.
 * - By using fetches and templatecode in content object attributes you can 
 *     make a system which is very hard to maintain!
 *
 * This code should ONLY be used by professionals who understands what they 
are doing
  */
function ezeval( $templateText )
{
     include_once( 'kernel/common/template.php' );
     include_once( 'lib/eztemplate/classes/eztemplate.php' );

     $tpl =& templateInit();
     $root = array( EZ_TEMPLATE_NODE_ROOT, false );
     $resourceData = array( 'resource' => 'design', 'template-filename' =>  
'eval_code' );
     $rootNamespace = '';
     $output = '';
     $tpl->parse( $templateText, $root, $rootNamespace, $resourceData );
     $tpl->process( $root, $output, '', '' );

     return $output;
}

eZ debug

Timing: Jan 19 2025 01:12:53
Script start
Timing: Jan 19 2025 01:12:53
Module start 'content'
Timing: Jan 19 2025 01:12:53
Module end 'content'
Timing: Jan 19 2025 01:12:53
Script end

Main resources:

Total runtime0.7087 sec
Peak memory usage4,096.0000 KB
Database Queries192

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0052 589.0859180.8125
Module start 'content' 0.00520.5914 769.8984478.0000
Module end 'content' 0.59650.1121 1,247.8984332.7422
Script end 0.7087  1,580.6406 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.00380.5309210.0002
Check MTime0.00140.2033210.0001
Mysql Total
Database connection0.00070.092710.0007
Mysqli_queries0.641190.45331920.0033
Looping result0.00190.27061900.0000
Template Total0.687196.920.3436
Template load0.00180.257820.0009
Template processing0.685396.687920.3426
Template load and register function0.00010.018010.0001
states
state_id_array0.00070.101310.0007
state_identifier_array0.00060.089420.0003
Override
Cache load0.00160.2189170.0001
Sytem overhead
Fetch class attribute can translate value0.00230.323820.0011
Fetch class attribute name0.00110.154540.0003
XML
Image XML parsing0.00200.286820.0010
class_abstraction
Instantiating content class attribute0.00000.001860.0000
General
dbfile0.00490.6895270.0002
String conversion0.00000.000630.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
3content/datatype/view/ezimage.tpl<No override>extension/sevenx/design/simple/templates/content/datatype/view/ezimage.tplEdit templateOverride template
3content/datatype/view/ezxmltext.tpl<No override>extension/community_design/design/suncana/templates/content/datatype/view/ezxmltext.tplEdit templateOverride template
4content/datatype/view/ezxmltags/paragraph.tpl<No override>extension/ezwebin/design/ezwebin/templates/content/datatype/view/ezxmltags/paragraph.tplEdit templateOverride template
1content/datatype/view/ezxmltags/line.tpl<No override>design/standard/templates/content/datatype/view/ezxmltags/line.tplEdit templateOverride template
1content/datatype/view/ezxmltags/literal.tpl<No override>extension/community/design/standard/templates/content/datatype/view/ezxmltags/literal.tplEdit templateOverride template
1pagelayout.tpl<No override>extension/sevenx/design/simple/templates/pagelayout.tplEdit templateOverride template
 Number of times templates used: 14
 Number of unique templates used: 7

Time used to render debug report: 0.0002 secs