Загрузка файлов. Очередная.

В свете грядущего выхода 0.4, возможно, и не слишком актуально окажется — но когда еще он будет, этот выход.
Хак по-прежнему сделан из модификации заливки картинок. Работает на 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 комментарий

avatar
Вы забыли еще, что надо править файл other.js, а именно объявить функцию showVideoUploadForm().
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.