0

我正在为 joomla 制作一个简单的 MVC 组件,大部分都遵循 hello world 教程,其中包含一些文本字段和图像。

文本字段保存但“文件”字段不保存,有什么想法吗?

**Controller:**
    <?php
    // No direct access to this file
    defined('_JEXEC') or die('Restricted access');

    // import Joomla controllerform library
    jimport('joomla.application.component.controllerform');

    /**
     * MJob Controller
     */
    class MJobsControllerMJob extends JControllerForm
    {
    }

**Model:**

    <?php
    // No direct access to this file
    defined('_JEXEC') or die('Restricted access');

    // import Joomla modelform library
    jimport('joomla.application.component.modeladmin');

    class MJobsModelMJob extends JModelAdmin
    {
        public function getTable($type = 'MJob', $prefix = 'MJobsTable', $config = array()) 
        {
            return JTable::getInstance($type, $prefix, $config);
        }

        public function getForm($data = array(), $loadData = true) 
        {
            // Get the form.
            $form = $this->loadForm('com_mjobs.mjob', 'mjob', array('control' => 'jform', 'load_data' => $loadData));

            if (empty($form)) 
            {
                return false;
            }
            return $form;
        }

        protected function loadFormData() 
        {
            // Check the session for previously entered form data.
            $data = JFactory::getApplication()->getUserState('com_mjobs.edit.mjob.data', array());
            if (empty($data)) 
            {
                $data = $this->getItem();
            }
            return $data;
        }
    }

**view.html.php:**

    <?php
    // No direct access to this file
    defined('_JEXEC') or die('Restricted access');

    // import Joomla view library
    jimport('joomla.application.component.view');

    class MJobsViewMJob extends JView
    {

        public function display($tpl = null) 
        {
            // get the Data
            $form = $this->get('Form');
            $item = $this->get('Item');

            // Check for errors.
            if (count($errors = $this->get('Errors'))) 
            {
                JError::raiseError(500, implode('<br />', $errors));
                return false;
            }
            // Assign the Data
            $this->form = $form;
            $this->item = $item;

            // Set the toolbar
            $this->addToolBar();

            // Display the template
            parent::display($tpl);
        }

        protected function addToolBar() 
        {
            JRequest::setVar('hidemainmenu', true);
            $isNew = ($this->item->id == 0);
            JToolBarHelper::title($isNew ? JText::_('COM_MJOBS_MANAGER_MJOB_NEW') : JText::_('COM_MJOBS_MANAGER_MJOB_EDIT'));
            JToolBarHelper::apply('mjob.apply');
            JToolBarHelper::save('mjob.save');
            JToolBarHelper::save2new('mjob.save2new');
            JToolBarHelper::cancel('mjob.cancel', $isNew ? 'JTOOLBAR_CANCEL' : 'JTOOLBAR_CLOSE');
        }
    }

**VIEW (tmpl/edit.php):**
<?php
// No direct access
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
echo "<b>MJOB EDIT START</b><br>";
?>
<form action="<?php echo JRoute::_('index.php?option=com_mjobs&layout=edit&id='.(int) $this->item->id); ?>"
      method="post" enctype="multipart/form-data" name="adminForm" id="mjob-form">
    <fieldset class="adminform">
        <legend><?php echo JText::_( 'COM_MJOBS_MJOB_DETAILS' ); ?></legend>
        <ul class="adminformlist">
            <?php foreach($this->form->getFieldset('details') as $field): ?>
                <li><?php echo $field->label;echo $field->input;?></li>
            <?php endforeach; ?>
        </ul>
    </fieldset>
    <div>
        <input type="hidden" name="task" value="mjob.edit" />
        <?php echo JHtml::_('form.token'); ?>
    </div>
</form>
4

2 回答 2

2

我猜你正在使用 Joomla!2.5 基于提供的代码。

因此,要检索已上传的文件,您需要执行以下操作:

$jFileInput = new JInput($_FILES);
$theFile = $jFileInput->get('jform',array(),'array');


// If there is no uploaded file, we have a problem...
if (!is_array($theFile)) {
    JError::raiseWarning('', 'No file was selected.');
    return false;
}

// Build the paths for our file to move to the components 'upload' directory
$theFileName = $theFile['name']['tablefile'];
$tmp_src    = $theFile['tmp_name']['tablefile'];
$tmp_dest   = JPATH_COMPONENT_ADMINISTRATOR . '/uploads/' . $theFileName;
$this->dataFile = $theFileName;

// Move uploaded file
jimport('joomla.filesystem.file');
$uploaded = JFile::upload($tmp_src, $tmp_dest);
// $uploaded contains boolean indicating success or failure
// $tmp_dest will contain final location of file if successful.
于 2012-05-23T22:11:35.160 回答
1

还要确保在你的 html 表单中你有

enctype="多部分/表单数据"

启用,否则您将不会收到 php.ini 中的任何文件。

于 2012-06-21T16:39:11.173 回答