我遇到了同样的问题,也许我们可以一起解决。这是我的代码:
/administrator/components/com_comp_name/models/forms/edit.xml
<?xml version="1.0" encoding="utf-8"?>
<form addrulepath="/administrator/components/com_gonewsletter/models/rules">
<fieldset name="details">
<field
name="id"
type="hidden"
/>
<field
name="title"
type="text"
label="COM_GONEWSLETTER_EDIT_TITLE_LABEL"
description="COM_GONEWSLETTER_EDIT_TITLE_DESC"
size="40"
class="inputbox"
required="true"
default=""
/>
<field
name="date"
type="calendar"
label="COM_GONEWSLETTER_EDIT_DATE_LABEL"
description="COM_GONEWSLETTER_EDIT_DATE_DESC"
size="40"
class="inputbox"
required="true"
default=""
format="%Y-%m-%d"
/>
<field
name="published"
type="list"
label="JSTATUS"
description="COM_GONEWSLETTER_EDIT_PUBLISHED_DESC"
class="inputbox"
size="1"
default="0">
<option
value="1">JPUBLISHED</option>
<option
value="0">JUNPUBLISHED</option>
</field>
<field
type="file"
name="pdf_file"
label="COM_GONEWSLETTER_EDIT_FILE_LABEL"
default=""
description="COM_GONEWSLETTER_EDIT_FILE_DESC"
size="40"
accept="application/pdf"
class="fileuploader"
/>
<field
name="file"
type="hidden"
/>
</fieldset>
</form>
and
/administrator/components/com_comp_name/controllers/edit.php
<?php
defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.component.controllerform');
class GoNewsletterControllerEdit extends JControllerForm
{
function __construct($config = array()) {
$this->view_list = 'List';
parent::__construct($config);
}
function save(){
jimport( 'joomla.filesystem.folder' );
jimport('joomla.filesystem.file');
$data = JRequest::getVar( 'jform', null, 'post', 'array' );
if ( !JFolder::exists( JPATH_SITE . DS . "images" . DS . "gonewsletter" ) ) {
JFolder::create( JPATH_SITE . DS . "images" . DS . "gonewsletter" );
}
$file = JRequest::getVar( 'jform', null, 'files', 'array' );
$filename = JFile::makeSafe($file['name']['pdf_file']);
if ( $filename != '' ) {
$filepath = JPath::clean( JPATH_SITE . DS . 'images' . DS . 'gonewsletter' . DS . strtolower( $filename ) );
JFile::upload( $file['tmp_name']['pdf_file'], $filepath );
$data['file'] = strtolower( $filename );
}
JRequest::setVar('jform', $data );
return parent::save();
}
}
如果在将$data发送给parent::save($data)之前打印出它,它会包含您要保存的正确字段,但实际上并没有保存。我尝试使用input type=text而不是type=file,它可以正确保存。
我还尝试了另一种方法,如:input type=file和name=pdf_file,然后我添加了一个隐藏字段name=file default=""。然后我将此隐藏字段值设置为文件名,但没有成功。也许我做错了什么。继续努力找到解决方案。