포럼
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
외부이미지 저장애드온의 새로운 접근법
2013.03.15 17:28
카르마님의 외부이미지 저장 애드온이 있습니다.
문서 저장시 외부 이미지를 복사하고 저장하면 로컬서버로 간편하게 저장이 됩니다.
링크가 깨지는 것을 예방할 수 있는 효과가 있습니다.
최근에 문서를 저장할 때가 아니라, 문서를 읽을 때 외부이미지 저장기능이 작동하면 좋겠다는 생각을 했습니다.
그런데 생각만큼 되지 않는군요.
제가 생각한 방식은 이렇습니다.
<?php
if(!defined('__ZBXE__') && !defined('__XE__')) exit();
/**
* @outimage.addon.php
* @author 카르마(http://www.wildgreen.co.kr)
*
**/
require_once('./addons/auto_outimage/auto_outimage.func.php'); // 함수가져오기
if(Context::get('module')=='admin') return; // 관리자 모듈에서는 실행않음
if($called_position == 'before_display_content') {
$var = $this->variables;
$document_srl = $var[document_srl];
if(!$document_srl) return;
$module_info = $oModuleModel->getModuleInfoByDocumentSrl($document_srl);
$args->document_srl = $document_srl;
$output = executeQuery('document.getDocument', $args);
$content = $output->data->content;
//$oDocument = $oDocumentModel->getDocument($document_srl);
// $content = $oDocument->getContent(false,false,false,false);
$upload_target_srl = $document_srl;
$oFileController = &getController('file');
$contImg = extractImage($content);
if(count($contImg)) {
$replace = $content;
foreach($contImg as $src) {
$ri_localfile = geRitLocalFile($src,$ri_avoid_domain,'N');
if(strcmp($src,$ri_localfile)==true)
{
$url = parse_url($ri_localfile);
$path_parts = pathinfo($url['path']);
$file_info['name']=$path_parts['basename'];
$file_info['tmp_name']=$ri_localfile;
$file_obj = $oFileController->insertFile($file_info,$module_info->module_srl,$upload_target_srl,0,true);
if(@$file_obj->variables['uploaded_filename']!=null) $replace = str_replace($src,$file_obj->variables['uploaded_filename'],$replace);
@unlink($ri_localfile);
}
}
$obj->module_srl = $module_info->module_srl;
$obj->content = $replace;
$obj->document_srl = $document_srl;
executeQuery('addons.auto_outimage.updateDocument', $obj);
}
}
?>
if(!defined('__ZBXE__') && !defined('__XE__')) exit();
/**
* @outimage.addon.php
* @author 카르마(http://www.wildgreen.co.kr)
*
**/
require_once('./addons/auto_outimage/auto_outimage.func.php'); // 함수가져오기
if(Context::get('module')=='admin') return; // 관리자 모듈에서는 실행않음
if($called_position == 'before_display_content') {
$var = $this->variables;
$document_srl = $var[document_srl];
if(!$document_srl) return;
$module_info = $oModuleModel->getModuleInfoByDocumentSrl($document_srl);
$args->document_srl = $document_srl;
$output = executeQuery('document.getDocument', $args);
$content = $output->data->content;
//$oDocument = $oDocumentModel->getDocument($document_srl);
// $content = $oDocument->getContent(false,false,false,false);
$upload_target_srl = $document_srl;
$oFileController = &getController('file');
$contImg = extractImage($content);
if(count($contImg)) {
$replace = $content;
foreach($contImg as $src) {
$ri_localfile = geRitLocalFile($src,$ri_avoid_domain,'N');
if(strcmp($src,$ri_localfile)==true)
{
$url = parse_url($ri_localfile);
$path_parts = pathinfo($url['path']);
$file_info['name']=$path_parts['basename'];
$file_info['tmp_name']=$ri_localfile;
$file_obj = $oFileController->insertFile($file_info,$module_info->module_srl,$upload_target_srl,0,true);
if(@$file_obj->variables['uploaded_filename']!=null) $replace = str_replace($src,$file_obj->variables['uploaded_filename'],$replace);
@unlink($ri_localfile);
}
}
$obj->module_srl = $module_info->module_srl;
$obj->content = $replace;
$obj->document_srl = $document_srl;
executeQuery('addons.auto_outimage.updateDocument', $obj);
}
}
?>
$called_position 에 대한 저의 이해가 떨어져서 인지, 작동이 안되네요.
문서저장 때와 문서읽을 때의 executeQuery 실행여부도 어떻게 확인해야 하는지 알수가 없네요.
애드온의 작동여부를 확인할 수 있는 디버깅 기법이 따로 있는지요?
지금 이 소스에서 어떤 문제가 있는지 고견을 부탁드립니다.