解决方案:How to Save Uploaded File's Name on Database
这最终帮助了我。
我正在尝试使用XML和数据库将文件上传添加到自定义组件。
我知道如何在静态PHP环境中完成文件上传,但我的知识 关于joomla中的PHP MVC结构使得我无法添加它。
到目前为止我做了什么:
•在XML文件(类型文件)中添加了字段
•在管理视图项目中添加了表单域
•添加了额外的字段My_project表(与图像上载列相同)
直到这一点它起作用。(字段显示在admin后端组件中)
现在,当您使用在管理后端上传的文件保存文档时,它不会将其保存到数据库中。
如果我将媒体作为字段类型然后它可以工作,但是当我将其更改为文件时它会崩溃。
XML文件
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field name="project_file" type="file"
label="Upload file"
description="Upload file"
directory="mysites" />
<field name="main_image" type="media"
label="COM_MYSITES_FORM_LBL_PROJECT_MAIN_IMAGE"
description="COM_MYSITES_FORM_DESC_PROJECT_MAIN_IMAGE"
filter="raw"
directory="mysites" />
</fieldset>
PHP文件上传脚本我正常使用
<?php
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
但是模型中的哪个部分以及控制器中的哪个部分? 以及如何调用它。
在控制器中调用整个视图
class MysitesControllerProject extends JControllerForm {
function __construct() {
$this->view_list = 'projects';
$jinput = JFactory::getApplication()->input;
$files = $jinput->files->get('jform');
$file = $files['project_file'];
$this->upload($file);
parent::__construct();
}
public function upload($files)
{
$file_name = $files['name'];
$src = $files['tmp_name'];
$size = $files['size'];
$upload_error = $files['error'];
$type = $files['type'];
$dest = "/home/vol3/byethost33.com/b33_13467508/bim-portfolio.cu.cc/htdocs/tmp";
if (isset( $file_name)) {
// Move the uploaded file.
JFile::upload( $src, $filepath );
}
}
}
答案 0 :(得分:6)
在数据库和XML表单中放置新字段只是工作的一半。您还必须编写文件保存/上载功能。你可以在两个地方做到这一点。在控制器(例如保存任务程序)或模型中(有2-3个功能可以执行)。查看此文件/administrator/components/com_media/controllers/upload.php
(上传程序)。我只是扩展你的保存功能,这样数据保存到数据库文件之前就会存储在文件系统中。您可以在/libraries/legacy/controller/legacy.php
中找到原始保存功能声明(对于Joomla 3.0.1,对于其他版本,它不应该很难找到)
以下是样本保存功能:
public function save($key = null, $urlVar = null){
// youre file upload code
return parent::save($key = null, $urlVar = null)
}