Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

template v2에 맞는 기본 레이아웃 스킨 탑재 #2237

Closed
eondcom opened this issue Dec 19, 2023 · 11 comments
Closed

template v2에 맞는 기본 레이아웃 스킨 탑재 #2237

eondcom opened this issue Dec 19, 2023 · 11 comments
Labels
bug 버그로 확인된 사항 patch available 패치 있음 표시 (bug와 함께 사용)

Comments

@eondcom
Copy link
Contributor

eondcom commented Dec 19, 2023

template v2 블레이드 문법에 맞게 작성된 기본 레이아웃이 코어에 포함되면 좋겠습니다.
매뉴얼을 보고 해보고 있긴 한데
layout.blade.php 이렇게 하면 되는 줄 알았는데 이건 안되고

그럼 결국 html만 되면 blade.php에서 오는 에디터상의 이점은..?

layout.html 이렇게 만들고

이렇게 되면 결국 @foreach와 같은 문법은<!-- -->주석보다 못한 일반 텍스트 글자처럼 인식해버립니다.

@version(2)
@load ('assets/css/template-v2.scss', $vars)
<div class="template-v2">
    <header>
        header
    </header>
    <nav>
        nav
    </nav>
    <aside>
        aside
    </aside>
    <main>
        <article>article</article>
        <section>section</section>
    </main>
    <footer>
        footer
    </footer>
</div>

이렇게 해야하더군요
ps. 매뉴얼에 보면 $vars 이 부분은 설명이 따로 없는거 같던데 이건 뭔가요

컨텐츠 부분을 출력하기 위해
{$content} 이 부분이

<!--#TemplateStart:modules/page/tpl/content.html--> <div widget="widgetBox" style="float: left; width: 100%; border-width: 0px; border-style: solid; border-color: rgb(177, 179, 181); margin: 0px 0px 8px; background-color: rgb(255, 255, 255); background-image: none; background-repeat: repeat; background-position: 0% 0%;;" widget_padding_left="0" widget_padding_right="0" widget_padding_top="0" widget_padding_bottom="0" css_class="row" widget_sequence="0" widget_cache="0" ><div><div><img class="zbxe_widget_output" style="float: left; width: 100%; border-width: 0px; border-style: solid; border-color: rgb(0, 0, 0); margin: 0px 0px 8px; background-color: rgb(255, 255, 255); background-image: none; background-repeat: repeat; background-position: 0% 0%;" widget="content" widgetstyle="default" widget_padding_top="0" widget_padding_right="0" widget_padding_bottom="0" widget_padding_left="0" css_class="col" skin="default" colorset="white" content_type="document" list_type="normal" tab_type="none" markup_type="table" list_count="5" cols_list_count="5" page_count="1" content_cut_size="100" option_view="title%2Cregdate%2Cnickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" duration_new="12" order_target="regdate" order_type="desc" thumbnail_type="crop" thumbnail_width="100" thumbnail_height="75" ws_colorset="white" ws_title="csc" ws_desc="Y" ws_more_url="http%3A%2F%2Flocalhost" ws_more_text="%EB%8D%94%EB%B3%B4%EA%B8%B0" widget_sequence="0" widget_cache="0" subject_cut_size="0" nickname_cut_size="0" module_srl="56%2C58%2C60%2C62%2C68%2C70%2C112%2C117%2C262%2C267%2C280%2C366%2C373%2C380%2C405%2C413%2C419%2C454%2C456%2C496%2C506%2C511%2C518%2C523%2C537%2C560%2C562%2C578%2C746%2C866%2C869%2C906%2C923%2C932%2C938%2C942%2C944" /><img class="zbxe_widget_output" style="float: left; width: 100%; border-width: 0px; border-style: solid; border-color: rgb(0, 0, 0); margin: 0px 0px 8px; background-color: rgb(255, 255, 255); background-image: none; background-repeat: repeat; background-position: 0% 0%;" widget="content" widgetstyle="default" widget_padding_top="0" widget_padding_right="0" widget_padding_bottom="0" widget_padding_left="0" css_class="col" skin="default" colorset="white" content_type="document" list_type="normal" tab_type="none" markup_type="table" list_count="5" cols_list_count="5" page_count="1" content_cut_size="100" option_view="title%2Cregdate%2Cnickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" duration_new="12" order_target="regdate" order_type="desc" thumbnail_type="crop" thumbnail_width="100" thumbnail_height="75" ws_colorset="white" ws_title="csc" ws_desc="Y" ws_more_url="http%3A%2F%2Flocalhost" ws_more_text="%EB%8D%94%EB%B3%B4%EA%B8%B0" widget_sequence="0" widget_cache="0" subject_cut_size="0" nickname_cut_size="0" module_srl="56%2C58%2C60%2C62%2C68%2C70%2C112%2C117%2C262%2C267%2C280%2C366%2C373%2C380%2C405%2C413%2C419%2C454%2C456%2C496%2C506%2C511%2C518%2C523%2C537%2C560%2C562%2C578%2C746%2C866%2C869%2C906%2C923%2C932%2C938%2C942%2C944" /></div></div></div> <!--#Meta:modules/page/tpl/js/page_admin.js--> <div class="btnArea"> <span class="btn-group"> <button class="btn" type="button" onclick="doRemoveWidgetCache(56); return false;">캐시파일 재생성</button> <a class="btn" href="/rx/index.php?mid=index&act=dispPageAdminInfo&module_srl=56">설정</a> <a class="btn" href="/rx/index.php?mid=index&act=dispPageAdminContentModify">페이지 수정</a> </span> </div> <!--#TemplateEnd:modules/page/tpl/content.html-->

이렇게 그대로 코드가 노출된 채로 실행이 되버리네요.

{{ $content }}
이렇게 입력해도 동일하게 위와 같은 코드가 노출됩니다.

@kijin
Copy link
Member

kijin commented Dec 19, 2023

네, html 확장자만 인식하는 부분이 몇 군데 남아 있어서 처리중입니다. (버그로 취급)

$vars를 넣어서 PHP 변수를 SCSS에 전달하는 것은 선택사항입니다. 필요 없으면 쓰지 마세요.

HTML을 출력할 곳은 {{ $content|noescape }} 또는 {!! $content !!} 문법을 사용하여 escape 방지 처리를 하셔야 합니다. (버그가 아니고, Blade 문법은 원래 무조건 escape되므로 수정 계획 없음)

@kijin kijin added bug 버그로 확인된 사항 patch available 패치 있음 표시 (bug와 함께 사용) and removed patch available 패치 있음 표시 (bug와 함께 사용) labels Dec 19, 2023
@eondcom
Copy link
Contributor Author

eondcom commented Dec 19, 2023

버그 걷어낸 뒤에 기본 템플릿 파일도 제공될 계획이 있나요?

{{ $menu['link'] }}
{{$menu['link']}}
{$menu['link']}}

이렇게 다 동작이 되던데 원래 이렇게가 맞는건지 뭘 써야되는건지 혼동이 되서요.
scss에서 $vars도 어떤 식으로 사용해야하는지에 예제 등이 있었으면 좋겠습니다.

@kijin
Copy link
Member

kijin commented Dec 19, 2023

언급하신 3가지 문법은 모두 공식적으로 허용됩니다. v2 호환 문법에 대해서는 매뉴얼에 자세히 나와 있습니다.

SCSS $vars는 오래 전부터 지원하던 기능이라 새로운 기능이 아니어서 매뉴얼에서 빠진 듯 합니다.

이미 잘 쓰고 있는 default, xedition 등의 레이아웃과 스킨을 굳이 변환할 이유는 없으니, 나중에 신규 테마를 도입할 경우 v2 문법으로 제공하려고 합니다.

@eondcom
Copy link
Contributor Author

eondcom commented Dec 19, 2023

아무래도 기존 문법을 알고 쓰시는 분들의 경우 매뉴얼에 있는 내용으로 모두 파악이 되겠습니다만

@Class, @Style, @selected 등의 지시자를 활용할 것을 권장합니다.

이렇게 매뉴얼 있다해도 이걸 어떻게 써야하는지 안 써본 입장에서는 어떻게 사용하는건지 예시가 없으니 막막합니다.

@foreach ($main_menu->list as $menu)
        @foreach ($menu['list'] as $menu)
        <ul @selected>
            <li>{{ $menu['link'] }}</li>
        </ul>
        @endforeach
        @endforeach

feat. 삽질중

@kijin
Copy link
Member

kijin commented Dec 19, 2023

Blade 문법을 차용한 이유는 Blade와 관련된 자료를 자유롭게 참고할 수 있도록 하기 위해서입니다. 그 중에는 Blade 공식 매뉴얼도 포함됩니다.

https://laravel.kr/docs/9.x/blade#conditional-classes

@eondcom
Copy link
Contributor Author

eondcom commented Dec 19, 2023

마치 레시피는 있지만 음식 샘플이 있으면 더 편하게 음식을 고를 수 있는 것처럼,
위에도 제공 계획이 있는지 여쭤봤었는데요,

나중에 신규 테마를 도입할 경우 v2 문법으로 제공하려고 합니다.

곧 여기서 언급하신 신규 테마가 코어 업데이트와 같이 나올 계획이 있는지 아니면 언제쯤 신규 테마를 도입하실 예정이신지 궁금합니다.

@kijin
Copy link
Member

kijin commented Dec 19, 2023

라이믹스 2.2를 타겟으로, 레이아웃과 각종 모듈 스킨들을 하나의 패키지로 묶어서 배포할 수 있는 "테마" 기능을 준비중입니다. 테마 제작에는 반드시 신규 문법을 사용하도록 할 예정입니다.

그러려면 예제 테마를 개발해야 하는데, 별다른 디자인이 들어가지 않은 와이어프레임 구조만 제공하거나 기존의 default/xedition 레이아웃/스킨을 테마로 변환한다면 비교적 쉽게 만들 수 있겠지만, 만약 새로운 디자인으로 예제 테마를 만들려면 (최소한 기존에 제공되던 것들보다는 괜찮아야 할 테니) 시간과 예산이 꽤 많이 필요합니다. 이 부분은 아직 결정되지 않아서 정확하게 말씀드리기 어렵습니다.

새로운 기능에 많은 관심을 가져 주셔서 감사드리고, 재촉하시는 것도 그런 관심의 표현이라 생각합니다. 그러나 개발, 문서화, 디자인 등이 모두 엮여 있는 이런 대규모의 패치를 일사천리로 진행하기에는 일손이 많이 부족합니다. 새 기능의 베타테스터로 활동하시려면 예전처럼 여기저기 뒤져보며 배우는 수밖에 없는 점 양해 부탁드립니다.

일단 이 이슈는 layout.blade.php를 인식하지 못한다는 버그에 한정하여 처리하겠습니다. 당분간 사용할 수 있는 우회책으로는 layout.html에서 layout.blade.php를 인클루드하여 사용하는 방법이 있겠습니다.

@eondcom
Copy link
Contributor Author

eondcom commented Dec 19, 2023

아무래도 XE 쪽을 전문으로 하다보니 XE 레이아웃만 수천개 이상 작업했을 겁니다.
그러다보니 레이아웃 쪽에서 새로운 문법과 기능이 적용이 된다고 해서 좀 더 관심있게 살펴보고 있습니다.

이게 과연 더 좋은 방향이 맞는가, 실상 사용하면서 기존의 문법에서 불편했던 점이 없었는데
과거의 것 중 block, loop, cond 등 제작에서 아주 중요한 부분들이 사라진다고 하니
레이아웃 제작자 입장에서는 아주 큰 변화이기도 합니다.
온고지신이라는 말이 있듯이 그누보드의 경우 PHP5.2~8.3까지 지원이 되는데,
라이믹스는 수천개의 자료들이 기본적으로 사용하고 있던 문법들을 모두 걷어내고 하는 건 아닐까 하는 우려의 시선도 있습니다만.

물론 아직 현재까지의 개발문서의 내용으로 보면 두가지 형태 모두 지원을 하는데 v2의 경우는 별도의 blade.php 라고 쓰면 된다라고 하는데
점점 패키지 테마 기능이 활성화되다보면 v1은 이름에서부터 뭔가 옛것 없어지는 게 아닐까 싶은 걱정도 있긴 합니다.
이상 사소한 �넋두리였고,

남기신 코멘트에서와 같이 와이어프레임 구조만 되도 괜찮을 듯 합니다.
저도 이 이슈남기면서 그냥 기본 와이어프레임 정도는 만들었는데요.
레이아웃 스킨을 만들다보니, 디자인상 최근게시물 위젯도 만들어야겠다 생각이 들더군요.
그러다보면 언급하신대로 각종 모듈 스킨들이 하나의 패키지 형태로 작업이 되겠고요.

