gpt4 book ai didi

php - 自定义组件后端中的 Joomla 3.0 MVC 文件上传

转载 作者:可可西里 更新时间:2023-11-01 14:03:14 24 4
gpt4 key购买 nike

解决方案:How to Save Uploaded File's Name on Database

这最终帮助了我。

我正在尝试使用 XML 和数据库将文件上传添加到自定义组件。

我知道如何在静态 PHP 环境中完成文件上传,但我的知识关于 joomla 中的 PHP MVC 结构,所以我无法添加它。

到目前为止我做了什么:

• 在XML文件(文件类型)中添加字段
• 在管理 View 项目中添加了表单字段
• 添加了一个额外的字段My_project 表(与图像上传列相同)

直到此时它才有效。(字段显示在管理后端组件中)

现在,当您使用在管理后端上传的文件保存文档时,它不会将其保存到数据库中。

如果我将媒体作为字段类型那么它可以工作,但是当我将它更改为文件时它会崩溃。

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";
}
?>

但是什么部分在模型中,什么部分在 Controller 中?以及如何调用它。

在 Controller 中调用整个 View

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 );
}
}

}

最佳答案

将新字段放入数据库和 XML 格式只是工作的一半。您还必须编写文件保存/上传功能。您可以在两个地方执行此操作。在 Controller (例如保存任务过程)或模型(有 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)
}

关于php - 自定义组件后端中的 Joomla 3.0 MVC 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17856631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com