简体   繁体   中英

Magento image upload custom field on CMS page - error on CMS page save and image not saved into database

I have used various tutorials to create some additional fields for the CMS pages in the Magento backed.

These comprise of text, textarea and image upload fields. I have managed to successfully store data from the text fields, but when I upload an image and save the page I am seeing the following error:

Notice: Array to string conversion in /var/www/html/magento/lib/Varien/Data/Form/Element/Image.php on line 56

I have narrowed down the error to my beforeSave class, which controls the saving of any uploaded images on CMS page save, but I can't for the life of me figure out how to properly check all my image fields for uploaded images and successfully save them into the database.

Here are my Observer.php and Config.xml files. If anybody could point me in the direction of the issue with my Observer class it would be much appreciated.

class Ddog_Customcms_Model_Observer
{
    public function cmsField($observer)
    {
        //get CMS model with data
        $model = Mage::registry('cms_page');
        //get form instance
        $form = $observer->getForm();
        //create new custom fieldset 'atwix_content_fieldset'
        $fieldset = $form->addFieldset('Ddog_content_fieldset_header', array('legend'=>Mage::helper('cms')->__('Page Header'),'class'=>'fieldset-wide'));
            //add new field
            $fieldset->addField('content_custom_banner', 'image', array(
                'name'      => 'content_custom_banner',
                'label'     => Mage::helper('cms')->__('Banner Image'),
                'title'     => Mage::helper('cms')->__('Banner Image'),
                'disabled'  => false,
                //set field value
                'value'     => $model->getContentCustomBanner()
            ));
            $fieldset->addField('content_custom_description', 'text', array(
                'name'      => 'content_custom_description',
                'label'     => Mage::helper('cms')->__('Description'),
                'title'     => Mage::helper('cms')->__('Description'),
                'disabled'  => false,
                //set field value
                'value'     => $model->getContentCustomDescription()
            ));
        $fieldset = $form->addFieldset('Ddog_content_fieldset_items', array('legend'=>Mage::helper('cms')->__('Required Items'),'class'=>'fieldset-half'));
            $fieldset->addField('content_custom_ingredients', 'textarea', array(
                'name'      => 'content_custom_ingredients',
                'label'     => Mage::helper('cms')->__('Ingredients'),
                'title'     => Mage::helper('cms')->__('Ingredients'),
                'disabled'  => false,
                //set field value
                'value'     => $model->getContentCustomIngredients()
            ));
            $fieldset->addField('content_custom_supplies', 'textarea', array(
                'name'      => 'content_custom_supplies',
                'label'     => Mage::helper('cms')->__('Supplies'),
                'title'     => Mage::helper('cms')->__('Supplies'),
                'disabled'  => false,
                //set field value
                'value'     => $model->getContentCustomSupplies()
            ));
            $fieldset->addField('content_custom_colours_tinted', 'textarea', array(
                'name'      => 'content_custom_colours_tinted',
                'label'     => Mage::helper('cms')->__('Colours Tinted'),
                'title'     => Mage::helper('cms')->__('Colours Tinted'),
                'disabled'  => false,
                //set field value
                'value'     => $model->getContentCustomColoursTinted()
            ));
        $fieldset = $form->addFieldset('Ddog_content_fieldset_method_step1', array('legend'=>Mage::helper('cms')->__('Method - Step 1'),'class'=>'fieldset-wide'));
            $fieldset->addField('content_custom_step1_instructions', 'textarea', array(
                'name'      => 'content_custom_step1_instructions',
                'label'     => Mage::helper('cms')->__('Instructions'),
                'title'     => Mage::helper('cms')->__('Instructions'),
                'disabled'  => false,
                //set field value
                'value'     => $model->getContentCustomStep1Instructions()
            ));
            $fieldset->addField('content_custom_step1_image1', 'image', array(
                    'name'      => 'content_custom_step1_image1',
                    'label'     => Mage::helper('cms')->__('Image'),
                    'title'     => Mage::helper('cms')->__('Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomStep1Image1()
                ));
            $fieldset->addField('content_custom_step1_image2', 'image', array(
                    'name'      => 'content_custom_step1_image2',
                    'label'     => Mage::helper('cms')->__('Additional Image'),
                    'title'     => Mage::helper('cms')->__('Additional Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomStep1Image2()
                ));
            $fieldset->addField('content_custom_step1_image3', 'image', array(
                    'name'      => 'content_custom_step1_image3',
                    'label'     => Mage::helper('cms')->__('Additional Image'),
                    'title'     => Mage::helper('cms')->__('Additional Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomStep1Image3()
                ));
        $fieldset = $form->addFieldset('Ddog_content_fieldset_method_step2', array('legend'=>Mage::helper('cms')->__('Method - Step 2'),'class'=>'fieldset-wide'));
            $fieldset->addField('content_custom_step2_instructions', 'textarea', array(
                'name'      => 'content_custom_step2_instructions',
                'label'     => Mage::helper('cms')->__('Instructions'),
                'title'     => Mage::helper('cms')->__('Instructions'),
                'disabled'  => false,
                //set field value
                'value'     => $model->getContentCustomStep2Instructions()
            ));
            $fieldset->addField('content_custom_step2_image1', 'image', array(
                    'name'      => 'content_custom_step2_image1',
                    'label'     => Mage::helper('cms')->__('Image'),
                    'title'     => Mage::helper('cms')->__('Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomStep2Image1()
                ));
            $fieldset->addField('content_custom_step2_image2', 'image', array(
                    'name'      => 'content_custom_step2_image2',
                    'label'     => Mage::helper('cms')->__('Additional Image'),
                    'title'     => Mage::helper('cms')->__('Additional Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomStep2Image2()
                ));
            $fieldset->addField('content_custom_step2_image3', 'image', array(
                    'name'      => 'content_custom_step2_image3',
                    'label'     => Mage::helper('cms')->__('Additional Image'),
                    'title'     => Mage::helper('cms')->__('Additional Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomStep2Image3()
                ));
        $fieldset = $form->addFieldset('Ddog_content_fieldset_method_step3', array('legend'=>Mage::helper('cms')->__('Method - Step 3'),'class'=>'fieldset-wide'));
            $fieldset->addField('content_custom_step3_instructions', 'textarea', array(
                'name'      => 'content_custom_step3_instructions',
                'label'     => Mage::helper('cms')->__('Instructions'),
                'title'     => Mage::helper('cms')->__('Instructions'),
                'disabled'  => false,
                //set field value
                'value'     => $model->getContentCustomStep3Instructions()
            ));
            $fieldset->addField('content_custom_step3_image1', 'image', array(
                    'name'      => 'content_custom_step3_image1',
                    'label'     => Mage::helper('cms')->__('Image'),
                    'title'     => Mage::helper('cms')->__('Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomstep3Image1()
                ));
            $fieldset->addField('content_custom_step3_image2', 'image', array(
                    'name'      => 'content_custom_step3_image2',
                    'label'     => Mage::helper('cms')->__('Additional Image'),
                    'title'     => Mage::helper('cms')->__('Additional Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomstep3Image2()
                ));
            $fieldset->addField('content_custom_step3_image3', 'image', array(
                    'name'      => 'content_custom_step3_image3',
                    'label'     => Mage::helper('cms')->__('Additional Image'),
                    'title'     => Mage::helper('cms')->__('Additional Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomstep3Image3()
                ));
        $fieldset = $form->addFieldset('Ddog_content_fieldset_method_step4', array('legend'=>Mage::helper('cms')->__('Method - Step 4'),'class'=>'fieldset-wide'));
            $fieldset->addField('content_custom_step4_instructions', 'textarea', array(
                'name'      => 'content_custom_step4_instructions',
                'label'     => Mage::helper('cms')->__('Instructions'),
                'title'     => Mage::helper('cms')->__('Instructions'),
                'disabled'  => false,
                //set field value
                'value'     => $model->getContentCustomStep4Instructions()
            ));
            $fieldset->addField('content_custom_step4_image1', 'image', array(
                    'name'      => 'content_custom_step4_image1',
                    'label'     => Mage::helper('cms')->__('Image'),
                    'title'     => Mage::helper('cms')->__('Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomstep4Image1()
                ));
            $fieldset->addField('content_custom_step4_image2', 'image', array(
                    'name'      => 'content_custom_step4_image2',
                    'label'     => Mage::helper('cms')->__('Additional Image'),
                    'title'     => Mage::helper('cms')->__('Additional Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomstep4Image2()
                ));
            $fieldset->addField('content_custom_step4_image3', 'image', array(
                    'name'      => 'content_custom_step4_image3',
                    'label'     => Mage::helper('cms')->__('Additional Image'),
                    'title'     => Mage::helper('cms')->__('Additional Image'),
                    'disabled'  => false,
                    //set field value
                    'value'     => $model->getContentCustomstep4Image3()
                ));
    }

    public function addFormEnctype(Varien_Event_Observer $observer) 
    {
        try {
            $block = $observer->getEvent()->getBlock();

            if ($block instanceof Mage_Adminhtml_Block_Cms_Page_Edit_Form) {

                $form = $block->getForm();
                $form->setData('enctype', 'multipart/form-data');
                $form->setUseContainer(true);
            }
        } catch(Exception $e) {
            Mage::logException($e);
        }
    }

    public function beforeSave(Varien_Event_Observer $observer) 
    {
        try {
            $model = $observer->getEvent()->getPage();

            $request = $observer->getEvent()->getRequest();
            $data    = $request->getPost();

            $path = Mage::getBaseDir('media') . '/wysiwyg/';  //. DS . self::MEDIA_DIR;
            if ( ! file_exists($path)) {
                mkdir($path, 0777, true);
            }

            $imagesAttributesNames = array('content_custom_banner','content_custom_step1_image1','content_custom_step1_image2','content_custom_step1_image3','content_custom_step2_image1','content_custom_step2_image2','content_custom_step2_image3','content_custom_step3_image1','content_custom_step3_image2','content_custom_step3_image3','content_custom_step4_image1','content_custom_step4_image2','content_custom_step4_image3');
            $images = array();
            foreach($imagesAttributesNames as $imageAttributeName) {

                $uploadedImage = $_FILES[$imageAttributeName];

                if ($uploadedImage['name'] > '1') {
                    Mage::log('uploading');
                    $uploader = new Varien_File_Uploader($imageAttributeName);
                    Mage::log('set');
                    $uploader->setAllowedExtensions(array('jpg', 'jpeg', 'gif', 'png', 'bmp'));
                    $uploader->setAllowRenameFiles(true);
                    $uploader->setFilesDispersion(false);
                    $uploader->save($path, $uploadedImage['name']);
                    Mage::log($uploader);
                    $model->setData($imageAttributeName, 'wysiwyg/' . $uploader->getUploadedFileName()); //$path.'/'.$uploader->getUploadedFileName());
                } else {
                    if(isset($data[$imageAttributeName]['delete']) && $data[$imageAttributeName]['delete'] == 1) {                        
                        $data[$imageAttributeName] = '';
                        $model->setData($imageAttributeName, $data[$imageAttributeName]);
                    } else {
                        unset($data[$imageAttributeName]);
                        $model->setData($imageAttributeName, implode($request->getPost($imageAttributeName)));
                    }
                }
            }

        } catch(Exception $e) {
            Mage::logException($e);
        }
    }
}

<?xml version="1.0"?>
<config>
    <modules>
        <Ddog_Customcms>
            <version>1.0.2</version>
        </Ddog_Customcms>
    </modules>
    <global>
        <page>
            <layouts>
                <Ddog_custom_page>
                    <label>Recipe Steps</label>
                    <template>page/recipe-steps.phtml</template>
                </Ddog_custom_page>
            </layouts>
        </page>
        <models>
            <Ddog_Customcms>
                <class>Ddog_Customcms_Model</class>
            </Ddog_Customcms>
        </models>
        <events>
            <adminhtml_block_html_before>
                <observers>
                    <Ddog_Customcms_cms_page_edit_form_add_enctype>
                        <type>singleton</type>
                        <class>Ddog_Customcms_Model_Observer</class>
                        <method>addFormEnctype</method>
                    </Ddog_Customcms_cms_page_edit_form_add_enctype>
                </observers>
            </adminhtml_block_html_before>
            <cms_page_prepare_save>
                <observers>
                    <Ddog_Customcms_cms_page_prepare_save>
                        <type>singleton</type>
                        <class>Ddog_Customcms_Model_Observer</class>
                        <method>beforeSave</method>
                    </Ddog_Customcms_cms_page_prepare_save>
                </observers>
            </cms_page_prepare_save>
            <adminhtml_cms_page_edit_tab_content_prepare_form>
                <observers>
                    <Ddog_Customcms_page_edit_tab_content>
                        <type>singleton</type>
                        <class>Ddog_Customcms_Model_Observer</class>
                        <method>cmsField</method>
                    </Ddog_Customcms_page_edit_tab_content>
                </observers>
            </adminhtml_cms_page_edit_tab_content_prepare_form>
        </events>
        <resources>
            <Ddog_Customcms_setup>
                <setup>
                    <module>Ddog_Customcms</module>
                </setup>
            </Ddog_Customcms_setup>
        </resources>
    </global>
</config>

You need to change the image format from array to string before saving data. To solve this issue just insert given below code before all ' $model->setData($data); ' in your 'beforeSave' function.

Code is:

if(isset($data['image_url']['value']))  // Use your image_field_name instead of image_url   i.e. content_custom_step1_image1
{
    $data['image_url'] = $data['image_url']['value']; // Use image_field_id instead of image_url   i.e. content_custom_step1_image1
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM