phpcms モジュール開発に正式に連絡した後、いくつかの機能モジュールを開発しました。その中で、画像の一括アップロードの問題に遭遇したため、phpcms での swfupload の使用方法を検討し始めました。
phpcms に付属のコンテンツ タイプでは、画像グループを直接指定できますが、この画像グループ機能は、静的な HTML ファイル全体をアップロードする必要があるものではありません。フォルダー全体をアップロードする方法を見つけて、元のファイル名を維持できるようになりました。
その目的は次のように要約されます:1、システムのファイルとディレクトリ構造を変更しないでください。
2、複数の添付ファイルをアップロードする機能を実現します。
3、アップロード後にフォルダー名を取得できます。
phpcms には添付ファイルのアップロード機能が付属しています。swfupload 関数を使用したいのですが、この関数は phpcms の添付ファイルのアップロード機能に統合されています。その後、それを抽出して変更する必要があります。
最初のステップは、これを呼び出す方法を勉強することです。
まず、Firefox ブラウザで firebug を開き、ネットワーク パネルを開き、phpcm で swfupload によって呼び出されるボタンを見つけます。
コードをコピーします。 コードは次のとおりです。
Public Function SWFUPLOAD () { $ Grouplist = getcache ('grouplist', 'member'); 'dosubmit'])){
テンプレートでさまざまな表示を設定します。 最後で最も重要なことは、このテンプレートを見つけて swfupload がどのように導入されるかを確認する必要があるということです。
テンプレートはここにあります: phpcms/modules/attachment/templates/swfupload.tpl.php
テンプレート ファイルを開きます。テンプレート ファイルには多数のファイルが導入されています。
phpcms/modules/attachment/functions/golable.func.php にその痕跡が見つかりました。この関数の主な機能は
コードをコピーすることです。コードは次のとおりです:
button_image_url: "",
button_width: 75,
button_height: 28,
button_placeholder_id: "buttonPlaceHolder",
button_text_style: "",
button_text_top_padding: 3,
button_text_left_padding: 12,
button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
button_cursor: SWFUpload.CURSOR.HAND,
File_queued_handler: FileQueued、
File_queue_error_handler: File_Dialog_Complete_handler : FileDialogComplete、
Upload_progress_handler: アップロードプログレス、
アップロード_エラー_ハンドラー: アップロードエラー、
UPload_success_handler: s、lアップロード完了ハンドラー: アップロード完了
});
}) '; $init を返します。
}
テンプレート swfupload.tpl.php を見てみましょう。
このテンプレートは、タブの形式で表示されるように js を使用して、swfupload ボタンを含むタブの ID を見つけることができます。
その ID は tab_swf_1 です
コードをコピーします
コードは次のとおりです:
コード内に次のコードがあります。このメソッドは swfupload.js で定義されています。
まず最初に、これらの必要なファイルをこのコントロールに表示されるテンプレートに導入する必要があります
コードをコピーします
コードをコピーしてください
最初にシステムのアタッチメント クラスをロードし、ここに到達する方法を使用します。
程序对上传成功做了echooperation.返還的东西是 返了编号,上传后的地址,拓展名,文件名.
これらの西は给谁用の啊 我们还得回去看構成文件.
構成ファイルの一部は、上転送中に各イベントがトリガーする方法です。 有始上传的.有上成功的,有上传失的.等等.
私が見ることができる方法の 1 つは、file_dialog_complete_handler:fileDialogComplete,
これらは swfupload に達しました。
その後私はphpcms/static/swfupload/handler.js里面にあるこの方法に到達しました。上での転送が成功した後にエコー結果の解析が完了したデータを参照してください。 解析的な方法
真正上传添付ファイルはここにあります。私は添付ファイルのアップロード方法を使用してファイルを上送信します。
この添付ファイルファイルのアップロード方法はシステムクラスの場所にあります、つまり phpcms/libs/classes/attachment.class.php の場所です
この里面に私達はアップロード方法里面にアクセスできます
到此里我们就理清思路了。
システムはこれを実行しています
最初にモジュールパネルの面で swfupload(配置ファイルは関数用に生成されたもの) -> 上転送ファイル -> 添付ファイルモジュールの swfupload メソッドを参照して処理 (システムの添付ファイルのアップロードメソッドを使用してアクセサリを循環します。) 結果を swfupload に返します。メソッド)->処理結果 swfupload 経由のメソッド(fileDialogComplete) が返されます。上面我们已经实现了在模板里面導入swfupload.但我们使用的配置文件及上传付属品的方法等都是系原来自带的。并现我想要的目录结构和文件命名方法。怎么办。 .
変更
怎么改、最初们要配置文件改掉。 自己のモジュールの領域にある関数ファイルの領域に自己の関数が確立されています。我们用自己の関数名 文件命名はglobal.func.phpこのシステム统会はauto_loadを介して我们の関数数追加
去我们把系统中添付モジュール関数文件下面のglobal.func.php里面のinitupload関数全盘コピー贝进来.只修正その中の一行
一我我们自己的分類。集成系の添付ファイル分類を外します。(私有方法コピー过来来。)我们要修正行。最初一点はアップロード方法里面の上传目录変更です。その後、文書を修正します。命名方法.
$this->field = $field;
$this->savepath = $this->upload_root.$this->upload_dir.date('Ymd');//这里我们需要修改下.也可以不修改.在我们实例化这个类的时候再来指定目录.
$this->alowexts = $alowexts;
$this->maxsize = $maxsize;
$this->overwrite = $overwrite;
$uploadfiles = array();
$description = isset($GLOBALS[$field.'_description']) ? $GLOBALS[$field.'_description'] : array();
if(is_array($_FILES[$field]['error'])) {
$this->uploads = count($_FILES[$field]['error']);
foreach($_FILES[$field]['error'] as $key => $error) {
if($error === UPLOAD_ERR_NO_FILE) continue;
if($error !== UPLOAD_ERR_OK) {
$this->error = $error;
return false;
}
$uploadfiles[$key] = array('tmp_name' => $_FILES[$field]['tmp_name'][$key], 'name' => $_FILES[$field]['name'][$key], 'type' => $_FILES[$field]['type'][$key], 'size' => $_FILES[$field]['size'][$key], 'error' => $_FILES[$field]['error'][$key], 'description'=>$description[$key],'fn'=>$fn);
}
} else {
$this->uploads = 1;
if(!$description) $description = '';
$uploadfiles[0] = array('tmp_name' => $_FILES[$field]['tmp_name'], 'name' => $_FILES[$field]['name'], 'type' => $_FILES[$field]['type'], 'size' => $_FILES[$field]['size'], 'error' => $_FILES[$field]['error'], 'description'=>$description,'fn'=>$fn);
}
if(!dir_create($this->savepath)) {
$this->error = '8';
return false;
}
if(!is_dir($this->savepath)) {
$this->error = '8';
return false;
}
@chmod($this->savepath, 0777);
if(!is_writeable($this->savepath)) {
$this->error = '9';
return false;
}
if(!$this->is_allow_upload()) {
$this ->error = '13';
return false;
}
$aids = array();
foreach($uploadfiles as $k=>$file) {
$fileext = fileext['name ' ]);
if($file['error'] != 0) {
$this->error = $file['error'];
return false;
}
}
if(!preg_match("/^( ".$this->alowexts.")$/", $fileext)) {
$this->error = '10';
return false;
}
if($this-&g t;最大サイズ && $file ['size'] > $this->maxsize) {
$this->error = '11';
return false;
}
if(!$this-> file($file['tmp_name' ])) {
$this->error = '12';
return false;
}
//$temp_filename = $this->getname($fileext);//名前この里.我们必要修正下
$temp_filename = $file['tmp_name'].$fileext; //修正オリジナルのシステムファイル名.
$savefile = $this->savepath.$temp_filename; $savefile = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(.|$)/i" 、"_\1\2"、$savefile); $filepath = preg_replace(new_addslashes("|^".$this->upload_root."|"), "", $savefile); if(!$this->上書き && file_exists($savefile)) 続行; $upload_func = $this->upload_func; if(@$upload_func($file['tmp_name'], $savefile)) { $this->uploadeds++; @chmod($savefile, 0644); @unlink($file['tmp_name']); $file['name'] = iconv("utf-8",CHARSET,$file['name']); $uploadedfile = array('filename'=>$file['name'], 'filepath'=>$filepath, 'filesize'=>$file['size'], 'fileext'=>$fileext , 'fn'=>$file['fn']); $thumb_enable = is_array($thumb_setting) && ($thumb_setting[0] > 0 || $thumb_setting[1] > 0 ) ? 1:0; $image = 新しい画像($thumb_enable,$this->サイトid); if($thumb_enable) { $image->thumb($savefile,'',$thumb_setting[0],$thumb_setting[1]); if($watermark_enable) { $image->watermark($savefile, $savefile); $aids[] = $this->add($uploadedfile); $aids を返します。 }
在我们自己的制御器里面.我们今回候就追加自己書込的类了.
これで、システムファイルディレクトリを変更せずに、目的のファイルアップロード機能が完成しました。
http://www.bkjia.com/PHPjc/326932.html