epub 뷰어 애드온을 만들고 있는데 도움을 받고자 합니다.
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.2 |
문제 페이지 주소 | 비공개 (작성 후 5일 경과) |
<?php
if(!defined('__XE__')) exit();
if($called_position != 'after_module_proc' || Context::getResponseMethod() != 'HTML' || $this->act != 'dispBoardContent') return;
// 문서 정보 로드
if(Context::get('document_srl')) {
$oDocument = Context::get('oDocument');
} else {
$oDocumentModel = getModel('document');
$args = new stdClass();
$args->list_count = $this->list_count;
$args->module_srl = $this->module_srl;
$args->page = Context::get('page');
$output = $oDocumentModel->getDocumentList($args, true);
$document_list = array_values($output->data);
$oDocument = $document_list[0];
unset($document_list);
}
if(!$oDocument->document_srl) return;
// 문서 파일 추룰
if($oDocument->hasUploadedFiles()){
$srl = []; $ext = []; $get = []; $url = [];
$format = array('pdf','txt', 'tif', 'tiff', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx','epub');
foreach($oDocument->getUploadedFiles() as $key => $file){
$uploaded_filename = $file->uploaded_filename;
$filename = $file->source_filename;
$extension = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);
$_ext = explode('.', strtolower($filename));
$_ext = $_ext[count($_ext)-1];
if(in_array($_ext, $format)) {
$srl[] = $file->file_srl;
$ext[] = $_ext;
$get[$key] = urlencode(getUrl().'addons/ap_viewer/ap_viewer.php?uploaded_filename='._XE_PATH_.str_replace("./","",$uploaded_filename).'&filename='.$filename);
$getepub[$key] = urlencode(getUrl().''.str_replace("./","",$uploaded_filename));
switch ($extension) {
case pdf:
$url[] = 'https://4880.net/pdfjs/web/viewer.html?file=' . $get[$key];
if(!array_intersect($ext, $format)) return;
$ap_viewer_script .= "
var viewer_srl = '" . join(" | ",$srl) . "';
var viewer_ext = '" . join(" | ",$ext) . "';
var viewer_url = '" . join(" | ",$url) . "';
";
break;
case epub:
$url[]='https://4880.net/addons/ap_viewer/epubjs/reader/index.php?filename=https://s3.amazonaws.com/moby-dick/moby-dick.epub';
//$url[]='https://4880.net/addons/ap_viewer/epubjs/reader/index.php?filename='. $getepub[$key];
if(!array_intersect($ext, $format)) return;
$ap_viewer_script .= "
var viewer_srl = '" . join(" | ",$srl) . "';
var viewer_ext = '" . join(" | ",$ext) . "';
var viewer_url = '" . join(" | ",$url) . "';
";
break;
default:
$url[] = 'https://drive.google.com/viewerng/viewer?embedded=true&url=' . $get[$key];
if(!array_intersect($ext, $format)) return;
$ap_viewer_script .= "
var viewer_srl = '" . join(" | ",$srl) . "';
var viewer_ext = '" . join(" | ",$ext) . "';
var viewer_url = '" . join(" | ",$url) . "';
";
}
}
}
} else return;
// 변수 정리
$option = $addon_info->option;
$rprsnt = $addon_info->rprsnt;
if(!$option || !is_numeric($option)) $option = 1;
if(!$rprsnt || !is_numeric($rprsnt)) $rprsnt = 1;
Context::addHtmlHeader('<script>' . $ap_viewer_script . ' var viewer_option = ' . $option . '; var viewer_rprsnt = ' . $rprsnt . ';</script>');
Context::loadFile(array('./addons/ap_viewer/js/ap_viewer.js', 'body', '', null), true);
//Context::loadFile(array('./epubjs/libs/jszip/jszip.min.js', 'body', '', null), true);
?>
if(!defined('__XE__')) exit();
if($called_position != 'after_module_proc' || Context::getResponseMethod() != 'HTML' || $this->act != 'dispBoardContent') return;
// 문서 정보 로드
if(Context::get('document_srl')) {
$oDocument = Context::get('oDocument');
} else {
$oDocumentModel = getModel('document');
$args = new stdClass();
$args->list_count = $this->list_count;
$args->module_srl = $this->module_srl;
$args->page = Context::get('page');
$output = $oDocumentModel->getDocumentList($args, true);
$document_list = array_values($output->data);
$oDocument = $document_list[0];
unset($document_list);
}
if(!$oDocument->document_srl) return;
// 문서 파일 추룰
if($oDocument->hasUploadedFiles()){
$srl = []; $ext = []; $get = []; $url = [];
$format = array('pdf','txt', 'tif', 'tiff', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx','epub');
foreach($oDocument->getUploadedFiles() as $key => $file){
$uploaded_filename = $file->uploaded_filename;
$filename = $file->source_filename;
$extension = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);
$_ext = explode('.', strtolower($filename));
$_ext = $_ext[count($_ext)-1];
if(in_array($_ext, $format)) {
$srl[] = $file->file_srl;
$ext[] = $_ext;
$get[$key] = urlencode(getUrl().'addons/ap_viewer/ap_viewer.php?uploaded_filename='._XE_PATH_.str_replace("./","",$uploaded_filename).'&filename='.$filename);
$getepub[$key] = urlencode(getUrl().''.str_replace("./","",$uploaded_filename));
switch ($extension) {
case pdf:
$url[] = 'https://4880.net/pdfjs/web/viewer.html?file=' . $get[$key];
if(!array_intersect($ext, $format)) return;
$ap_viewer_script .= "
var viewer_srl = '" . join(" | ",$srl) . "';
var viewer_ext = '" . join(" | ",$ext) . "';
var viewer_url = '" . join(" | ",$url) . "';
";
break;
case epub:
$url[]='https://4880.net/addons/ap_viewer/epubjs/reader/index.php?filename=https://s3.amazonaws.com/moby-dick/moby-dick.epub';
//$url[]='https://4880.net/addons/ap_viewer/epubjs/reader/index.php?filename='. $getepub[$key];
if(!array_intersect($ext, $format)) return;
$ap_viewer_script .= "
var viewer_srl = '" . join(" | ",$srl) . "';
var viewer_ext = '" . join(" | ",$ext) . "';
var viewer_url = '" . join(" | ",$url) . "';
";
break;
default:
$url[] = 'https://drive.google.com/viewerng/viewer?embedded=true&url=' . $get[$key];
if(!array_intersect($ext, $format)) return;
$ap_viewer_script .= "
var viewer_srl = '" . join(" | ",$srl) . "';
var viewer_ext = '" . join(" | ",$ext) . "';
var viewer_url = '" . join(" | ",$url) . "';
";
}
}
}
} else return;
// 변수 정리
$option = $addon_info->option;
$rprsnt = $addon_info->rprsnt;
if(!$option || !is_numeric($option)) $option = 1;
if(!$rprsnt || !is_numeric($rprsnt)) $rprsnt = 1;
Context::addHtmlHeader('<script>' . $ap_viewer_script . ' var viewer_option = ' . $option . '; var viewer_rprsnt = ' . $rprsnt . ';</script>');
Context::loadFile(array('./addons/ap_viewer/js/ap_viewer.js', 'body', '', null), true);
//Context::loadFile(array('./epubjs/libs/jszip/jszip.min.js', 'body', '', null), true);
?>
epub 뷰어 애드온을 만들고 있는데 도움을 받고자 합니다.
51번 줄에서 확장자 epub 으로 업로드된 파일의 상대경로를 알고자 합니다.
검색해보니 쉬운게 아니더군요 .
참고사이트
https://terzeron.com/confluence/pages/viewpage.action?pageId=6455298
댓글 11
변경전
$url
[]=
'https://4880.net/addons/ap_viewer/epubjs/reader/index.php?filename=https://s3.amazonaws.com/moby-dick/moby-dick.epub'
;
변경후
$epubSiteUrl = getNotEncodedFullUrl('');
$epubFilePath = str_replace("./","",$file->uploaded_filename);
$epubFullUrl = $epubSiteUrl.$epubFilePath;
$url[] = $epubSiteUrl.'addons/ap_viewer/epubjs/reader/index.php?filename='.urlencode($epubFullUrl);
와우 구름이님 최고 !! 근대
마지막에 확장자 epub 들어가야 epub.js에서 렌더링 하게 되었있는데 원래 대로 /173/378/207/111.epub 처럼 할수없나요?
그렇게 하시려면 몇가지 방법이 있습니다.
간단하게 한가지 예를 들자면 .. 아래와 같은 방법이 있겠습니다.
1.url 변경
$url[] = $epubSiteUrl.'addons/ap_viewer/filedown.php?file_srl='.$file->file_srl.'.epub';$epubFullUrl = $epubSiteUrl.'epubs/'.$file->file_srl.'.epub';
$url[] = $epubSiteUrl.'addons/ap_viewer/epubjs/reader/index.php?filename='.urlencode($epubFullUrl);
아래 댓글 .htaccess 룰 추가
2.addons/ap_viewer/filedown.php 파일 생성
<?php
ini_set("display_errors", 0);
$file_srl = preg_replace("/[^0-9]*/s", "", $_GET['file_srl']);
if($file_srl == "") exit;
define('__XE__', TRUE);
define('__ZBXE__', TRUE);
require_once('../../config/config.inc.php');
$oContext = &Context::getInstance();
$oContext->init();
$oFileModel = getModel('file');
$fInfo = $oFileModel->getFile($file_srl);
$view_filename = $fInfo->source_filename;
$filePath = _XE_PATH_.str_replace("./","",$fInfo->uploaded_filename);
header('Pragma: public');
header('Expires: 0');
header('Content-Type: application/x-octetstream');
header('Content-Length: '.filesize($filePath));
header('Content-Disposition: attachment; filename='.$view_filename);
header('Content-Transfer-Encoding: binary');
ob_clean();
flush();
readfile($filePath);
?>
테스트는 못해봤습니다.
오류가 발생되면 로그 참고하셔서 수정하시길..
1.url 변경$url[] = $epubSiteUrl.'addons/ap_viewer/filedown.php?file_srl='.$file->file_srl.'.epub';$epubFullUrl = $epubSiteUrl.'addons/ap_viewer/filedown.php?file_srl='.$file->file_srl.'.epub';$url[] = $epubSiteUrl.'addons/ap_viewer/epubjs/reader/index.php?filename='.urlencode($epubFullUrl);
$epubFullUrl 을 사이트URL/짧은주소/file_srl.epub 처럼 하려면 .htaccess 를 수정하셔야합니다.
1. .htaccess 추가
RewriteRule ^epubs/.+\.(epub)$ ./addons/ap_viewer/filedown.php?file_srl=$0 [L]
2. URL 변경
$epubFullUrl = $epubSiteUrl.'epubs/'.$file->file_srl.'.epub';
$url[] = $epubSiteUrl.'addons/ap_viewer/epubjs/reader/index.php?filename='.urlencode($epubFullUrl);
/epubs 폴더에 파일이 다운로드가 되지 않네요...!!! ㅜㅜ 요렇게 나옵니다.
요걸 빼먹었군요 .. ㅎㅎ 잘됩니다. 감사합니다. 참 구름이님 이 애드온 배포 해도 되나요?
유용한 애드온이 되길 바랍니다.
감사합니다.