Ich bin mit diesem Viewscript für meine Standard-Formularelemente:Wie verwende ich ViewScripts auf Zend_Form Datei-Elemente?
<div class="field" id="field_<?php echo $this->element->getId(); ?>">
<?php if (0 < strlen($this->element->getLabel())) : ?>
<?php echo $this->formLabel($this->element->getName(), $this->element->getLabel());?>
<?php endif; ?>
<span class="value"><?php echo $this->{$this->element->helper}(
$this->element->getName(),
$this->element->getValue(),
$this->element->getAttribs()
) ?></span>
<?php if (0 < $this->element->getMessages()->length) : ?>
<?php echo $this->formErrors($this->element->getMessages()); ?>
<?php endif; ?>
<?php if (0 < strlen($this->element->getDescription())) : ?>
<span class="hint"><?php echo $this->element->getDescription(); ?></span>
<?php endif; ?>
</div>
Des Versuch allein führt zu einem Fehler zu verwenden, das Viewscript:
Exception caught by form: No file decorator found... unable to render file element
Mit Blick auf this FAQ Teil meines Problems offenbart, und ich aktualisierte mein Formelement Dekorateure wie folgt aus:
'decorators' => array(
array('File'),
array('ViewScript', array('viewScript' => 'form/field.phtml'))
)
nun in meiner Ansicht zweimal die Datei Element Rendering, sobald es Skript und zusätzliche Elemente mit dem Dateielement außerhalb meiner Ansicht Skript:
<input type="hidden" name="MAX_FILE_SIZE" value="8388608" id="MAX_FILE_SIZE" />
<input type="hidden" name="UPLOAD_IDENTIFIER" value="4b5f7335a55ee" id="progress_key" />
<input type="file" name="upload_file" id="upload_file" />
<div class="field" id="field_upload_file">
<label for="upload_file">Upload File</label>
<span class="value"><input type="file" name="upload_file" id="upload_file" /></span>
</div>
Alle Ideen, wie dies mit einem Viewscript richtig zu handhaben?
UPDATE: Basierend auf Shaun-Lösung, hier ist meine letzte Code:
Formular Element:
$this->addElement('file', 'upload_file', array(
'disableLoadDefaultDecorators' => true,
'decorators' => array('File', array('ViewScript', array(
'viewScript' => '_form/file.phtml',
'placement' => false,
))),
'label' => 'Upload',
'required' => false,
'filters' => array(),
'validators' => array(array('Count', false, 1),),
));
Skript anzeigen:
<?php
$class .= 'field ' . strtolower(end(explode('_',$this->element->getType())));
if ($this->element->isRequired()) {
$class .= ' required';
}
if ($this->element->hasErrors()) {
$class .= ' errors';
}
?>
<div class="<?php echo $class; ?>" id="field_<?php echo $this->element->getId(); ?>">
<?php if (0 < strlen($this->element->getLabel())): ?>
<?php echo $this->formLabel($this->element->getFullyQualifiedName(), $this->element->getLabel());?>
<?php endif; ?>
<span class="value"><?php echo $this->content; ?></span>
<?php if ($this->element->hasErrors()): ?>
<?php echo $this->formErrors($this->element->getMessages()); ?>
<?php endif; ?>
<?php if (0 < strlen($this->element->getDescription())): ?>
<p class="hint"><?php echo $this->element->getDescription(); ?></p>
<?php endif; ?>
</div>
Das sieht genau danach aus, was ich suche. Ich versuche es und markiere deine als Antwort, wenn es so funktioniert, wie ich es brauche! – Sonny
Ich habe gerade Ihre Lösung getestet, und es funktioniert! Danke Shaun! – Sonny
Ich wollte Ihnen nur noch einmal danken, das ist so viel besser als meine vorherige Lösung. – Sonny