Hi Leute,
ich brauchte gerade ein Reader-Template, das es mir ermöglicht Felder innerhalb von Gruppen / Containern aufzulisten.
Wenn man zum Beispiel eine Bilderreihe erstellen will aus unterschiedlichen Katalog-Feldern, oder Bereiche anders stylen möchte, kommt man an Untergruppen ala fieldsets nicht vorbei.
Auch z.B. nur 3 Objekte nebeneinander flowtn lassen und die nachfolgenden Felder nicht, ist ohne zusätzliche Untergruppen Container nur sehr aufwendig möglich.
Oder ein / mehrere Accordions mit diversen Feldern ist ohne Untergruppen nicht möglich.
Anbei findet Ihr ein Template, das genau das macht.
Oben einfach ein oder mehrere arrays mit den Spaltennamen der Katalog-Felder erstellen, die jeweils gruppiert werden sollen erstellen und dem $arrGroups - Array anhängen.
(Meine heissen: 1. 'name', 'item_number'
2. 'image_main','image_scale','image_sprayzone'
Dort einfach eure Spaltennamen einsetzen, oder löschen.)
Der Rest kommt von selbst.
Ein Blick in das html Konstrukt:
Die gruppierten Felder werden in <div class="field field_container_X"> DIVs zusammengefasst.
Ich schicke eine laufende Nummer mit, aber man kann im Grunde alles einstellen (Kommentare geben Aufschluss)
Innerhalb der Container sieht es wie gewohnt aus.
Jetzt kann man nach Herzenslust sich "Fieldsets" bauen.
Viele Grüße und viel Spass damit,
Tim
ps. ich hab das _full template hier verbaut. Klar geht das ganze auch mit dem _simple etc.
catalog_full_groups.tpl
ich brauchte gerade ein Reader-Template, das es mir ermöglicht Felder innerhalb von Gruppen / Containern aufzulisten.
Wenn man zum Beispiel eine Bilderreihe erstellen will aus unterschiedlichen Katalog-Feldern, oder Bereiche anders stylen möchte, kommt man an Untergruppen ala fieldsets nicht vorbei.
Auch z.B. nur 3 Objekte nebeneinander flowtn lassen und die nachfolgenden Felder nicht, ist ohne zusätzliche Untergruppen Container nur sehr aufwendig möglich.
Oder ein / mehrere Accordions mit diversen Feldern ist ohne Untergruppen nicht möglich.
Anbei findet Ihr ein Template, das genau das macht.
Oben einfach ein oder mehrere arrays mit den Spaltennamen der Katalog-Felder erstellen, die jeweils gruppiert werden sollen erstellen und dem $arrGroups - Array anhängen.
(Meine heissen: 1. 'name', 'item_number'
2. 'image_main','image_scale','image_sprayzone'
Dort einfach eure Spaltennamen einsetzen, oder löschen.)
Der Rest kommt von selbst.
Ein Blick in das html Konstrukt:
Die gruppierten Felder werden in <div class="field field_container_X"> DIVs zusammengefasst.
Ich schicke eine laufende Nummer mit, aber man kann im Grunde alles einstellen (Kommentare geben Aufschluss)
Innerhalb der Container sieht es wie gewohnt aus.
Jetzt kann man nach Herzenslust sich "Fieldsets" bauen.
Viele Grüße und viel Spass damit,
Tim
ps. ich hab das _full template hier verbaut. Klar geht das ganze auch mit dem _simple etc.
catalog_full_groups.tpl
PHP-Code:
<?php
/**
* Catalog (_full) Reader Template
* for grouping catalog fields together in field containers (like fieldset)
* @author Tim Gatzky <info@tim-gatzky.de>
*/
?>
<?php if (count($this->entries)): ?>
<?php
// Catalog fields (table names) that should be grouped together (array name can be anything you want)
$group1 = array('name','item_number');
$group2 = array('image_main','image_scale','image_sprayzone');
$arrGroups = array($group1,$group2); // attach all groups you like to use
$arrEntries = $this->entries; // the original entries array
$tmp = array(); // store the field groups temporarly
$ignore = array(); // stores all proceeded fields
// build groups
foreach($this->entries as $i => $entry)
{
foreach($entry['data'] as $field=>$data)
{
foreach($arrGroups as $j => $group)
{
// store labels
$label = array();
foreach($group as $f)
$label[] = $entry['data'][$f]['label'];
// start new node and fill all fields in
if(in_array($field, $group))
{
$tmp['data_container_'.$j]['label'] = implode(',', $label); // all field labels comma seperated
$tmp['data_container_'.$j]['value'] = implode(',', $group); // all field names comma seperated
$tmp['data_container_'.$j]['class'] = 'field_container_'.$j; // class name of field container (numeric steps)
$tmp['data_container_'.$j]['type'] = 'field_container';
$tmp['data_container_'.$j]['data'][$field] = $data; // store catalog field data
$ignore[] = $field; // update ignore list
}
}
// store all others
if(!in_array($field, $ignore))
$tmp[$field] = $data;
}
// overwrite the original entries array
$arrEntries[$i]['data'] = $tmp;
}
?>
<div class="layout_full group">
<?php foreach ($arrEntries as $entry): ?>
<div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
<?php if($entry['linkEdit']): ?><?php echo $entry['linkEdit']; ?><?php endif; ?>
<?php foreach ($entry['data'] as $field=>$data): ?>
<?php if ($data['data'] || strlen($data['raw']) && !in_array($field, array('catalog_name','parentJumpTo')) || $field=='notelist'): ?>
<!-- field container -->
<?php if($data['data']): ?>
<div class="field <?php echo $data['class']; ?>">
<?php foreach($data['data'] as $fc_field => $fc_data): ?>
<div class="field <?php echo $fc_field; ?>">
<div class="label"><?php echo $fc_data['label']; ?></div>
<div class="value"><?php echo $fc_data['value']; ?></div>
</div>
<?php endforeach; ?>
</div>
<?php else: ?>
<!-- regular field -->
<div class="field <?php echo $field; ?>">
<!--<div class="value"><?php echo $data['value']; ?></div>
<div class="label"><?php echo $data['label']; ?></div> -->
<span class="label"><?php echo $data['label']; ?>:</span>
<span class="value"><?php echo $data['value']; ?></span>
</div>
<?php endif; ?>
<?php endif; ?>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
</div>
<?php else: ?>
<p class="info">Invalid item reference for catalog.</p>
<?php endif; ?>
)


Kommentar