繁体   English   中英

在自定义组件后端上传Joomla 3.0 MVC文件

[英]Joomla 3.0 MVC file upload in custom component backend

解决方案: 如何在数据库上保存上载的文件名

这最终帮助了我。

我正在尝试使用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 );
        }
    }

}

在数据库和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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM