0
votes

I am attempting to create a custom image field within Magento CMS pages.

This is the steps I have taken,

  1. Created an additional column with cms_page within the database called 'banner' - this is a varchar (255).

  2. Amended "app/code/core/Mage/Adminhtml/controllers/Cms/PageController.php" with the uploader code (see at bottom).

  3. Amended "app/code/core/Mage/Adminhtml/Block/Cms/Page/Edit/Tab/Content.php" to add the new field called 'banner' of which is a field type of 'image'.

  4. Deleted everything within "var/cache/" and "var/session/"

It's just simply not uploading/saving the filename within the database. To try and diagnose what's going on I added print_r($_FILES) just below saveAction() and it returned an empty array.

Am I missing a crucial step?

Here is the relevant code,

app/code/core/Mage/Adminhtml/controllers/Cms/PageController.php -

public function saveAction()
{
    if ($data = $this->getRequest()->getPost()) {
        $data = $this->_filterPostData($data);
        //init model and set data
        $model = Mage::getModel('cms/page');


            if(isset($data['banner']['delete']) && $data['banner']['delete']=='1'){
                if(!empty($data['banner']['value'])){
                    $path = Mage::getBaseDir('media') . DS;
                    if(@unlink($path.$data['banner']['value'])){
                        $data['banner']='';
                    }
                }   
            }
            if(isset($_FILES['banner']['name']) && !empty($_FILES['banner']['name'])) {
                try {
                $uploader = new Varien_File_Uploader('banner');
                $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png')); // or pdf or anything
                $uploader->setAllowRenameFiles(true);
                // setAllowRenameFiles(true) -> move your file in a folder the magento way
                // setAllowRenameFiles(false) -> move your file directly in the $path folder
                $uploader->setFilesDispersion(true);
                $path = Mage::getBaseDir('media') . DS;

                //$uploader->saveresized($path, $_FILES['nfile']['name'],100,72);
                //$_tmp_nfilethumb = $uploader->getUploadedFileName();

                $uploader->save($path, $_FILES['banner']['name']);
                $_tmp_nfile = $uploader->getUploadedFileName();

                //$data['nfilethumb'] = $_tmp_nfilethumb;
                $data['banner'] = $_tmp_nfile;

                }catch(Exception $e) {

                }
            }elseif(isset($data['banner']['value']) && !empty($data['banner']['value'])){
                $data['banner']=$data['banner']['value'];
            }   

        if ($id = $this->getRequest()->getParam('page_id')) {
            $model->load($id);
        }

        $model->setData($data);

        Mage::dispatchEvent('cms_page_prepare_save', array('page' => $model, 'request' => $this->getRequest()));

        //validating
        if (!$this->_validatePostData($data)) {
            $this->_redirect('*/*/edit', array('page_id' => $model->getId(), '_current' => true));
            return;
        }

        // try to save it
        try {
            // save the data
            $model->save();

            // display success message
            Mage::getSingleton('adminhtml/session')->addSuccess(
                Mage::helper('cms')->__('The page has been saved.'));
            // clear previously saved data from session
            Mage::getSingleton('adminhtml/session')->setFormData(false);
            // check if 'Save and Continue'
            if ($this->getRequest()->getParam('back')) {
                $this->_redirect('*/*/edit', array('page_id' => $model->getId(), '_current'=>true));
                return;
            }
            // go to grid
            $this->_redirect('*/*/');
            return;

        } catch (Mage_Core_Exception $e) {
            $this->_getSession()->addError($e->getMessage());
        }
        catch (Exception $e) {
            $this->_getSession()->addException($e,
                Mage::helper('cms')->__('An error occurred while saving the page.'));
        }

        $this->_getSession()->setFormData($data);
        $this->_redirect('*/*/edit', array('page_id' => $this->getRequest()->getParam('page_id')));
        return;
    }
    $this->_redirect('*/*/');
}

app/code/core/Mage/Adminhtml/Block/Cms/Page/Edit/Tab/Content.php -

protected function _prepareForm()
{   
    $model = Mage::registry('cms_page');

    /*
     * Checking if user have permissions to save information
     */
    if ($this->_isAllowedAction('save')) {
        $isElementDisabled = false;
    } else {
        $isElementDisabled = true;
    }


    $form = new Varien_Data_Form();

    $form->setHtmlIdPrefix('page_');

    $fieldset = $form->addFieldset('content_fieldset', array('legend'=>Mage::helper('cms')->__('Content'),'class'=>'fieldset-wide'));

    $wysiwygConfig = Mage::getSingleton('cms/wysiwyg_config')->getConfig(
        array('tab_id' => $this->getTabId())
    );

    $fieldset->addField('content_heading', 'text', array(
        'name'      => 'content_heading',
        'label'     => Mage::helper('cms')->__('Content Heading'),
        'title'     => Mage::helper('cms')->__('Content Heading'),
        'disabled'  => false,
    ));
             $content999Field = $fieldset->addField('banner', 'image', array(
        'name'      => 'banner',
            'label'     => Mage::helper('cms')->__('Banner'),
        'title'     => Mage::helper('cms')->__('Banner'),
    ));

    $contentField = $fieldset->addField('content', 'editor', array(
        'name'      => 'content',
            'label'     => Mage::helper('cms')->__('Layout 1'),
        'title'     => Mage::helper('cms')->__('Layout 1'),
        'style'     => 'height:36em;',
        //'required'  => true,
        'disabled'  => $isElementDisabled,
        'config'    => $wysiwygConfig
    ));

         $content2Field = $fieldset->addField('content2', 'editor', array(
        'name'      => 'content2',
            'label'     => Mage::helper('cms')->__('Layout 2'),
        'title'     => Mage::helper('cms')->__('Layout 2'),
        'style'     => 'height:36em;',
        //'required'  => true,
        'disabled'  => $isElementDisabled,
        'config'    => $wysiwygConfig
    ));
        $content3Field = $fieldset->addField('content3', 'editor', array(
        'name'      => 'content3',
            'label'     => Mage::helper('cms')->__('Content'),
        'title'     => Mage::helper('cms')->__('Content'),
        'style'     => 'height:36em;',
        //'required'  => true,
        'disabled'  => $isElementDisabled,
        'config'    => $wysiwygConfig
    ));

    // Setting custom renderer for content field to remove label column
    //$renderer = $this->getLayout()->createBlock('adminhtml/widget_form_renderer_fieldset_element')
               // ->setTemplate('cms/page/edit/form/renderer/content.phtml');
   // $contentField->setRenderer($renderer);

    $form->setValues($model->getData());
    $this->setForm($form);

    Mage::dispatchEvent('adminhtml_cms_page_edit_tab_content_prepare_form', array('form' => $form));

    return parent::_prepareForm();
}
2

2 Answers

0
votes

Try to add this line below $form->setValues($model->getData());:

$form->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
0
votes

I added,

'enctype' => 'multipart/form-data' within the Form.php and it fixed it.

class Mage_Adminhtml_Block_Cms_Page_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{

    protected function _prepareForm()
    {
        $form = new Varien_Data_Form(array('id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', 'enctype' => 'multipart/form-data'));
        $form->setUseContainer(true);
        $this->setForm($form);
        return parent::_prepareForm();
    }

}