解決策:アップロードされたファイルの名前をデータベースに保存する方法
これは結局私を助けました。
XML とデータベースを使用してカスタム コンポーネントにファイル アップロードを追加しようとしています。
静的 PHP 環境でファイルのアップロードを行う方法は知っていますが、joomla の PHP MVC 構造に関する知識があるため、追加できません。
私がこれまでに行ったこと:
• XML ファイル (タイプ ファイル) にフィールドを追加 •
管理者ビュー プロジェクトにフォーム フィールドを追加
• 追加フィールド 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";
}
?>
しかし、モデルにはどの部分が入り、コントローラーにはどの部分が入りますか? そして呼び方。
ビュー全体がコントローラーで呼び出されます
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 );
}
}
}