Hey, auch...
- nein, dies ist nicht das Katalog-Forum
- nein, nicht alle Fragen zu Formularen gehören ins EFG-Forum
- nein, ich kenne die Katalog-Erweiterung nur "am Rande"
- ja, ich habe sie installiert etc.
Genug gemosert ;-)
Generell bietet sich für die Befüllung von Formularfeldern mit Werten (woher auch immer) der Hook 'loadFormfield' an.
Ob der Katalog nun irgendeine Möglichkeit bietet, innerhalb der callback-Funktion (per Insert-Tag oder als Eigenschaft eines Katalog-Items) auf die Werte zuzugreifen, weiß ich nicht.
Dein Formular ist (wenn ich das richtig sehe) unterhalb eines Katalog-Reader-Moduls platziert.
Du könntest also innerhalb des Katalog-Templates z.B. die $entries (oder auf Detailseite einfach den ersten $entry, also $entries[0] in einer globalen Variablen zwischenspeichern,
um innerhalb der onload-Callback-Function auf die Werte zugreifen zu können.
Fangen wir mit dem Template an, geringfügig geändertes 'catalog_full.tpl':
PHP-Code:
<?php if (count($this->entries)): ?>
<div class="layout_full">
<?php // hier "zwischenspeichern" in $GLOBALS ?>
<?php $GLOBALS['katalog_eintrag'] = $this->entries[0]; ?>
<?php foreach ($this->entries as $entry): ?>
<div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
<?php foreach ($entry['data'] as $field=>$data): ?>
<?php if (strlen($data['raw']) && !in_array($field, array('catalog_name','parentJumpTo'))): ?>
<div class="field <?php echo $field; ?>">
<div class="label"><?php echo $data['label']; ?></div>
<div class="value"><?php echo $data['value']; ?></div>
</div>
<?php endif; ?>
<?php endforeach; ?>
<div><?php echo $entry['link']; ?> </div>
</div>
<?php endforeach; ?>
</div>
<?php else: ?>
<p class="info">Invalid item reference for catalog.</p>
<?php endif; ?>
dann zur callback-Funktion, zunächst wieder in der system/config/dcaconfig (oder einer config.php im Modul-Verzeichnis) "registrieren":
PHP-Code:
$GLOBALS['TL_HOOKS']['loadFormField'][] = array('StrangersCatalogFuncs', 'onloadFormField');
und in einem Modul-Verzeichnis dann die eigentliche Klasse, z.B.
system/modules/stranger/StrangersCatalogFuncs.php :
PHP-Code:
<?php
class StrangersCatalogFuncs extends Backend
{
public function onloadFormField(Widget $objWidget, $intForm, $arrFormConfig)
{
// Einschraenkung auf Formular mit ID = ....
if ($arrFormConfig['id']==15)
{
// Beispiel 1:
// .. Formularfeld ID 90 wird mit Wert des Felds 'bezeichnung' des Katalogeintrags befüllt
// Einschraenkung Formularfeld mit ID = ....
if ($objWidget->id == 90)
{
// haben wir "zwischengespeicherten" Katalogeintrag?
if (isset($GLOBALS['katalog_eintrag']))
{
// existiert der "zwischengespeicherte" Wert
if (strlen($GLOBALS['katalog_eintrag']['data']['bezeichnung']['raw']))
{
// Wert an Formularfeld bzw. widget übergeben
$objWidget->value = $GLOBALS['katalog_eintrag']['data']['bezeichnung']['raw'];
// Formularfeld 'deaktivieren'
$objWidget->disabled = 'disabled';
}
}
}
// Beispiel 2:
// .. Formularfeld ID 92 wird mit Wert des Felds 'preis' des Katalogeintrags befüllt
// Einschraenkung Formularfeld mit ID = ....
if ($objWidget->id == 92)
{
if (isset($GLOBALS['katalog_eintrag']))
{
if (strlen($GLOBALS['katalog_eintrag']['data']['preis']['raw']))
{
$objWidget->value = $GLOBALS['katalog_eintrag']['data']['preis']['raw'];
// ... oder in diesem Fall eher 'value' (bereits formatiert)?
$objWidget->value = $GLOBALS['katalog_eintrag']['data']['preis']['value'];
$objWidget->disabled = 'disabled';
}
}
}
}
// WICHTIG:
return $objWidget;
}
}
Anmerkung: ist nicht im Detail getestet
Hoffe, das hilft Dir weiter,
Schöne Grüße
Thomas
Lesezeichen