5

解決策:アップロードされたファイルの名前をデータベースに保存する方法

これは結局私を助けました。

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

}
4

1 に答える 1

6

データベースと XML フォームに新しいフィールドを配置することは、作業の半分にすぎません。ファイルの保存/アップロード機能も作成する必要があります。できる場所は2ヶ所です。コントローラー (タスク プロシージャの保存など) またはモデル (実行できる関数が 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)
}
于 2013-08-12T19:57:21.397 に答える