Seb Gaillard
|
Wednesday 22 July 2009 12:10:58 pm
Hi,
I want to make an excel export of all content of a class in the same page. I have some memory limit problem :
<b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted (tried to allocate 120061917 bytes) in <b>/var/www/psycho/var/mySite/cache/template/compiled/partners-68dce9a3d2b5c693cca5f961b1369a56.php</b> on line <b>688</b><br />
my excel file is generated by clicking on a link like this
<a href={concat('layout/set/excel/content/view/partners/(class)/mySite_interview')|ezurl()}>Interview</a>
As there is no possibility to navigate between differents pages (with offset parameter), I try to "simulate" the pagination mechanism like that
{def $depth= 7
$parentNodeId = 2
$counter=0
$offset=0
$limit=25
$filter_hash=true()
$count = fetch('content','list_count',hash('parent_node_id', $parentNodeId,
'main_node_only', true(),
'depth', $depth,
'class_filter_type', include,
'class_filter_array', array($view_parameters.class )
)
)
$ForLimit = ceil($count|div($limit))
}
<html>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<table style="border: 1px solid black">
<tr>
<td colspan="3" style="font-weight: bold; background-color: silver;">
Article [{$count}]
</td>
</tr>
<tr>
<td></td>
<td style="font-weight: bold;">Type of content</td>
<td style="font-weight: bold;">Title</td>
</tr>
{for 0 to $ForLimit}
{set $offset=$offset|sum($limit)
$filter_hash=hash('parent_node_id', $parentNodeId,
'main_node_only', true(),
'limit', $limit,
'offset', $offset,
'class_filter_type', 'include',
'class_filter_array', array( $view_parameters.class ),
'depth', $depth,
)
}
{* by creating a new set of $elements, I hope to spare memory*}
{def $elements=fetch('content','list',$filter_hash)}
{foreach $elements as $element}
<tr>
{set $counter = inc( $counter )}
<td>{$counter}</td>
<td>{$element.class_identifier|wash()}</td>
<td>{$element.name|wash()}</td>
</tr>
{/foreach}
{* free memory ???*}
{undef $elements}
{for}
</table>
</html>
But it doesn't work. Someone has a solution?
|
Max Keil
|
Wednesday 22 July 2009 4:41:49 pm
Hi Seb, your last 3 line looks ike this! I see, that you forgot to close the "for" method?
{undef $elements}
{for}
</table>
</html>
For exporting huge information containers, I would prefer to use native PHP functions instead of Template code! It's also not clean to def the same variable within the {for}{/for}. Use "set" for this and def the variable before the loop.
Mit freundlichen Grüßen
Best regards
Max Keil
____________________________________________________________
eZ Publish Gold Partner - http://www.all2e.com
http://ez.no/partners/worldwide_partners/all2e_gmbh
|
Seb Gaillard
|
Thursday 23 July 2009 12:35:39 am
Hi Max, Effectively I forgot to close the for method... Now, it work's fine! I think that after a lot of hours with the nose through the code, I didn't see anything...
Otherwise, I create (def) the $elements varliable in each loop because I hope that "{undef}" free memory. Do you know:
1/ If it's true ? 2/ if I use {set ...}, the memory is spared too? Do you know where can I find an exemple who "use native PHP functions instead of Template code" for doing this ? Thank's, Seb
|