Загрузка файлов. Очередная.
В свете грядущего выхода 0.4, возможно, и не слишком актуально окажется — но когда еще он будет, этот выход.
Хак по-прежнему сделан из модификации заливки картинок. Работает на 0.3.1
Создаем следующие файлы с соответствующим содержимым:
/templates/skin/new/window_load_video.tpl
include/ajax/uploadVideo.php
В templates/skin/new/actions/ActionTopic/add.tpl
Так у нас будет доступна загрузка файлов при написании топиков.
Также необходимо создать папку uploads/videos и в config.php добавить
Конечно, все это требует еще некоторой обработки напильником (создания интерфейса управления загруженными файлами, доработки интерфейса загрузки и прочее) — но, если ничего сложного не требуется, работает вполне сносно.
Хак по-прежнему сделан из модификации заливки картинок. Работает на 0.3.1
Создаем следующие файлы с соответствующим содержимым:
/templates/skin/new/window_load_video.tpl
<div style="display: none;">
<div class="login-popup upload-image" id="window_load_video">
<div class="login-popup-top"><a href="#" class="close-block" onclick="return false;"></a></div>
<div class="content">
<form method="POST" action="" enctype="multipart/form-data" id="form_upload_video" >
<h3>Загрузка видео</h3>
<p><label for="img_file">{$aLang.uploadimg_file}:</label><br /><input type="file" name="img_file" value="" class="w100p" /></p>
<p><label for="align">{$aLang.uploadimg_align}:</label><br />
<select name="align" class="w100p">
<option value="">{$aLang.uploadimg_align_no}</option>
<option value="left">{$aLang.uploadimg_align_left}</option>
<option value="right">{$aLang.uploadimg_align_right}</option>
</select>
</p>
<p style="margin-bottom: 20px;"><label for="title">{$aLang.uploadimg_title}:</label><br /><input type="text" class="w100p" name="title" value="" /></p>
<input type="button" value="{$aLang.uploadimg_submit}" onclick="ajaxUploadVideo(document.getElementById('form_upload_video'),'{$sToLoad}');">
<input type="button" value="{$aLang.uploadimg_cancel}" onclick="hideImgUploadForm(); return false;">
</form>
</div>
<div class="login-popup-bottom"></div>
</div>
</div>
include/ajax/uploadVideo.php
<?
set_include_path(get_include_path().PATH_SEPARATOR.dirname(dirname(dirname(__FILE__))));
$sDirRoot=dirname(dirname(dirname(__FILE__)));
require_once($sDirRoot."/config/config.ajax.php");
$aForm=@$_REQUEST['value'];
$bStateError=true;
$sText='';
$sMsg=$oEngine->Lang_Get('system_error');
$sMsgTitle=$oEngine->Lang_Get('error');
if ($oEngine->User_IsAuthorization()) {
$sFile=null; $fileTypes = array("flv","zip","rar","jpg");
$oUserCurrent=$oEngine->User_GetUserCurrent();
if (is_uploaded_file($_FILES['img_file']['tmp_name'])) {
if(!($ext = strtolower(substr($_FILES['img_file']['name'], (strrpos($_FILES['img_file']['name'], ".") + 1))))) {
$sMsg = 'Не удалось определить тип файла...';
$sMsgTitle = "Ошибка загрузки";
} elseif(!in_array($ext, $fileTypes)) {
$sMsgTitle = "Ошибка загрузки";
$sMsg = 'Для загрузки можно использовать только файлы следующих типов: ' . implode(', ', $fileTypes);
} else {
$sFileTmp=$_FILES['img_file']['tmp_name'];
$sDirSave=DIR_UPLOADS_VIDEOS.'/'.func_generator(1).'/'.func_generator(1).'/'.func_generator(1).'/'.func_generator(1).'/'.$oUserCurrent->getId();
$sFileDest = func_generator().".".$ext;
$sFileFullPath=DIR_SERVER_ROOT.'/'.$sDirSave.'/'.$sFileDest;
@func_mkdir(DIR_SERVER_ROOT,$sDirSave);
copy($sFileTmp,$sFileFullPath);
chmod($sFileFullPath,0666);
$sFile=$sDirSave.'/'.$sFileDest;
}
}
if (!is_null($sFile)) {
$bStateError=false;
$sMsgTitle='ololo';
$sMsg='ololo';
$sText='<img src="'.DIR_WEB_ROOT.$sFile.'" ';
if (isset($_REQUEST['title']) and $_REQUEST['title']!='') {
$sText.=' title="'.htmlspecialchars($_REQUEST['title']).'" ';
}
if (isset($_REQUEST['align']) and in_array($_REQUEST['align'],array('left','right'))) {
$sText.=' align="'.htmlspecialchars($_REQUEST['align']).'" ';
}
$sText.='>';
}
} else {
$sMsgTitle=$oEngine->Lang_Get('error');
$sMsg=$oEngine->Lang_Get('need_authorization');
}
$GLOBALS['_RESULT'] = array(
"bStateError" => $bStateError,
"sText" => $sText,
"sMsgTitle" => $sMsgTitle,
"sMsg" => $sMsg,
);
?>
В templates/skin/new/actions/ActionTopic/add.tpl
находим {include file='window_load_img.tpl' sToLoad='topic_text'}
и добавляем {include file='window_load_video.tpl' sToLoad='topic_text'},
а после
<a href="#" onclick="showImgUploadForm(); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/images/panel/img.gif" width="20" height="20" title="{$aLang.panel_image}"></a>
добавляем
<a href="#" onclick="showVideoUploadForm(); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/images/panel/имя_иконки" width="20" height="20" title="{$aLang.panel_image}"></a>
Так у нас будет доступна загрузка файлов при написании топиков.
Также необходимо создать папку uploads/videos и в config.php добавить
define('DIR_UPLOADS_VIDEOS',DIR_UPLOADS.'/videos');
Конечно, все это требует еще некоторой обработки напильником (создания интерфейса управления загруженными файлами, доработки интерфейса загрузки и прочее) — но, если ничего сложного не требуется, работает вполне сносно.
1 комментарий