I wouldn't include the image in the form at all actually. Instead I would just wrap a conditional around a div in the view script. Something like:
<? if (this->image): ?> <div> "<?= $this- image->src ?>"></div> <? endif ?> <?= $this->form ?> Edward Haber wrote: > > That does sound like a better solution to me. Also, the link in the > form could frustrate some users if they've partially completed the > form then delete the image. Thanks for your comments. > > So then the best solution appears to be a decorator. > > > On Oct 3, 2008, at 1:28 PM, Matthew Lurz wrote: > >> >> In that case why not forego the remove action and the additional >> form logic >> and just display the form regardless of whether the image exists. >> When the >> user uploads a new image it would replace the existing one. Just >> wondering >> since it seems like the user would have to jump through an extra >> hoop to >> remove the image in order to upload a new one. The less a user does >> or has >> to do the better. >> >> >> Edward Haber wrote: >>> >>> Here's the solution I came up with. Thanks for all the input and help >>> on this problem. This solution involves using a conditional statement >>> in Zend_Form to create one of two element types. When the image is >>> present the view helper decorator replaces the form element with the >>> image and a link to a remove action. The view helper is below and >>> will >>> still be tweaked a bit but it should give the overall idea. This form >>> class snippet has all the other elements removed from it for clarity >>> >>> >>> class MyForm extends Zend_Dojo_Form >>> { >>> public function __construct($options = null) >>> { >>> parent::__construct($options); >>> >>> $db = Zend_Registry::get('db'); >>> >>> $this->setName('article_form') >>> ->setAction(URL.'/admin/article/save') >>> ->setMethod('post') >>> ->addPrefixPath('MF_Form_Element', 'MF/Form/Element/', >>> 'element') >>> ->setAttrib('enctype', 'multipart/form-data') >>> ->setAttrib('id', 'article-form'); >>> >>> >>> /** >>> * image_name >>> */ >>> if ($options['image_id']) { >>> >>> $this->addElement('file', 'image_name', array( >>> 'label' => 'Image', >>> 'description' => 'To upload another photo >>> delete this one >>> first.', >>> 'attribs' => array( >>> 'imgSrc' => URL . >>> '/media/articles/' . $options['image_id'] . >>> '.jpg', >>> 'action' => URL . >>> '/admin/article/drop-image/' . >>> $options['image_id'] >>> ), >>> 'decorators' => array( >>> array('ViewHelper', >>> array('helper' => 'mediaImage')), >>> 'Errors', >>> 'Description', >>> array('HtmlTag', array('tag' => >>> 'dd')), >>> array('Label', array('tag' => >>> 'dt')) >>> ) >>> )); >>> >>> } else { >>> >>> $this->addElement('file', 'image_name', array( >>> 'label' => 'Upload an image', >>> 'destination' => AP . >>> '/application/tmp/upload-staging', >>> 'required' => true, >>> 'validators' => array( >>> array('Size', '500Kb'), >>> array('ImageSize', array(10, >>> 10, 1024, 768)), >>> array('Extension', array('jpg', >>> 'jpeg')) >>> ) >>> )); >>> >>> } >>> >>> (other form elements removed) >>> >>> Then I use this helper: >>> >>> class MF_View_Helper_MediaImage >>> { >>> public function mediaImage($fieldname, $value = "", $attribs = null) >>> { >>> $imgSrc = $attribs['imgSrc']; >>> $action = $attribs['action']; >>> $class = isset($attribs['class']) ? $attribs['class'] : 'image- >>> remove-button'; >>> >>> return <<<OUTPUT >>> $imgSrc | $action Delete >>> OUTPUT; >>> } >>> } >>> >>> This will pretty much be a reusable solution for the four CMS media >>> subdirectories of image content and seems to work just fine. Happy >>> for >>> any comments. >>> >>> EH >>> >>> >>> On Oct 3, 2008, at 8:12 AM, Matthew Lurz wrote: >>> >>>> >>>> I would keep the image separate from the form unless you have a good >>>> reason >>>> not to. Then the logic is simple. Display the image if it exists, if >>>> not >>>> then display the form. Of course you would need an action to delete >>>> the >>>> image so that the form could be redisplayed. >>>> >>>> >>>> Edward Haber wrote: >>>>> >>>>> Definitely view logic. Good call. Still I'm uncertain though >>>>> because >>>>> I'm working with an extended Zend_Form class. Perhaps I should >>>>> make a >>>>> custom Form Element? Or a custom Form Decorator? Or use the view > >>>>> helper decorator for just that element? I'd love to hear the Zend >>>>> best >>>>> practice take on this solution. >>>>> >>>>> Thanks! >>>>> >>>>> >>>>> >>>>> On Oct 2, 2008, at 10:50 PM, Matthew Lurz wrote: >>>>> >>>>>> >>>>>> Sounds like view logic to me and so I would add a conditional in >>>>>> the >>>>>> view >>>>>> script. >>>>>> >>>>>> >>>>>> Edward Haber wrote: >>>>>>> >>>>>>> I have a form that I want offer an image upload form element on. >>>>>>> This >>>>>>> has worked great using Zend_Form_Element_File. The upload works >>>>>>> fine. >>>>>>> What is the recommended way to have the uploaded image replace >>>>>>> the >>>>>>> upload form if an image exists? I don't need the solution coded, >>>>>>> just >>>>>>> the direction I should go. >>>>>>> >>>>>>> For example, I have the form as a class. SHould I pass the image >>>>>>> name >>>>>>> (if one exists) in the config array to the form? In the form i >>>>>>> would >>>>>>> then check for $config['imageName'] and if it exists display the >>>>>>> image >>>>>>> in place of the form element. This is another trick - how do >>>>>>> display >>>>>>> an image in a form? >>>>>>> >>>>>>> Is the answer toggling in the form class between the form element >>>>>>> and >>>>>>> an image? Or using CSS to display the image if it's there and >>>>>>> "hide" >>>>>>> the form (display:none for example). >>>>>>> >>>>>>> I'm just looking for best practice. I'm sure lots of people have >>>>>>> already confronted this situation. Any input much appreciated! >>>>>>> Thanks! >>>>>>> >>>>>>> Eddie >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> View this message in context: >>>>>> http://www.nabble.com/Toggle-file-upload-element-with-uploaded-image-tp19780259p19791263.html >>>>>> Sent from the Zend Framework mailing list archive at Nabble.com. >>>>>> >>>>> >>>>> >>>>> >>>> >>>> -- >>>> View this message in context: >>>> http://www.nabble.com/Toggle-file-upload-element-with-uploaded-image-tp19780259p19796584.html >>>> Sent from the Zend Framework mailing list archive at Nabble.com. >>>> >>> >>> >>> >> >> -- >> View this message in context: >> http://www.nabble.com/Toggle-file-upload-element-with-uploaded-image-tp19780259p19802308.html >> Sent from the Zend Framework mailing list archive at Nabble.com. >> > > > -- View this message in context: http://www.nabble.com/Toggle-file-upload-element-with-uploaded-image-tp19780259p19803936.html Sent from the Zend Framework mailing list archive at Nabble.com.