Commit 140451ed authored by john's avatar john

3009

parent 1c19a163
...@@ -35,7 +35,7 @@ $(function () ...@@ -35,7 +35,7 @@ $(function ()
imageUpload: true, imageUpload: true,
imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp"], imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
imageUploadURL: "./php/upload.php", imageUploadURL: "/documentation/documentation-admin/upload",
onload: function () onload: function ()
{ {
console.log('onload', this); console.log('onload', this);
......
<?php <?php
/** /**
* *
* Editor.md PHP简易上传类(仅供演示用,生产环境使用还需谨慎考虑) * Editor.md PHP简易上传类(仅供演示用,生产环境使用还需谨慎考虑)
* *
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
* @UpdateTime: 2015-06-02 15:36:23 * @UpdateTime: 2015-06-02 15:36:23
* Copyright@2015 Editor.md all right reserved. * Copyright@2015 Editor.md all right reserved.
*/ */
class EditorMdUploader
{
class EditorMdUploader
{
public $files; // $_FILES数组 public $files; // $_FILES数组
public $fileExit; // 文件扩展名 public $fileExit; // 文件扩展名
public $saveName; // 最终保存的文件名 public $saveName; // 最终保存的文件名
...@@ -21,16 +21,16 @@ ...@@ -21,16 +21,16 @@
public $savePath; // 保存本地文件路径 public $savePath; // 保存本地文件路径
public $randomLength = ''; // 生成随机文件名的长度,当为日期时为日期的格式 public $randomLength = ''; // 生成随机文件名的长度,当为日期时为日期的格式
public $randomNameType = 1; // 生成随机的形式, NULL为保留原文件名, 1生成随机字符串, 2生成日期文件名 public $randomNameType = 1; // 生成随机的形式, NULL为保留原文件名, 1生成随机字符串, 2生成日期文件名
public $formats = array( // 允许上传的文件格式 public $formats = array(// 允许上传的文件格式
'gif', 'jpg', 'jpeg', 'png', 'bmp' 'gif', 'jpg', 'jpeg', 'png', 'bmp'
); );
public $maxSize = 1024; // 最大上传文件大小,单位KB public $maxSize = 1024; // 最大上传文件大小,单位KB
public $cover = true; // 是否覆盖同名文件, 1覆盖,0不覆盖 public $cover = true; // 是否覆盖同名文件, 1覆盖,0不覆盖
public $redirect = false; // 是否进行URL跳转 public $redirect = false; // 是否进行URL跳转
public $redirectURL = ""; // 上传成功或出错后要转到的URL public $redirectURL = ""; // 上传成功或出错后要转到的URL
public $errors = array( // 错误信息 public $errors = array(// 错误信息
'empty' => '上传文件不能为空', 'empty' => '上传文件不能为空',
'format' =>'上传的文件格式不符合规定', 'format' => '上传的文件格式不符合规定',
'maxsize' => '上传的文件太大', 'maxsize' => '上传的文件太大',
'unwritable' => '保存目录不可写,请更改权限', 'unwritable' => '保存目录不可写,请更改权限',
'not_exist' => '保存目录不存在', 'not_exist' => '保存目录不存在',
...@@ -50,7 +50,6 @@ ...@@ -50,7 +50,6 @@
* @param Intiger $maxSize 允许最大的上传文件大小,以KB为单位 * @param Intiger $maxSize 允许最大的上传文件大小,以KB为单位
* @return viod * @return viod
*/ */
public function __construct($savePath, $saveURL, $formats, $randomNameType = 1, $randomLength = '', $cover = true, $maxSize = 1024) public function __construct($savePath, $saveURL, $formats, $randomNameType = 1, $randomLength = '', $cover = true, $maxSize = 1024)
{ {
$this->savePath = $savePath; $this->savePath = $savePath;
...@@ -69,11 +68,9 @@ ...@@ -69,11 +68,9 @@
* @param array $configs 配置项数组 * @param array $configs 配置项数组
* @return void * @return void
*/ */
public function config($configs) public function config($configs)
{ {
foreach($configs as $key => $value) foreach ($configs as $key => $value) {
{
$this->$key = $value; $this->$key = $value;
} }
} }
...@@ -85,11 +82,9 @@ ...@@ -85,11 +82,9 @@
* @param string $name fileInput's name * @param string $name fileInput's name
* @return boolean 返回是否上传成功的布尔值 * @return boolean 返回是否上传成功的布尔值
*/ */
public function upload($name) public function upload($name)
{ {
if(empty($_FILES[$name]['name'])) //上传文件为空时 if (empty($_FILES[$name]['name'])) { //上传文件为空时
{
$this->message($this->errors['empty']); $this->message($this->errors['empty']);
return false; return false;
...@@ -97,15 +92,13 @@ ...@@ -97,15 +92,13 @@
$this->files = $_FILES[$name]; $this->files = $_FILES[$name];
if(!file_exists($this->savePath)) //目录不存在 if (!file_exists($this->savePath)) { //目录不存在
{
$this->message($this->errors['not_exist']); $this->message($this->errors['not_exist']);
return false; return false;
} }
if(!is_writable($this->savePath)) //目录不可写 if (!is_writable($this->savePath)) { //目录不可写
{
$this->message($this->errors['unwritable']); $this->message($this->errors['unwritable']);
return false; return false;
...@@ -124,13 +117,11 @@ ...@@ -124,13 +117,11 @@
* @access private * @access private
* @return boolean * @return boolean
*/ */
private function moveFile() private function moveFile()
{ {
$files = $this->files; $files = $this->files;
if ($this->formats != "" && !in_array($this->fileExt, $this->formats)) if ($this->formats != "" && !in_array($this->fileExt, $this->formats)) {
{
$formats = implode(',', $this->formats); $formats = implode(',', $this->formats);
$message = "您上传的文件" . $files["name"] . "是" . $this->fileExt . "格式的,系统不允许上传,您只能上传" . $formats . "格式的文件。"; $message = "您上传的文件" . $files["name"] . "是" . $this->fileExt . "格式的,系统不允许上传,您只能上传" . $formats . "格式的文件。";
$this->message($message); $this->message($message);
...@@ -138,63 +129,58 @@ ...@@ -138,63 +129,58 @@
return false; return false;
} }
if ($files["size"] / 1024 > $this->maxSize) if ($files["size"] / 1024 > $this->maxSize) {
{
$message = "您上传的 " . $files["name"] . ",文件大小超出了系统限定值" . $this->maxSize . " KB,不能上传。"; $message = "您上传的 " . $files["name"] . ",文件大小超出了系统限定值" . $this->maxSize . " KB,不能上传。";
$this->message($message); $this->message($message);
return false; return false;
} }
if (!$this->cover) //当不能覆盖时 if (!$this->cover) { //当不能覆盖时
{ if (file_exists($this->savePath . $this->saveName)) { //有相同的文件存在
if(file_exists($this->savePath.$this->saveName)) //有相同的文件存在
{
$this->message($this->saveName . $this->errors['same_file']); $this->message($this->saveName . $this->errors['same_file']);
return false; return false;
} }
} }
if (!@move_uploaded_file($files["tmp_name"], iconv("utf-8", "gbk", $this->savePath . $this->saveName))) if (!@move_uploaded_file($files["tmp_name"], $this->savePath . DIRECTORY_SEPARATOR . $this->saveName)) {
{ switch ($files["error"]) {
switch($files["errors"])
{
case '0': case '0':
$message = "文件上传成功"; $message = "Загрузка файла успешно завершена";
break; break;
case '1': case '1':
$message = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值"; $message = "Загруженный файл превышает значение параметра upload_max_filesize в php.ini";
break; break;
case '2': case '2':
$message = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值"; $message = "Размер загружаемого файла превышает значение, указанное параметром MAX_FILE_SIZE в форме HTML";
break; break;
case '3': case '3':
$message = "文件只有部分被上传"; $message = "Загружена только часть файла";
break; break;
case '4': case '4':
$message = "没有文件被上传"; $message = "Файлы не были загружены";
break; break;
case '6': case '6':
$message = "找不到临时目录"; $message = "Временный каталог не найден";
break; break;
case '7': case '7':
$message = "写文件到硬盘时出错"; $message = "Ошибка записи файла на жесткий диск";
break; break;
case '8': case '8':
$message = "某个扩展停止了文件的上传"; $message = "Расширение перестало загружать файлы";
break; break;
case '999': case '999':
default: default:
$message = "未知错误,请检查文件是否损坏、是否超大等原因。"; $message = "Неизвестная ошибка, проверьте, не поврежден ли файл, не слишком ли он большой и т. Д.";
break; break;
} }
...@@ -214,29 +200,23 @@ ...@@ -214,29 +200,23 @@
* @access private * @access private
* @return string $fileName 返回生成的文件名字符串 * @return string $fileName 返回生成的文件名字符串
*/ */
private function randomFileName() private function randomFileName()
{ {
if ($this->randomNameType == 1) // 生成时间格式文件名 $fileName = '';
{ if ($this->randomNameType == 1) { // 生成时间格式文件名
date_default_timezone_set('PRC'); //设置时区 date_default_timezone_set('PRC'); //设置时区
$date = date($this->randomLength); $date = date($this->randomLength);
$fileName = $date . "_" . mt_rand(10000, 99999); $fileName = $date . "_" . mt_rand(10000, 99999);
} } elseif ($this->randomNameType == 2) { // 生成随机字符文件名
elseif ($this->randomNameType == 2) // 生成随机字符文件名
{
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
$max = strlen($chars) - 1; $max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000); mt_srand((double) microtime() * 1000000);
for($i = 0; $i < $this->randomLength; $i++) for ($i = 0; $i < $this->randomLength; $i++) {
{
$fileName .= $chars[mt_rand(0, $max)]; $fileName .= $chars[mt_rand(0, $max)];
} }
} } else {
else
{
$fileName = ''; $fileName = '';
} }
...@@ -249,13 +229,11 @@ ...@@ -249,13 +229,11 @@
* @access private * @access private
* @return void * @return void
*/ */
private function setSeveName() private function setSeveName()
{ {
$this->saveName = $this->randomFileName().".".$this->fileExt; $this->saveName = $this->randomFileName() . "." . $this->fileExt;
if($this->saveName == '') //如果没生成随机文件名,就保留原文件名 if ($this->saveName == '') { //如果没生成随机文件名,就保留原文件名
{
$this->saveName = $this->files['name']; $this->saveName = $this->files['name'];
} }
} }
...@@ -266,7 +244,6 @@ ...@@ -266,7 +244,6 @@
* @access public * @access public
* @return string * @return string
*/ */
public function getSeveName() public function getSeveName()
{ {
return $this->saveName; return $this->saveName;
...@@ -278,7 +255,6 @@ ...@@ -278,7 +255,6 @@
* @access public * @access public
* @return string * @return string
*/ */
public function getFileExt($fileName) public function getFileExt($fileName)
{ {
return trim(strtolower(substr(strrchr($fileName, '.'), 1))); return trim(strtolower(substr(strrchr($fileName, '.'), 1)));
...@@ -291,7 +267,6 @@ ...@@ -291,7 +267,6 @@
* @param array $configs 配置项数组 * @param array $configs 配置项数组
* @return void * @return void
*/ */
public function redirect() public function redirect()
{ {
header('location: ' . $this->redirectURL); header('location: ' . $this->redirectURL);
...@@ -303,7 +278,6 @@ ...@@ -303,7 +278,6 @@
* @access public * @access public
* @return void * @return void
*/ */
public function message($message, $success = 0) public function message($message, $success = 0)
{ {
$array = array( $array = array(
...@@ -313,29 +287,23 @@ ...@@ -313,29 +287,23 @@
$url = $this->saveURL . $this->saveName; $url = $this->saveURL . $this->saveName;
// 适用于跨域上传时,跳转到中介页面等 // 适用于跨域上传时,跳转到中介页面等
if ($this->redirect) if ($this->redirect) {
{
$this->redirectURL .= "&success=" . $success . "&message=" . $message; $this->redirectURL .= "&success=" . $success . "&message=" . $message;
if ($success == 1) if ($success == 1) {
{
$this->redirectURL .= '&url=' . $url; $this->redirectURL .= '&url=' . $url;
} }
$this->redirect(); $this->redirect();
} } else {
else if ($success == 1) {
{
if ($success == 1)
{
$array['url'] = $url; $array['url'] = $url;
} } else {
else
{
$array['message'] = $message; $array['message'] = $message;
} }
echo json_encode($array); echo json_encode($array);
} }
} }
}
}
...@@ -41,11 +41,11 @@ ...@@ -41,11 +41,11 @@
if ($imageUploader->upload($name)) if ($imageUploader->upload($name))
{ {
$imageUploader->message('上传成功!', 1); $imageUploader->message('Загружен успешно!', 1);
} }
else else
{ {
$imageUploader->message('上传失败!', 0); $imageUploader->message('Загрузка не удалась!', 0);
} }
} }
?> ?>
\ No newline at end of file
...@@ -24,6 +24,7 @@ class DocumentationAdminController extends AdminController ...@@ -24,6 +24,7 @@ class DocumentationAdminController extends AdminController
'Update' => 'Редактирование контента', 'Update' => 'Редактирование контента',
'Delete' => 'Удаление контента', 'Delete' => 'Удаление контента',
'View' => 'Просмотр контента', 'View' => 'Просмотр контента',
'Upload' => 'Загрузка картинок',
]; ];
} }
...@@ -235,4 +236,35 @@ class DocumentationAdminController extends AdminController ...@@ -235,4 +236,35 @@ class DocumentationAdminController extends AdminController
} }
} }
public function actionUpload()
{
require(\yii\helpers\FileHelper::normalizePath(\Yii::getAlias('@webroot') . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'editormd' . DIRECTORY_SEPARATOR . 'examples' . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'editormd.uploader.class.php'));
$savePath = \yii\helpers\FileHelper::normalizePath(\Yii::getAlias('@frontend') . DIRECTORY_SEPARATOR . 'web' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'documentation' . DIRECTORY_SEPARATOR);
$saveURL = Yii::$app->params['frontUrl'] . '/uploads/documentation/';
$formats = array(
'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp')
);
$name = 'editormd-image-file';
if (isset($_FILES[$name])) {
$imageUploader = new \EditorMdUploader($savePath, $saveURL, $formats['image'], false); // Ymdhis表示按日期生成文件名,利用date()函数
$imageUploader->config(array(
'maxSize' => 1024, // 允许上传的最大文件大小,以KB为单位,默认值为1024
'randomNameType' => 2,
'randomLength' => 20,
'cover' => true // 是否覆盖同名文件,默认为true
));
if ($imageUploader->upload($name)) {
$imageUploader->message('Загружен успешно!', 1);
} else {
$imageUploader->message('Загрузка не удалась!', 0);
}
}
}
} }
...@@ -139,7 +139,7 @@ class DocList extends \yii\db\ActiveRecord ...@@ -139,7 +139,7 @@ class DocList extends \yii\db\ActiveRecord
$list = []; $list = [];
$thisLevel = DocList::find()->where(['=', 'parent_id', $parent_id])->orderBy(['position' => SORT_ASC])->all(); $thisLevel = DocList::find()->where(['=', 'parent_id', $parent_id])->orderBy(['position' => SORT_ASC])->all();
foreach ($thisLevel as $level) { foreach ($thisLevel as $level) {
if ($updated->id == $level->id && !$ignore) if ($updated && $updated->id == $level->id && !$ignore)
continue; continue;
$l = ''; $l = '';
......
...@@ -43,7 +43,7 @@ use common\modules\documentation\models\DocList; ...@@ -43,7 +43,7 @@ use common\modules\documentation\models\DocList;
], ],
[ [
'class' => 'common\components\ColorActionColumn', 'class' => 'common\components\ColorActionColumn',
'template' => '{view} {update} {delete}', 'template' => '{update} {delete}',
// 'buttons' => [ // 'buttons' => [
// 'copy' => function ($url, $model, $key) { // 'copy' => function ($url, $model, $key) {
// return '<a href="' . Url::toRoute(['copy', 'id' => $model->id]) . '">' . Html::beginTag('i', [ // return '<a href="' . Url::toRoute(['copy', 'id' => $model->id]) . '">' . Html::beginTag('i', [
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment