커뮤니티

특정모듈에서 목록에 첨부파일 출력하기

2025.03.07 02:13
79
0
CMS/프레임워크 Rhymix 2.1
개발 언어 PHP 8.4
해결 Y
일반적으로 게시판 목록에서 아래와 같이 하면 첨부된 파일 목록이 출력됩니다.

$document->getUploadedFiles()
 
지금 작업 중인게 contents 모듈인데요. 저도 어떻게 동작되는지 잘 모릅니다.
 
modules/contents/contents.view.php
function dispContentsContentList(){..}

리스트를 담당하는 함수인데, 

 

스킨에서 

{var_dump($document)} 해보면 아래와 같이

 

object(DocumentItem)#617 (31) { ["error"]=> int(0) ["message"]=> string(7) "success" ["variables"]=> array(25) { ["document_srl"]=> int(4677) ["module_srl"]=> int(4492) ["member_srl"]=> int(5) ["category_srl"]=> int(0) ["sale_point"]=> int(0) ["sale_profit"]=> NULL ["purchase_count"]=> NULL ["title"]=> string(4) "sadf" ["copyright_srl"]=> NULL ["closed"]=> string(0) "" ["sale"]=> NULL ["anonymous"]=> string(0) "" ["adult"]=> string(0) "" ["preview"]=> string(0) "" ["capacity"]=> int(12221) ["extension"]=> string(0) "" ["sale_period_start_date"]=> NULL ["sale_period_end_date"]=> NULL ["regdate"]=> string(14) "20250307012316" ["apparent_module_srl"]=> int(4492) ["origin_module_srl"]=> int(4492) ["comment_count"]=> NULL ["status"]=> string(6) "PUBLIC" ["uploadedFiles"]=> NULL ["title_color"]=> string(0) "" } ["httpStatusCode"]=> int(200) ["document_srl"]=> int(4677) ["lang_code"]=> NULL ["grant_cache"]=> NULL ["allow_trackback_status"]=> NULL ["comment_page_navigation"]=> NULL ["columnList"]=> array(0) { } ["allowscriptaccessList"]=> array(0) { } ["allowscriptaccessKey"]=> int(0) ["uploadedFiles"]=> array(0) { } ["extra_eids":protected]=> array(0) { } ["filesize"]=> int(12221) ["file_size"]=> string(7) "11.93KB" ["purchase_count"]=> NULL ["sale_point"]=> string(59) "

 

file_size는 불러오는데, uploadedFiles는 못 불러오네요. 

그래서 아래와 같은 코드를 해당 함수에 추가해놓고,

이제는 리스트에서 이렇게 하면 가져와지긴 합니다.

 

{var_dump($document->variables['uploadedFiles'])}

 

주먹구구식으로 소 뒷걸음질 치는 격으로 하고 있습니다.

고수분들의 조언 좀 부탁드립니다.


contents.view.php.zip

1089라인

// 파일 가져오기 (eond, 250307)
                    $oFileModel = getModel('file');
                    // 문서 목록을 가져오는 부분
                    $output = $oDocumentModel->getDocumentList($args);
                    foreach ($output->data as $key => $document) {
                        // 파일 목록을 가져와서 문서 객체에 설정
                        $files = $oFileModel->getFiles($document->document_srl);
                        $document->add('uploadedFiles', $files);
                        //$oDocument->add('uploadedFiles', $oDocument->getUploadedFiles());
                    }
//                    Context::set('document_list', $output->data);
//                    {var_dump($document->variables['uploadedFiles'])}
//                    $oDocument->add('uploadedFiles', $oDocument->getUploadedFiles());

//                    $args->uploadedFiles = $oDocument->getUploadedFiles();
//                    @foreach($oDocument->getUploadedFiles() as $key => $file)
//                        @if(in_array($file->file_extension,array('jpg','jpeg','gif','png')))
//                        <img src="{$file->uploaded_filename}" alt="" style="order:-1"|cond="$file->cover_image=='Y'"/>
//                    @endif
//                @endforeach


 

 

eond Lv. 12
# 라이믹스 스킨 제작은 어디? >>>> XE 레이아웃, 라이믹스 스킨제작은 이온디에서 커스터마이징해드립니다.
# 빠른 라이믹스 커뮤니티용 호스팅을 찾고 계신가요? >>>> 이온디호스팅 서비스는 PHP8 & Redis 서버 캐시를 활용하여 라이믹스에 최적화된 호스팅 서비스를 제공해드립니다. (서버세팅시 웹패널, 내도메인메일서비스도 함께 구축해드립니다.)
https://eond.com

댓글 8

  • 2025.03.07 02:39 #1902047
    1157 Context::set('content_list', $output->data); 이 줄 위에 아래 코드 추가하면 더 보기 좋네요!
    
             $oFileModel = getModel('file');
             //$output = $oDocumentModel->getDocumentList($args);
             foreach ($output->data as $key => $document) {
                 // 파일 목록을 가져와서 문서 객체에 설정
                 $files = $oFileModel->getFiles($document->document_srl);
                 $document->add('uploadedFiles', $files);
             }
    
    Context::set('contents_list', $output->data);

     

    다만 리스트에서 출력은

    [1] {var_dump($document->variables['uploadedFiles'])}
    [2] {var_dump($document->uploadedFiles)}

     

    2는 안되고 1만 되네요.

  • 2025.03.07 03:10 #1902051
    1. $output->data가 선언되기 전에 파일 모듈 불러오고 (976줄)
    $oFileModel = getModel('file');
    if($output->data){

    2. 파일 사이즈 체크하기 전에 업로드 파일 변수 추가하고 (1050줄)

    $oDocument->uploadFiles = $oFileModel->getFiles($oDocument->document_srl);
    if($oDocument->filesize){

    3. contents_list 출력하기 전에 uploadedFiles 추가해주고 (이건 필요없군요)

    $oDocument->add('uploadedFiles', $files);
    Context::set('contents_list', $output->data);

    3. 리스트에서 이렇게 해주면 되네요.

    @php
         foreach ($document->uploadFiles as $key => $val) {
            if($val->mime_type=='video/mp4'){
                echo "<div class='img-box'><video src='" . $val->uploaded_filename . "' style='width:200px;height:150px;'></video></div>";
            }
        }
    @endphp

     

  • 2025.03.07 10:25 #1902091

    왜 계속 $document->변수명을 직접 조작하고 계신지 모르겠습니다.

     

    $document->getUploadedFiles()가 나오지 않는 이유는 $document->variables['uploaded_count']가 비어 있기 때문입니다. DB에서 이 컬럼을 제대로 불러오지 않은 거죠. 기본적인 컬럼들을 DB에서 불러오면 uploadedFiles 같은 내부 자료구조들은 알아서 채워집니다. 직접 조작할 필요도 없고, 조작해서도 안 되는 변수들이예요.

     

    rx_documents 테이블의 컬럼 목록과 $document->variables의 값들을 비교해 보세요. 빠진 것이 있다면 그것부터 해결하시기 바랍니다. 지난번에 comment_count도 똑같은 상황이었죠? 정상적인 문서는 var_dump를 찍었을 때 comment_count, trackback_count, uploaded_count, status 순으로 나옵니다.

  • 2025.03.07 10:54 #1902124

    이전에 말씀하신 지난 번 코드도 한번 해보긴 했는데 잘 안됐습니다

    참고로 지난 번에 comment_count는 이렇게 해결했습니다.

    $oCommentModel = getModel('comment');
    $args->comment_count = $oCommentModel->getCommentcount($args->document_srl);
    $oDocument->add('comment_count', $args->comment_count);

     

    그래서 이번에도 file도 똑같은 케이스겠구나 싶어서

     

    $oFileModel = getModel('file');
    $args->uploadedFiles = $oFileModel->getFileList();
    $oDocument->add('uploadedFiles', $args->uploadedFiles);

     

    contents.view.php > dispContentsContentList() 에서 위와 같이 적고

    modules/contents/skins/ec_imin/form/file/template/webzine.blade.php 파일에는

    {var_dump($document->uploadedFiles)}

    이렇게 해봤는데 여전히 출력이 안되더라구요. 혹시 제가 잘못한 부분이 있을까요?

     

    > 확인해보니..

     

    output->data 안에서 적어줘야했고, getFileList가 아니라, getFiles($oDocument->document_srl) 였네요!

    $oFileModel = getModel('file');
    $args->uploadedFiles = $oFileModel->getFiles($oDocument->document_srl);
    $oDocument->add('uploadedFiles', $args->uploadedFiles);

    알려주셔서 감사합니다!

     

    스킨에서는 이렇게 했습니다.

     

    @foreach($document->get('uploadedFiles') as $key => $file)
        {var_dump($file)}
    @endforeach

     

    정리하면,

     

    [잘못된방법]

    $oDocument->uploadFiles = $oFileModel->getFiles($oDocument->document_srl);

    이렇게 $oDocument를 조작하는 방법 대신에

     

    [옳은 방법]

    $oDocument->add('uploadedFiles', $args->uploadedFiles);

     

    빠진 부분을 이렇게 추가해서 사용하라는 거 맞죠?

  • 2025.03.07 11:02 #1902130
    @php
    $hasVideo = false;
    foreach ($document->uploadFiles as $key => $val) {
    if($val->mime_type=='video/mp4'){
    echo "<div class='img-box'><video autoplay muted loop playsinline style='width:15rem;height:15rem;' ><source src='" . $val->uploaded_filename . "' type='video/mp4'></video></div>";
    $hasVideo = true;
    }
    }
    @endphp
    @if(!$hasVideo && $document->getThumbnail())
    <div class="img-box">
    <img src="{$document->getThumbnail(421,342)}" alt="">
    </div>
    @endif

     

    그러면 스킨에서도 위와 같이 없던걸 만들어내지 말고,

     

    @foreach($document->get('uploadedFiles') as $key => $file)
        {var_dump($file)}
    @endforeach

     

    이런 식으로 해서

     

    @php
        $hasVideo = false;
        foreach ($document->get('uploadedFiles') as $key => $val) {
            if($val->mime_type=='video/mp4'){
            echo "<div class='img-box'><video autoplay muted loop playsinline style='width:15rem;height:15rem;' ><source src='" . $val->uploaded_filename . "' type='video/mp4'></video></div>";
            $hasVideo = true;
            }
        }
    @endphp
    @if(!$hasVideo && $document->getThumbnail())
        <div class="img-box">
            <img src="{$document->getThumbnail(421,342)}" alt="">
        </div>
    @endif

     

    요렇게 쓰도록 수정했습니다.

  • 2025.03.07 11:05 #1902134

    아뇨, 넣을 필요가 없어야 하는 거예요.

    원래 있어야 하는 건데 그걸 왜 수동으로 집어넣고 있냐고요

     

    document model에서 불러오는 데이터는 순정 코어 그대로라고 가정하고...

    contents model에도 getDocument(), getDocumentList() 등의 함수가 있는 모양인데

    여기서 이상한 짓 하고 있지 않은지 굉장히 의심됩니다.

  • 2025.03.07 11:09 #1902139

    contents.model.php에서 getDocumentList 함수가 있네요.

    이게 잘못 작성된 거군요 ㅠ

  • 2025.03.07 11:11 #1902143

    $document->get('uploadedFiles')를 해야 하는 것부터 잘못된 겁니다.

    정상적인 문서라면 $document->getUploadedFiles()가 됩니다.

    내부 자료구조를 조작할 필요도, 내부 자료구조에 직접 접근할 필요도 없습니다.

     

    특히 문서를 불러올 때 columnList를 쓰는 곳이 있다면 유심히 살펴보세요.

    필수 컬럼을 빠뜨렸을 수 있으니까요.