Hallo zonky
Habe es leider nicht so hingekriegt, wie du es vorgeschlagen hast. Ich bekam im Template keine unterschiedliche Arrays für die selbe Auswahlfelder hin, dementsprechend gab es nichts zu mergen. Vielleicht habe ich dich da aber auch falsch verstanden.
Ich habe aber mal meinen ursprünglichen Plan weiterverfolgt. Und es scheint zu gehen, wenn auch mit Unschönheiten:
- DB-Abfrage in Template, aber nach meinem Empfinden spricht hier nichts dagegen (oder?). Die Optionen sind in einer eigenen MM-Tabelle.
- Ein bisschen viele Schleifen... Mal schauen, ob ich das noch reduzieren kann. Aber ich wollte so wenig wie möglich das Original-Template massakrieren.
Würde mich wunder nehmen, was du dazu meinst.
Danke dir vielmals und Gruss
Template 'mm_filteritem_checkbox.html5'
PHP-Code:
<?php $this->extend('mm_filteritem_default'); ?>
<?php $this->block('formfield'); ?>
<?php if(is_array($this->options) && count($this->options)>0): ?>
<fieldset id="ctrl_<?= $this->urlparam ?>" class="checkbox_container">
<?php
$count = 0;
//Einlesen aller Optionen
$this->import('Database');
$result = $this->Database->prepare("SELECT id, name FROM mm_companydataoption WHERE pid = ? AND published = 1")->execute(1);
$all = array();
while($result->next())
{
$href = "";
$class = "disabled";
$active = 0;
//Abgleich mit den ausgewählten Optionen. Wenn vorhanden, werden die Array-Schlüssel mit den Werten der ausgewählten Optionen überschrieben.
foreach($this->options as $selected)
{
if($result->id == $selected['key'])
{
$href = $selected['href'];
$class = $selected['class'];
$active = $selected['active'];
}
}
$all[] = array
(
'key' => $result->id,
'value' => $result->name,
'href' => $href,
'class' => $class,
'active' => $active
);
}
foreach ($all as $option):
$class = ($count == 0) ? 'first ' : '';
$class .= ($count == count($this->options) - 1) ? 'last ' : '';
$class .= ($count % 2 == 1) ? 'even' : 'odd';
$class .= (strlen($option['class'])) ? ' ' . $option['class'] : '';
?>
<?php
$field = sprintf(
//Ergänzung für weiteren Wert
'<input type="checkbox" name="%s[]" id="opt_%s_%s" class="checkbox%s" value="%s"%s%s />',
$this->urlparam,
$this->urlparam,
$count,
$this->submit ? ' submitonchange' : '',
empty($option['key']) ? '--none--' : $option['key'],
($option['active'] ? ' checked="checked"' : ''),
//Wenn in Class 'disabled' vorkommt, dann wird das Feld deaktiviert.
(preg_match("/disabled/",$option['class']) ? ' DISABLED' : '')
);
$label = sprintf(
'<label id="lbl_%s_%s" for="opt_%s_%s">%s%s</label>',
$this->urlparam,
$count,
$this->urlparam,
$count,
$option['value'],
(($this->showCount) ? ' <span class="count">(' . $this->count[$option['key']] . ')</span>' : '')
);
$count++;
?>
<span class="<?= $class ?>"><?= $field ?> <?= $label ?></span>
<?php endforeach; ?>
</fieldset>
<?php endif; ?>
<?php $this->endblock(); ?>
Lesezeichen