Hi,
I'm going to implement a CMS.
The first classes are created and now I'm on the menu.
The menu should contain a template so that I only have to create an array
with the menu structure and a template with the HTML.
I've got:
$tmpl = array(
'navigationClassCSS' => 'nav',
'menu' => array(
array(
'link' => 'http://...',
'name' => 'Linkname',
'submenu' => array(
array(
'link' => 'http://...',
'name' => 'Linkname',
),
array(
'link' => 'http://...',
'name' => 'Linkname',
),
),
),
array(
'link' => 'http://...',
'name' => 'Linkname',
),
),
);
Template:
<ul class="<?=$tmpl['navigationClass'] ?>">
<?php foreach($tmpl['menu'] as $links) { ?>
<li>
<a href="<?=$links['link'] ?>">
<?=$links['name'] ?>
</a>
<?php if (isset($links['submenu'])) { ?>
<?php foreach($tmpl['submenu'] as $subLinks) { ?>
<li>
<a href="<?=$subLinks['link']
?>">
<?=$subLinks['name'] ?>
</a>
</li>
<?php } ?>
<?php } ?>
</li>
<?php } ?>
</ul>
And till now I include the template with:
include 'template.phtml';
But I think this is no proper way to include the template.
I want it the following way:
$template = new Template('filename.phtml', $tmpl); //$tmpl is the array with
the placeholders
echo $template->get(); //get the completed HTML from template
Also I thought about a custom placeholder replacer to use a templates like
this:
<ul class="[[navigationClass]]">
[[foreach|menu]]
<li>
<a href="[[menu:link]]">
[[menu:name]]
</a>
[[if|menu:submenu]]
[[foreach|menu:submenu]]
<li>
<a href="[[menu:submenu:link]]">
[[menu:submenu:name]]
</a>
</li>
[[/foreach|menu:submenu]]
[[/if|submenu]]
</li>
[[/foreach|menu]]
</ul>
How can I do this?
I dont want to use TemplateSystems like Smarty, because I want to keep it
really simple.
I also thought about 'compiling' the templates to reset the [[placeholders]]
with php-code -> I've got template.tpl which will be compiled to
template.phtml. But I think this isn't that good.
--
View this message in context:
http://www.nabble.com/Menu-Templating-tp22368087p22368087.html
Sent from the Zend Framework mailing list archive at Nabble.com.