과거에도 있었던 그 테마 기능이 있었듯이. 저도 플러그인 형태로 레이아웃 안에서 쿼리문을 짜서 넣기도 하고, 각종 모듈 스킨들을 레이아웃에서 담당하게 만들기도 합니다. 관리 측면에서도 그냥 단순 보관 형태지만 플러그인 폴더에 다른 모듈 스킨들을 넣어두기도 하고요.

과거에는 XE의 장점이 모듈식으로 다양한 위젯 스킨과 모듈 스킨을 조합해서 하나의 사이트를 만든다는 것이었는데
실제로 소비자가 그렇게 원하는대로 가져다가 쓰려면 요리할 때도 다양한 재료를 섞어 만들려면 재료의 성질이나 섞였을 때의 맛의 퀄리티가 다양해지다보면 결국 소비자는 만들어진 공산품에 더 편하게 입맛이 길들여지는 것처럼, 내가 잘 알지도 못하고 테스트해볼만큼 여유가 있지 않다보니 다양한 스킨보다는 정해진 틀을 가져다가 사용하는 추세로 바뀐 거 같았습니다.

요즘 판매하는 스킨들도 보면 레이아웃 기본, 게시판 스킨(목록형,갤러리형,웹진형,FAQ형 등), 다양한 최근게시물스킨, 회원정보스킨 등등이 하나로 합쳐진 형태로 좀 더 높은 가격을 이뤄서 판매가 이뤄지는 것을 알 수 있는데요,
그렇듯이 패키지 형태로 제공이 된다면 거기에 맞게 예제 테마와 샘플 패키지가 제공되는 것이 소비자가 가져다 쓰기에는 맞는게 아닌가 생각이 듭니다. 시간이 많이 걸린다면 와이어프레임 형태만 되도, 그것을 기반으로 새로운 제작자가 새로운 테마를 만들어서 배포하기도 용이할테고요.
XE에도 있었듯이 스켈레톤 테마를 만들고 필요한 모듈만 몇가지 넣어서 패키지 형태로 같이 배포하면 좋겠습니다. 필요하신 부분이 있으면 말씀해주시면 저도 작업 가능한 부분은 추가해보겠습니다.

@kijin
Copy link
Member

kijin commented Dec 19, 2023

@eondcom 네, 말씀하신 것처럼 레이아웃과 주요 모듈의 스킨들을 하나의 패키지로 묶어서 판매/배포하는 분이 많고, 구매자 입장에서도 그것을 분해해서 여러 모듈 폴더에 나누어 업로드하기는 무척 귀찮습니다. 그래서 예전에 XE에서 시도하는 듯 하다가 버려진 테마 기능을 다시 살리려는 것입니다.

템플릿 v2 문법 사용을 활성화시키기 위해 이런저런 당근을 제공하겠지만, v1 문법 지원을 중단할 계획은 전혀 없습니다. 예전에 만들어진 자료들은 PHP 7.x 호환성 때문에 일부 수정해야 하는 것을 제외하면 앞으로도 계속 작동할 것입니다.

라이믹스는 오래된 자료의 지원을 일부러 끊지 않습니다. PHP 버전이 점점 올라감에 따라 자연스럽게 버려지는 것을 흐뭇하게 바라볼 뿐입니다.^^

@eondcom
Copy link
Contributor Author

eondcom commented Dec 19, 2023

@kijin 그럼 계속 지원은 하되, cond, block, loop는 v2로 선언했을 때 혼용이 안된다는 말씀 맞나요?

@kijin
Copy link
Member

kijin commented Dec 19, 2023

@eondcom 네, 예전처럼 .html 템플릿에 버전 선언 없이 사용하시면 기존 템플릿 문법 모두 그대로 지원합니다.

@kijin kijin added the patch available 패치 있음 표시 (bug와 함께 사용) label Dec 30, 2023
@kijin kijin closed this as completed in a102f20 Jan 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug 버그로 확인된 사항 patch available 패치 있음 표시 (bug와 함께 사용)
Projects
None yet
Development

No branches or pull requests

2 participants