[英]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.