├── Example ├── Addon │ ├── 01_call_position │ │ ├── README.md │ │ ├── after_module_proc │ │ │ └── README.md │ │ ├── before_display_content │ │ │ └── README.md │ │ ├── before_module_init │ │ │ └── README.md │ │ └── before_module_proc │ │ │ └── README.md │ ├── 02_pass_variables_when_call │ │ └── README.md │ ├── 03_write_addon │ │ └── README.md │ ├── 04_use_xml_query │ │ └── README.md │ ├── 05_consideration │ │ └── README.md │ └── README.md ├── Module │ ├── 01_write_config_info │ │ └── README.md │ ├── 02_write_action │ │ └── README.md │ ├── 03_write_action_forward │ │ └── README.md │ ├── 04_use_trigger │ │ └── README.md │ ├── 05_use_ruleset │ │ └── README.md │ ├── 06_use_form_filter │ │ └── README.md │ ├── 07_define_db_query │ │ └── README.md │ └── README.md ├── README.md └── Widget │ ├── 01_write_config_info │ └── README.md │ ├── 02_develop_widget_class │ └── README.md │ ├── 03_use_extra_vars │ └── README.md │ └── README.md ├── Form ├── 01_create_form_view │ └── README.md ├── 02_ruleset_and_controller_action │ └── README.md ├── 03_print_hello_world │ └── README.md └── README.md ├── Make_Board_Skin ├── 01_about_board_skin │ └── README.md ├── 02_install_board_module │ ├── README.md │ ├── autoinstall │ │ ├── 001.png │ │ └── README.md │ └── upload_sources │ │ └── README.md ├── 03_board_skin_structure │ ├── README.md │ ├── confirm_directory │ │ └── README.md │ └── required_files │ │ └── README.md ├── 04_write_board_skin_info │ └── README.md ├── 05_make_board_n_apply_skin │ ├── 001.png │ ├── 002.png │ ├── 003.png │ ├── 004.png │ └── README.md ├── 06_write_header_n_footer │ ├── README.md │ ├── write_footer │ │ └── README.md │ └── write_header │ │ └── README.md ├── 07_write_list_page │ ├── 001.png │ ├── README.md │ ├── confirm_print_list │ │ ├── 001.png │ │ ├── 002.png │ │ └── README.md │ ├── include_header_n_footer │ │ └── README.md │ ├── listing_documents │ │ └── README.md │ ├── print_list │ │ └── README.md │ ├── print_list_header │ │ ├── 001.png │ │ └── README.md │ ├── print_page_no │ │ └── README.md │ ├── print_search_form │ │ └── README.md │ ├── print_write_btn │ │ └── README.md │ └── show_message_when_no_document │ │ └── README.md └── README.md ├── Make_Layout ├── 01_about_layout │ ├── 001.png │ └── README.md ├── 02_layout_structure │ ├── README.md │ ├── confirm_directory │ │ └── README.md │ └── directory_structure │ │ ├── 001.png │ │ └── README.md ├── 03_write_layout_info │ └── README.md ├── 04_make_layout_instance │ ├── README.md │ ├── confirm_user_defined_layout │ │ ├── 001.png │ │ └── README.md │ └── copy_layout │ │ ├── 001.png │ │ └── README.md ├── 05_write_layout │ ├── README.md │ ├── layout_structure │ │ └── README.md │ ├── print_content │ │ └── README.md │ ├── print_global_menu │ │ └── README.md │ ├── print_local_menu │ │ └── README.md │ ├── print_login_form │ │ └── README.md │ └── print_search_form │ │ └── README.md ├── 06_write_sitemap │ ├── 001.png │ ├── 002.png │ └── README.md ├── 07_link_sitemap │ ├── 001.png │ ├── 002.png │ ├── 003.png │ └── README.md ├── 08_link_layout │ ├── README.md │ ├── confirm_page │ │ ├── 001.png │ │ └── README.md │ ├── edit_page │ │ ├── 001.png │ │ └── README.md │ └── make_page │ │ ├── 001.png │ │ ├── 002.png │ │ ├── 003.png │ │ └── README.md └── README.md ├── README.md ├── Skin_Base ├── 01_understand_html │ ├── README.md │ ├── element_attribute_and_value │ │ └── README.md │ ├── inline_and_block_element │ │ └── README.md │ ├── parent_and_child_element │ │ └── README.md │ └── start_and_end_of_html │ │ └── README.md ├── 02_understand_css │ ├── README.md │ ├── selector_attribute_and_value │ │ └── README.md │ └── type_of_selector │ │ └── README.md ├── 03_use_javascript_and_jquery │ ├── README.md │ ├── include_jquery │ │ └── README.md │ ├── init_javascript_with_standard_grammar │ │ └── README.md │ ├── init_javascript_with_template_grammar │ │ └── README.md │ ├── practice_jquery │ │ └── README.md │ └── run_jquery_after_html_loading │ │ └── README.md ├── 04_template_grammar │ ├── README.md │ ├── block_template_grammar │ │ └── README.md │ ├── condition_grammar │ │ └── README.md │ ├── css_reference │ │ └── README.md │ ├── include_grammar │ │ └── README.md │ ├── include_widget │ │ └── README.md │ ├── js_reference │ │ └── README.md │ ├── loop_grammar │ │ └── README.md │ ├── use_php_grammar │ │ └── README.md │ ├── use_xml_js_filter │ │ └── README.md │ ├── variables │ │ └── README.md │ └── variables_of_xe_core │ │ └── README.md └── README.md ├── Skin_Summary ├── 01_about_skin │ └── README.md ├── 02_skin_element │ ├── README.md │ ├── css │ │ └── README.md │ ├── html │ │ └── README.md │ ├── javascript_and_jquery │ │ └── README.md │ └── template_grammar │ │ └── README.md └── README.md ├── Tutorial ├── Lifecycle │ ├── README.md │ ├── doc │ │ ├── Lifecycle.pdf │ │ └── Lifecycle.xml │ └── img │ │ └── Lifecycle.png ├── README.md └── Summary │ └── README.md └── XML_Query ├── 01_create_schema └── README.md ├── 02_alter_schema └── README.md ├── 03_xml_query └── README.md ├── 04_select_query_basic └── README.md ├── 05_select_query_with_groupby └── README.md ├── 06_select_query_with_where └── README.md ├── 07_select_query_with_navigation └── README.md ├── 08_select_query_with_join └── README.md ├── 09_select_query_with_subquery └── README.md ├── 10_insert_query └── README.md ├── 11_update_query └── README.md ├── 12_delete_query └── README.md ├── 13_execute_query └── README.md └── README.md /Example/Addon/01_call_position/README.md: -------------------------------------------------------------------------------- 1 | # 애드온 예제 2 | 3 | - 애드온 호출 시점 4 | - [`before_module_init`](./before_module_init) 5 | - [`before_module_proc`](./before_module_proc) 6 | - [`after_module_proc`](./after_module_proc) 7 | - [`before_display_content`](./before_display_content) 8 | - [애드온 호출 시 전달되는 변수](../02_pass_variables_when_call) 9 | - [애드온 파일 작성](../03_write_addon) 10 | - [XE XML 쿼리 사용법](../04_use_xml_query) 11 | - [애드온 생성 시 고려 사항](../05_consideration) 12 | 13 | ## 애드온 호출 시점 14 | 15 | 애드온을 호출하는 시점은 다음과 같습니다. 16 | 17 | - `before_module_init` 모듈 객체 생성 전. 사용자가 요청한 모듈을 찾은 후, 해당 모듈의 객체를 생성하기 전 18 | - `before_module_proc` 모듈 실행 전. 모듈의 객체를 초기화한 후, 해당 모듈을 실행하기 전 19 | - `after_module_proc` 모듈 실행 후. 생성된 모듈 객체를 실행하고 결과를 얻은 직후 20 | - `before_display_content` 결과 출력 전. 레이아웃이 적용된 모듈의 결과를 출력하기 직전 21 | 각 후크가 어떤 역할을 하고, 왜 XE 제어 경로(control path)에서 일부 애드온이 특정 시점만 사용하는지 이해하기 위해 몇 가지 예를 들어보겠습니다. 22 | 23 | - [`before_module_init`](./before_module_init) 24 | - [`before_module_proc`](./before_module_proc) 25 | - [`after_module_proc`](./after_module_proc) 26 | - [`before_display_content`](./before_display_content) 27 | -------------------------------------------------------------------------------- /Example/Addon/01_call_position/after_module_proc/README.md: -------------------------------------------------------------------------------- 1 | # 애드온 예제 2 | 3 | - [애드온 호출 시점](../) 4 | - [`before_module_init`](../before_module_init) 5 | - [`before_module_proc`](../before_module_proc) 6 | - `after_module_proc` 7 | - [`before_display_content`](../before_display_content) 8 | - [애드온 호출 시 전달되는 변수](../../02_pass_variables_when_call) 9 | - [애드온 파일 작성](../../03_write_addon) 10 | - [XE XML 쿼리 사용법](../../04_use_xml_query) 11 | - [애드온 생성 시 고려 사항](../../05_consideration) 12 | 13 | ## after_module_proc 14 | 15 | **태그 목록** 16 | 17 | 모든 문서의 태그 목록을 한 페이지에 출력하는 애드온이 있다고 가정해 봅시다. 이런 태그 목록을 생성하려면 먼저 현재 페이지의 `module_srl`이 포함된 문서를 가져와야 하고, 그 전에 `module_srl`을 알아야 합니다. 이를 위해 `after_module_proc`라는 지점을 선택해야 합니다. 모듈 정보가 처리된 후에 이전에 정의된 모든 작업을 실행할 수 있습니다. 18 | -------------------------------------------------------------------------------- /Example/Addon/01_call_position/before_display_content/README.md: -------------------------------------------------------------------------------- 1 | # 애드온 예제 2 | 3 | - [애드온 호출 시점](../) 4 | - [`before_module_init`](../before_module_init) 5 | - [`before_module_proc`](../before_module_proc) 6 | - [`after_module_proc`](../after_module_proc) 7 | - `before_display_content` 8 | - [애드온 호출 시 전달되는 변수](../../02_pass_variables_when_call) 9 | - [애드온 파일 작성](../../03_write_addon) 10 | - [XE XML 쿼리 사용법](../../04_use_xml_query) 11 | - [애드온 생성 시 고려 사항](../../05_consideration) 12 | 13 | ## before_display_content 14 | 15 | **포인트 레벨 아이콘** 16 | 17 | 특정 회원이 쌓은 포인트 레벨에 따라 각 사용자에게 아이콘을 표시하는 애드온이 필요합니다. 이 애드온은 이미 처리된 일부 파라미터에 따라 콘텐츠 내의 HTML 코드를 수정해야 하기 때문에 `before_display_content` 지점을 후크로 사용합니다. 18 | -------------------------------------------------------------------------------- /Example/Addon/01_call_position/before_module_init/README.md: -------------------------------------------------------------------------------- 1 | # 애드온 예제 2 | 3 | - [애드온 호출 시점](../) 4 | - `before_module_init` 5 | - [`before_module_proc`](../before_module_proc) 6 | - [`after_module_proc`](../after_module_proc) 7 | - [`before_display_content`](../before_display_content) 8 | - [애드온 호출 시 전달되는 변수](../../02_pass_variables_when_call) 9 | - [애드온 파일 작성](../../03_write_addon) 10 | - [XE XML 쿼리 사용법](../../04_use_xml_query) 11 | - [애드온 생성 시 고려 사항](../../05_consideration) 12 | 13 | ## before_module_init 14 | 15 | **카운터 애드온** 16 | 17 | 이 애드온은 XE를 사용해서 구축한 웹사이트의 방문 통계를 보기 위해 개발됐습니다. 이 애드온은 카운터 모듈을 사용합니다. 카운터 애드온은 `$is_logged` 변수의 정보를 사용해서 웹사이트 방문 횟수를 계산합니다. 모듈 처리 작업으로부터 더 이상 정보를 얻을 필요가 없으므로, 이 모듈은 시간상으로 첫 번째 후크인 `before_module_init`을 사용합니다. 18 | -------------------------------------------------------------------------------- /Example/Addon/01_call_position/before_module_proc/README.md: -------------------------------------------------------------------------------- 1 | # 애드온 예제 2 | 3 | - [애드온 호출 시점](../) 4 | - [`before_module_init`](../before_module_init) 5 | - `before_module_proc` 6 | - [`after_module_proc`](../_module_proc) 7 | - [`before_display_content`](../before_display_content) 8 | - [애드온 호출 시 전달되는 변수](../../02_pass_variables_when_call) 9 | - [애드온 파일 작성](../../03_write_addon) 10 | - [XE XML 쿼리 사용법](../../04_use_xml_query) 11 | - [애드온 생성 시 고려 사항](../../05_consideration) 12 | 13 | ## before_module_proc 14 | 15 | **메타 태그** 16 | 17 | 이 애드온은 메타 설명과 키워드, 제작자 등의 메타 태그를 모든 페이지에 삽입하는 역할을 합니다. 콘텐츠가 모듈 처리 작업에서 생성되기 전에 메타 태그를 삽입해야 하기 때문에 `before_module_proc` 지점을 후크로 사용합니다. 18 | -------------------------------------------------------------------------------- /Example/Addon/02_pass_variables_when_call/README.md: -------------------------------------------------------------------------------- 1 | # 애드온 예제 2 | - [애드온](../) 3 | - [애드온 호출 시점](../01_call_position) 4 | - [`before_module_init`](../01_call_position/before_module_init) 5 | - [`before_module_proc`](../01_call_position/before_module_proc) 6 | - [`after_module_proc`](../01_call_position/after_module_proc) 7 | - [`before_display_content`](../01_call_position/before_display_content) 8 | - 애드온 호출 시 전달되는 변수 9 | - [애드온 파일 작성](../03_write_addon) 10 | - [XE XML 쿼리 사용법](../04_use_xml_query) 11 | - [애드온 생성 시 고려 사항](../05_consideration) 12 | 13 | ## 애드온 호출 시 전달되는 변수 14 | 15 | 앞에서 설명한 네 번의 호출 시점에 XE core는 다음과 같은 공통 변수를 애드온에 전달합니다. 16 | - `$called_position` 호출 시간 정보를 포함합니다. 값은 `before_module_init` `before_module_proc` `after_module_proc` `before_display_content` 네 가지 중 하나입니다. 17 | - `$addon_path` 호출된 애드온의 경로를 포함합니다. 18 | - `$addon_info` XE의 애드온은 독립적으로 설정할 수 있고, 해당 애드온이 동작할 대상 모듈을 지정할 수 있습니다. `$addon_info` 변수는 애드온에서 선언된 extra_vars(info.xml 내)의 정보를 포함하며, 이는 애드온마다 다릅니다. 19 | -------------------------------------------------------------------------------- /Example/Addon/03_write_addon/README.md: -------------------------------------------------------------------------------- 1 | # 애드온 예제 2 | 3 | - [애드온](../) 4 | - [애드온 호출 시점](../01_call_position) 5 | - [`before_module_init`](../01_call_position/before_module_init) 6 | - [`before_module_proc`](../01_call_position/before_module_proc) 7 | - [`after_module_proc`](../01_call_position/after_module_proc) 8 | - [`before_display_content`](../01_call_position/before_display_content) 9 | - [애드온 호출 시 전달되는 변수](../02_pass_variables_when_call) 10 | - 애드온 파일 작성 11 | - [XE XML 쿼리 사용법](../04_use_xml_query) 12 | - [애드온 생성 시 고려 사항](../05_consideration) 13 | 14 | ## 애드온 파일 작성 15 | 16 | addons 폴더에 다양한 이름으로 된 파일을 저장할 수 있고, 폴더 내에서 클래스를 사용할 수도 있습니다. 하지만 함수 선언은 네이티브 코드로 동작하는 include 구조를 사용하기 때문에 허용되지 않습니다. 17 | 18 | ### config/info.xml 19 | 20 | `info.xml` 파일은 다음과 같이 작성합니다. 21 | 22 | ```xml 23 | 24 | 25 | Addon title 26 | Addon description 27 | Addon version 28 | Year-Month-Date 29 | 30 | Author name 31 | 32 | 33 | 34 | Variable name (for output) 35 | Variable description 36 | 37 | 38 | 39 | ``` 40 | 41 | 필요하면 extra_vars를 생성합니다. 세부 내용이 없으면 `` 명령어를 사용해서 생략합니다. 위와 같이 작성한 파일을 `info.xml`이라는 이름으로 conf 폴더 아래에 저장합니다. 42 | 43 | ### addon_name.addon.php 44 | 45 | 애드온이 어떤 액션을 수행하기로 되어 있다면 PHP 형식으로 애드온 파일을 작성합니다. 단, 애드온은 대개 클래스 객체의 메서드 내에서 호출되므로 함수는 선언할 수 없습니다. 애드온 내에서 클래스를 정의하고 사용할 수 있습니다. 46 | 47 | 애드온 파일의 시작 부분은 다음과 같아야 합니다. 48 | 49 | ```php 50 | module_srl=Context::get('module_srl'); 76 | $document_list=executeQueryArray('addons.tag_list.getModuleDocumentTags',$obj); 77 | $tags=''; 78 | foreach ($document_list->data as $val) { 79 | $tags=$tags.','.$val->tags; 80 | } 81 | $tags=explode(',', $tags); 82 | for($i=1;$i'.$tags[$i].''; 84 | } 85 | $tags=implode(' ', $tags); 86 | $tags='
'.$tags.'
'; 87 | $content=Context::get('page_content'); 88 | $content=$content.$tags; 89 | Context::set('page_content',$content); 90 | ?> 91 | ``` 92 | 93 | 위의 코드는 현재 보이는 HTML 페이지에 태그 목록 HTML 코드를 삽입합니다. 94 | -------------------------------------------------------------------------------- /Example/Addon/04_use_xml_query/README.md: -------------------------------------------------------------------------------- 1 | # 애드온 예제 2 | 3 | - [애드온](../) 4 | - [애드온 호출 시점](../01_call_position) 5 | - [`before_module_init`](../01_call_position/before_module_init) 6 | - [`before_module_proc`](../01_call_position/before_module_proc) 7 | - [`after_module_proc`](../01_call_position/after_module_proc) 8 | - [`before_display_content`](../01_call_position/before_display_content) 9 | - [애드온 호출 시 전달되는 변수](../02_pass_variables_when_call) 10 | - [애드온 파일 작성](../03_write_addon) 11 | - XE XML 쿼리 사용법 12 | - [애드온 생성 시 고려 사항](../05_consideration) 13 | 14 | ## XE XML 쿼리 사용법 15 | 16 | XE 애드온에서 다른 모듈이 생성한 DB에 있는 데이터는 XML 쿼리를 통해 사용할 수 있습니다. 이 경우 addon 폴더 아래에 queries라는 폴더를 하나 생성하고 XML 쿼리문을 정의한 XML 파일을 저장합니다. 쿼리를 실행하는 방법은 다음과 같습니다. 17 | 18 | ```php 19 | $document_list = executeQueryArray('addons.tag_list.getModuleDocumentTags', $obj); 20 | ``` 21 | 22 | 더 자세한 내용은 [3. DB 연동/XML 쿼리 실행하기](../../../XML_Query/13_execute_query)를 참조하십시오. 23 | -------------------------------------------------------------------------------- /Example/Addon/05_consideration/README.md: -------------------------------------------------------------------------------- 1 | # 애드온 예제 2 | 3 | - [애드온](../) 4 | - [애드온 호출 시점](../01_call_position) 5 | - [`before_module_init`](../01_call_position/before_module_init) 6 | - [`before_module_proc`](../01_call_position/before_module_proc) 7 | - [`after_module_proc`](../01_call_position/after_module_proc) 8 | - [`before_display_content`](../01_call_position/before_display_content) 9 | - [애드온 호출 시 전달되는 변수](../02_pass_variables_when_call) 10 | - [애드온 파일 작성](../03_write_addon) 11 | - [XE XML 쿼리 사용법](../04_use_xml_query) 12 | - 애드온 생성 시 고려 사항 13 | 14 | ## 애드온 생성 시 고려 사항 15 | 16 | 애드온을 생성할 때 고려 사항은 다음과 같습니다. 17 | 18 | - XE의 애드온은 모든 모듈의 여러 부분에 삽입되므로 `` 앞뒤로 공백이 없어야 합니다. 공백이 포함되면 `before_display_content`가 호출되어도 제대로 동작하지 않습니다. 19 | - XE core는 애드온을 프로그래밍할 때 발생할 수 있는 예외를 별도로 처리하지 않습니다. 따라서 현재 호출 상황을 확인하는 루틴을 잘 구현해서 예외가 발생하지 않도록 해야 합니다. 20 | - 애드온 코드 에러로 인해 웹 사이트에 심각한 에러가 발생한다면 `files/cache` 폴더를 지워봅니다. 21 | 22 | XE 애드온은 강력한 액션을 수행할 수 있습니다. 하지만 코드를 적절하게 작성하지 않으면 예기치 않은 결과가 나오거나 XE가 중단될 수도 있습니다. 따라서 애드온을 생성할 때는 기본 애드온을 참조하는 것을 권장합니다. 23 | -------------------------------------------------------------------------------- /Example/Addon/README.md: -------------------------------------------------------------------------------- 1 | # 애드온 예제 2 | 3 | - [애드온 호출 시점](./01_call_position) 4 | - [`before_module_init`](./01_call_position/before_module_init) 5 | - [`before_module_proc`](./01_call_position/before_module_proc) 6 | - [`after_module_proc`](./01_call_position/after_module_proc) 7 | - [`before_display_content`](./01_call_position/before_display_content) 8 | - [애드온 호출 시 전달되는 변수](./02_pass_variables_when_call) 9 | - [애드온 파일 작성](./03_write_addon) 10 | - [XE XML 쿼리 사용법](./04_use_xml_query) 11 | - [애드온 생성 시 고려 사항](./05_consideration) 12 | 13 | XE에서 애드온은 후킹(hooking)을 수행합니다. 후킹이란 다른 정상적인 액션을 가져오는 행위를 말합니다. 후킹은 PHP 같은 인터프리터 기반 언어에서 사용하는 'include'를 사용합니다. XE에서는 애드온을 XE의 컨텍스트에 네이티브 코드로 삽입할 수 있도록 함수나 클래스 형태로 작성하지 않습니다. 이 때문에 XE의 애드온은 호출된 순간부터 강력한 효과를 발휘할 수 있습니다. 하지만 애드온은 XE의 전체 운영에 부하를 줄 수 있으므로 조심해서 생성해야 합니다. 14 | 15 | 애드온을 생성하려면 다음의 규칙을 따라야 합니다. 16 | 17 | - 애드온은 `addons` 폴더 아래의 `addon_name` 폴더에 저장해야 합니다. 18 | - 애드온 실행 파일의 이름은 `addon_name.addon.php`여야 합니다. 19 | - `info.xml` 파일에 제작자 정보, 애드온 설명, 관리자(필요한 경우)로부터 받은 애드온 변수를 저장해야 합니다. 20 | -------------------------------------------------------------------------------- /Example/Module/01_write_config_info/README.md: -------------------------------------------------------------------------------- 1 | # 모듈 예제 2 | 3 | - config/info.xml 작성 4 | - [액션 작성](../02_write_action) 5 | - [Action forward 작성](../03_write_action_forward) 6 | - [트리거 사용](../04_use_trigger) 7 | - [룰셋 사용](../05_use_ruleset) 8 | - [폼 필터 사용](../06_use_form_filter) 9 | - [DB 쿼리 정의](../07_define_db_query) 10 | 11 | ## config/info.xml 작성 12 | 13 | `info.xml`은 다음과 같은 형태로 되어 있습니다. 14 | 15 | ```xml 16 | 17 | 18 | 모듈 이름 19 | 모듈 설명 20 | 1.0.0 21 | 2015-01-01 22 | service 23 | 24 | 제작자명 25 | 26 | 27 | ``` 28 | 29 | `` 요소는 관리자 메뉴에서 모듈 분류를 나타냅니다. 입력할 수 있는 옵션은 다음과 같습니다. 30 | - `service` 서비스 관리 31 | - `member` 회원 관리 32 | - `content` 정보 관리 33 | - `construction` 사이트 설정 34 | - `utility` 기능 설정 35 | - `accessory` 부가 기능 설정 36 | - `system` 시스템 관리/설정 37 | - `package` cafeXE, textyle 등의 패키지 모듈 38 | -------------------------------------------------------------------------------- /Example/Module/02_write_action/README.md: -------------------------------------------------------------------------------- 1 | # 모듈 예제 2 | 3 | - [config/info.xml 작성](../01_write_config_info) 4 | - 액션 작성 5 | - [Action forward 작성](../03_write_action_forward) 6 | - [트리거 사용](../04_use_trigger) 7 | - [룰셋 사용](../05_use_ruleset) 8 | - [폼 필터 사용](../06_use_form_filter) 9 | - [DB 쿼리 정의](../07_define_db_query) 10 | 11 | ## 액션 작성 12 | 13 | XE에서 모든 입출력은 `index.php`를 통해 처리됩니다. 액션 요청 인수는 `Module Handler`에서 결정하며, 보통 `$act` 변수를 사용합니다. 모듈의 액션은 `conf/module.xml` 파일에 선언됩니다. 14 | 15 | ```xml 16 | 17 | 18 | 19 | 20 | Post 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Forum 55 | 포럼 56 | 57 | 58 | 59 | ``` 60 | 61 | `conf/module.xml`에서 사용되는 속성은 다음과 같습니다. 62 | 63 | |속성|설명| 64 | |---|---| 65 | |name|모듈 이름도 포함하는 액션 이름. 관리자 권한이 필요한 액션의 이름에는 꼭 `Admin` 문자열을 포함해야 합니다.| 66 | |type|액션이 어떤 타입이며 어떤 파일(뷰, 모델, 컨트롤러)에 저장돼야 하는지 정의. 이름에 `Admin`이 포함되어 있으면 관리자 뷰, 모델 또는 컨트롤러 PHP 파일에 있어야 합니다.| 67 | |index|모듈의 기본 액션 설정. 한 액션에만 적용되어야 합니다.| 68 | |admin_index|모듈 백 엔드의 기본 액션. 한 액션에만 적용됩니다.| 69 | |setup_index|모듈 설정 페이지로 사용되며, 관리자 액션에만 설정할 수 있습니다.| 70 | |menu_name|해당 액션이 속한 메뉴의 이름| 71 | |menu_index|이 속성이 `true`로 설정되면 이 액션이 현재 메뉴의 초기 액션이라는 의미입니다.| 72 | |ruleset|해당 액션에 적용할 룰셋 이름| 73 | |action|권한(permission)이 선언된 액션의 이름| 74 | |target|지원되는 권한은 다음과 같습니다.
  • `member` 회원
  • `manager` 관리자
| 75 | -------------------------------------------------------------------------------- /Example/Module/03_write_action_forward/README.md: -------------------------------------------------------------------------------- 1 | # 모듈 예제 2 | 3 | - [config/info.xml 작성](../01_write_config_info) 4 | - [액션 작성](../02_write_action) 5 | - Action forward 작성 6 | - [트리거 사용](../04_use_trigger) 7 | - [룰셋 사용](../05_use_ruleset) 8 | - [폼 필터 사용](../06_use_form_filter) 9 | - [DB 쿼리 정의](../07_define_db_query) 10 | 11 | ## Action forward 작성 12 | 13 | 일반적으로 액션은 XE 모듈에 속합니다. 하지만 하나의 액션이 여러 모듈에서 사용되는 경우도 있습니다. 이를 Action forward라고 부릅니다. 14 | 15 | 가장 전형적인 예는 RSS 모듈입니다. RSS 액션은 게시판 모듈에서 정의한 액션이 아니지만 Action forward 기능에서 호출하고 실행합니다. 16 | 17 | ``` 18 | ?mid=board&act=rss 19 | ``` 20 | 21 | Action forward를 사용해서 독립된 기능과 함께 모듈을 처리할 수 있습니다. 22 | 23 | 위의 요청에서 XE는 `board`라는 mid를 찾습니다. 이 mid가 rss 액션을 포함하지 않으면 XE는 DB에서 Action forward 테이블을 통해 등록된 rss를 찾습니다. rss 액션은 rss 모듈의 뷰 타입으로 DB에 등록되어 있으므로 XE는 게시판을 위한 모든 mid 정보를 설정하고 rss 모듈의 뷰 객체를 생성해서 rss 메서드를 실행합니다. 24 | 25 | 이 Action forward는 XE가 레이아웃이나 현재 요청된 모듈의 정보를 유지하면서 다른 메서드를 필요로 할 때 필요합니다. 다른 예제로는 친구 목록을 보기 위한 communication 모듈의 `dispCommunicationFriend` 액션이 있습니다. 이 액션은 현재 모듈의 레이아웃을 유지하면서 해당 콘텐츠를 친구 목록으로 교체합니다. 26 | 27 | 즉, 콘텐츠 영역 출력은 지정된 액션에 의해 변경될 수 있으며, 요청된 모듈의 정보에 따라 다른 결과가 나올 수 있습니다. 28 | 29 | ### Action forward 등록 30 | 31 | 일반적으로 Action Forward는 `module.class.php`에서 `moduleInstall()`를 처리할 때 저장됩니다. 등록 방법은 다음과 같습니다. 32 | 33 | ```php 34 | $oModuleController = &getController('module'); 35 | $oModuleController->insertActionForward('module', 'type(Ex:controller)', 'action_name'); 36 | ``` 37 | 38 | ### Action forward 검증 39 | 40 | 다음과 같이 Action Forward의 등록을 확인할 수 있습니다. 보통 `module.class.php`의 `checkUpdate()` 메서드에서 사용됩니다. 41 | 42 | ```php 43 | $oModuleModel = &getModel('module'); 44 | if(!$oModuleModel->getActionForward('action_name')) ... 45 | ``` 46 | 47 | ### Action forward 삭제 48 | 49 | Action forward가 필요 없어지면 다음과 같이 삭제합니다. 50 | 51 | ```php 52 | $oModuleModel = &getModel('module'); 53 | $oModuleModel = &getController('module'); 54 | if($oModuleModel->getActionForward('Action Name')) 55 | { 56 | $oModuleController->deleteActionForward('Module Name','Type','Action Name'); 57 | } 58 | ``` 59 | 60 | 액션 이름이 `(disp|proc|get)+ModuleName+ActionName`으로 되어 있다면 Action forward를 등록하지 않아도 됩니다. 61 | -------------------------------------------------------------------------------- /Example/Module/04_use_trigger/README.md: -------------------------------------------------------------------------------- 1 | # 모듈 예제 2 | 3 | - [config/info.xml 작성](../01_write_config_info) 4 | - [액션 작성](../02_write_action) 5 | - [Action forward 작성](../03_write_action_forward) 6 | - 트리거 사용 7 | - [룰셋 사용](../05_use_ruleset) 8 | - [폼 필터 사용](../06_use_form_filter) 9 | - [DB 쿼리 정의](../07_define_db_query) 10 | 11 | ## 트리거 사용 12 | 13 | 어떤 모듈이 다른 모듈의 특정 액션에 어떤 동작을 하고 싶을 때 트리거를 사용합니다. 단, 해당 모듈에서 트리거를 제공해야 합니다. 14 | 15 | 예를 들면, document 모듈의 `triggerDisplayDocumentAdditionSetup`에 이미 있는 관리자용 뷰를 포럼 모듈에서 사용하고 싶은 경우가 있는데 이때 트리거를 사용합니다. 16 | 17 | 트리거를 사용하는 방법은 다음과 같습니다. 18 | 19 | ### DB에 트리거 삽입 20 | 21 | ```php 22 | $oModuleController = getController('module'); 23 | $oModuleController->insertTrigger('forum.dispForumCommentSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before'); 24 | ``` 25 | 26 | ### 트리거 가져오기 27 | 28 | ```php 29 | $oModuleModel = getModel('module'); 30 | if(!$oModuleModel->getTrigger('forum.dispForumAdditionSetup', 'document', 'view', 'triggerDispDocumentAdditionSetup', 'before')) 31 | { 32 | return TRUE; 33 | } 34 | ``` 35 | 36 | ### 트리거 호출 37 | 38 | ```php 39 | ModuleHandler::triggerCall('Trigger Name', 'call time (Called Position)', /* the trigger will be used as a parameter of the object */); 40 | ``` 41 | 42 | ### 트리거 삭제 43 | 44 | ```php 45 | $oModuleController = getController('module'); 46 | $oModuleController->deleteTrigger('Trigger Name', 'module name', 'call the method belongs to the type of instance', 'call the method (Called Method)', 'call time (Called Position)'); 47 | ``` 48 | -------------------------------------------------------------------------------- /Example/Module/05_use_ruleset/README.md: -------------------------------------------------------------------------------- 1 | # 모듈 예제 2 | 3 | - [config/info.xml 작성](../01_write_config_info) 4 | - [액션 작성](../02_write_action) 5 | - [Action forward 작성](../03_write_action_forward) 6 | - [트리거 사용](../04_use_trigger) 7 | - 룰셋 사용 8 | - [폼 필터 사용](../06_use_form_filter) 9 | - [DB 쿼리 정의](../07_define_db_query) 10 | 11 | ## 룰셋 사용 12 | 13 | 룰셋은 HTML 폼의 정보를 PHP에 있는 처리 메서드로 전달할 때 클라이언트 측에서는 물론 서버 측에서도 정보의 유효성을 검증하기 위하여 사용합니다. 룰셋은 각 모듈 폴더의 `ruleset` 폴더에 있는 XML 파일에 저장됩니다. 다음은 룰셋의 예제입니다. 14 | 15 | ```xml 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | ``` 28 | 29 | 룰셋에서 사용되는 요소와 속성은 다음과 같습니다. 30 | 31 | |요소|속성|설명| 32 | |---|---|---| 33 | |customrules||사용자 정의 규칙을 정의할 수 있습니다.| 34 | |rule||사용자 정의 규칙| 35 | ||name|사용자 정의 규칙의 이름| 36 | ||type|사용자 정의 규칙의 유형. `regex` `enum` `expression` 중 하나를 사용할 수 있습니다.
  • `regex` 정규표현식을 작성할 때
  • `enum` 주어진 값 중 하나만 선택할 수 있을 때
  • `expression` 수식이 필요할 때
| 37 | ||test|사용자 정의 규칙의 테스트 코드| 38 | |fields||유효성을 검사할 필드의 모임| 39 | |field||유효성을 검사할 필드| 40 | ||name|폼 요소 이름| 41 | ||rule|적용할 규칙| 42 | ||required="true"|반드시 입력해야 합니다.| 43 | ||length|길이 제한. `최소:최대`와 같이 작성할 수 있습니다.| 44 | ||default|기본값.| 45 | ||equalto|`equalto`에 넣은 요소의 값이 현재 요소의 값과 같아야 함을 나타냅니다(비밀번호, 비밀번호 확인 등).| 46 | ||modifier|규칙을 사용하기 전에 입력값을 변경하거나 검사를 마친 후 결과를 변경할 수 있는 기능.| 47 | 48 | 더 자세한 내용은 [4. 폼 사용](../../../Form)을 참조하십시오. 49 | -------------------------------------------------------------------------------- /Example/Module/06_use_form_filter/README.md: -------------------------------------------------------------------------------- 1 | # 모듈 예제 2 | 3 | - [config/info.xml 작성](../01_write_config_info) 4 | - [액션 작성](../02_write_action) 5 | - [Action forward 작성](../03_write_action_forward) 6 | - [트리거 사용](../04_use_trigger) 7 | - [룰셋 사용](../05_use_ruleset) 8 | - 폼 필터 사용 9 | - [DB 쿼리 정의](../07_define_db_query) 10 | 11 | ## 폼 필터 사용 12 | 13 | 필터는 HTML 폼에서 PHP에 있는 처리 메서드로 정보를 전달하고 자바스크립트 콜백 함수를 지정하기 위해 사용합니다. 필터는 `tpl/filter` 폴더 내에 있는 XML 파일에 저장됩니다. 다음은 폼 필터의 예제입니다. XE 1.5 이상 버전부터는 폼 필터보다 룰셋을 사용하기를 권장합니다. 14 | 15 | ```xml 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
40 | ``` 41 | 42 | 폼 필터에서 사용되는 요소와 속성은 다음과 같습니다. 43 | 44 | |요소|속성|설명| 45 | |---|---|---| 46 | |form||입력값이 유효한지 확인하는 최상위 요소| 47 | |node||HTML 폼 확인| 48 | ||required|입력 요소가 반드시 필요한 값인지 설정. `required` 속성값이 `true`로 설정된 경우, 해당 요소에 값이 입력되지 않으면 경고가 발생합니다.| 49 | ||filter = "filter type"|필터에 사용할 수 있는 타입은 `email(email_address)` `userid(user_id)` `url(homepage)` `korean` `korean_number` `alpha` `number` `alpha_number`입니다.| 50 | ||equalto = "target person"|`equalto`에 넣은 요소의 값이 현재 요소의 값과 같아야 함을 나타냅니다(비밀번호, 비밀번호 확인 등).| 51 | ||maxlength|최대 길이| 52 | ||minlength|최소 길이| 53 | |parameter||서버로 전송할 때 폼 요소의 이름을 변경하거나, 폼 요소 중 개발자가 parameter에 작성한 값만을 서버에 전송하고자 할 때 사용. 기본적으로 parameter를 사용하지 않으면 모든 폼 요소를 서버에 전송합니다.| 54 | |param||재정의하거나 서버에 전송할 폼 요소 정보 작성| 55 | ||name|폼 요소 이름| 56 | ||target|재정의할 요소 이름| 57 | |response||| 58 | ||callback_func|자바스크립트 콜백 함수. 실제 구현되어야 합니다.| 59 | |tag||콜백 함수로 전달될 변수 정의| 60 | ||name|콜백 함수에 전달할 변수 이름. 이 변수들은 controller에서 액션을 실행한 후 콜백 함수에 전달할 값들을 `$this->add('변수명', '값');`으로 구현합니다.| 61 | -------------------------------------------------------------------------------- /Example/Module/07_define_db_query/README.md: -------------------------------------------------------------------------------- 1 | # 모듈 예제 2 | 3 | - [config/info.xml 작성](../01_write_config_info) 4 | - [액션 작성](../02_write_action) 5 | - [Action forward 작성](../03_write_action_forward) 6 | - [트리거 사용](../04_use_trigger) 7 | - [룰셋 사용](../05_use_ruleset) 8 | - [폼 필터 사용](../06_use_form_filter) 9 | - DB 쿼리 정의 10 | 11 | ## DB 쿼리 정의 12 | 13 | XE는 커스텀 쿼리 언어를 사용해서 쿼리를 정의합니다. XML 코드는 `classes/xml` 폴더에 있는 `XmlQueryParser.class.php`에서 파싱합니다. 자세한 사항은 [3. DB 연동/XML 쿼리 기본](../../../XML_Query/03_xml_query)을 참조하십시오. 14 | -------------------------------------------------------------------------------- /Example/Module/README.md: -------------------------------------------------------------------------------- 1 | # 모듈 예제 2 | 3 | - [config/info.xml 작성](./01_write_config_info) 4 | - [액션 작성](./02_write_action) 5 | - [Action forward 작성](./03_write_action_forward) 6 | - [트리거 사용](./04_use_trigger) 7 | - [룰셋 사용](./05_use_ruleset) 8 | - [폼 필터 사용](./06_use_form_filter) 9 | - [DB 쿼리 정의](./07_define_db_query) -------------------------------------------------------------------------------- /Example/README.md: -------------------------------------------------------------------------------- 1 | # XE 개발 예제 2 | 3 | - [모듈](./Module) 4 | - [애드온](./Addon) 5 | - [위젯](./Wid) -------------------------------------------------------------------------------- /Example/Widget/01_write_config_info/README.md: -------------------------------------------------------------------------------- 1 | # 위젯 예제 2 | 3 | - [위젯](../) 4 | - config/info.xml 작성 5 | - [위젯 클래스 개발](../02_develop_widget_class) 6 | - [확장 변수 사용](../03_use_extra_vars) 7 | 8 | ## config/info.xml 작성 9 | 10 | `info.xml` 파일은 위젯 제작자와 버전, 기타 설정 변수에 관한 정보를 저장합니다. 다음과 같이 작성합니다. 11 | 12 | ```xml 13 | 14 | 15 | Widget title 16 | Widget description 17 | Widget version 18 | Widget creation date 19 | 20 | Author name 21 | 22 | 23 | 24 | Extension variable name 25 | Type of extension variable: text | textarea | select | select-multi-order | mid | mid-list | menu 26 | 27 | 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /Example/Widget/02_develop_widget_class/README.md: -------------------------------------------------------------------------------- 1 | # 위젯 예제 2 | 3 | - [위젯](../) 4 | - [config/info.xml 작성](../01_write_config_info) 5 | - 위젯 클래스 개발 6 | - [확장 변수 사용](../03_use_extra_vars) 7 | 8 | ## 위젯 클래스 개발 9 | 10 | 위젯이 무슨 기능을 하는지는 `widgetName.class.php`라는 클래스 파일에 구현합니다. 위젯을 구현하는 모든 클래스는 `WidgetHandler`를 상속해서 `proc()` 메서드를 구현해야 합니다. 11 | 12 | ```php 13 | widget_path, $args-> skin); 20 | Context::set ('colorset', $args->colorset); 21 | 22 | // Template file name 23 | $tpl_file = 'HTML template file except the extension '; 24 | 25 | // Template compilation 26 | $oTemplate = &TemplateHandler::getInstance(); 27 | return $oTemplate->compile($tpl_path, $tpl_file); 28 | } 29 | } 30 | ?> 31 | ``` 32 | -------------------------------------------------------------------------------- /Example/Widget/03_use_extra_vars/README.md: -------------------------------------------------------------------------------- 1 | # 위젯 예제 2 | 3 | - [위젯](../) 4 | - [config/info.xml 작성](../01_write_config_info) 5 | - [위젯 클래스 개발](../02_develop_widget_class) 6 | - 확장 변수 사용 7 | 8 | ## 확장 변수 사용 9 | 10 | 확장 변수는 위젯을 페이지에 삽입하기 직전에 위젯의 관리 부분에서 데이터를 가져오기 위해 사용합니다. 페이지에서 자동으로 생성될 각 변수의 값을 얻기 위해 변수별로 입력 타입을 설정할 수 있다. 위젯의 확장 변수는 다음과 같습니다. 11 | 12 | - `text` 일반 문자열 타입 13 | - `textarea` 문단을 포함한 문자열 타입 14 | - `select` 여러 내용 중 하나를 선택 15 | - `select-multi-order` 선택 요소를 결정하고 순서를 바꾸는 경우 사용 16 | - `mid` 모듈을 하나만 선택 17 | - `mid_list` 모듈을 여러 개 선택 18 | - `menu` 사이트 메뉴 중 하나를 선택 19 | -------------------------------------------------------------------------------- /Example/Widget/README.md: -------------------------------------------------------------------------------- 1 | # 위젯 예제 2 | 3 | - 위젯 4 | - [config/info.xml 작성](./01_write_config_info) 5 | - [위젯 클래스 개발](./02_develop_widget_class) 6 | - [확장 변수 사용](./03_use_extra_vars) 7 | 8 | 위젯은 화면에서 데이터를 출력하는 데 사용되는 컴포넌트입니다. 위젯은 최신 글과 회원 정보 같은 기존 모듈이나 외부 API로부터 추출한 데이터와 함께 연동할 수 있습니다. 위젯은 모든 종류의 페이지에 추가할 수 있으며 레이아웃에 직접 추가할 수도 있습니다. 위젯을 통해 출력되는 콘텐츠를 쉽게 커스터마이즈할 수 있습니다. 9 | 10 | 위젯은 관리자가 수동으로 페이지 모듈에 입력하고 `` 요소에 저장합니다. 출력할 웹 페이지를 호출할 때 `widgetController::triggerWidgetCompile()` 트리거가 `widgetproc()`를 사용해서 `` 요소의 코드를 실행하고 올바른 HTML 코드로 변환합니다. 11 | -------------------------------------------------------------------------------- /Form/01_create_form_view/README.md: -------------------------------------------------------------------------------- 1 | # 폼 사용 예제 2 | 3 | - [폼 사용](../) 4 | - 폼 뷰 생성 5 | - [XML 룰셋 파일과 컨트롤러 액션 추가](../02_ruleset_and_controller_action) 6 | - [인사 메시지 출력](../03_print_hello_world) 7 | 8 | ## 폼 뷰 생성 9 | 10 | 사용자에게 이름을 물어 입력하게 한 다음 환영 인사를 보여 주는 페이지를 나타내는 아주 간단한 폼을 만들어 보겠습니다. 모듈에는 하나의 뷰만 있습니다. 이 뷰는 사용자가 이름을 입력한 후 hello 메시지를 표시하거나 이름을 입력하는 폼을 다시 출력합니다. 11 | 12 | 먼저 입력 상자와 등록 버튼만 있는 폼 형태를 만들어 보겠습니다. `파일 이름(name.html)`을 정한 후 `modules/hello/tpl`에 저장합니다. 13 | 14 | ```html 15 |

Enter your name:

16 |
17 | 18 | 19 | 20 |
21 | 22 |
23 | ``` 24 | 25 | XE에서 폼을 전송하려면 기본적으로 어떤 모듈의 어떤 액션으로 데이터를 전송할 지 추가하고, 데이터 유효성 검사를 위해 룰셋을 지정하여야 합니다. 위의 예제에서는 hello 모듈의 `procHelloGreet` 액션에 데이터를 전송하도록 하고, say_hello라는 룰셋 파일로 유효성 검사를 하도록 설정했습니다. 26 | 27 | **참고** 28 | > form 태그의 ruleset 속성은 적용할 룰셋 파일의 파일 이름입니다. 해당 속성값 앞에 @를 붙이면 XE에서 동적으로 생성되는 룰셋을 참고하라는 뜻이 됩니다. 예를 들어, XE 1.8에서는 로그인 계정으로 `user_id` 또는 `email_address`를 선택하도록 되어 있습니다. 이때 설정값에 따라 로그인 데이터 유효성 검사 방식이 달라져야 하므로 동적 룰셋을 적용합니다. 동적 룰셋 파일은 `files/ruleset`에 저장됩니다. 29 | 30 | 템플릿 파일을 출력하는 뷰 메서드를 생성합니다. `modules/hello/hello.view.php`에 다음의 메서드를 추가합니다. 31 | 32 | ```php 33 | /** 34 | * @brief Display form for entering a name 35 | **/ 36 | function dispHelloName() 37 | { 38 | $this->setTemplateFile('name'); 39 | } 40 | ``` 41 | 42 | `modules/hello/conf/module.xml`에 다음과 같이 추가해서 최종 사용자가 사용할 수 있게 합니다. 43 | 44 | ```xml 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | ``` 54 | 55 | 이제 `/?module=hello`로 접근하면 만들어진 폼을 확인할 수 있습니다. 56 | -------------------------------------------------------------------------------- /Form/02_ruleset_and_controller_action/README.md: -------------------------------------------------------------------------------- 1 | # 폼 사용 예제 2 | 3 | - [폼 사용](../) 4 | - [폼 뷰 생성](../01_create_form_view) 5 | - XML 룰셋 파일과 컨트롤러 액션 추가 6 | - [인사 메시지 출력](../03_print_hello_world) 7 | 8 | ## XML 룰셋 파일과 컨트롤러 액션 추가 9 | 10 | 아직 우리가 만든 폼은 아무 기능도 하지 않습니다. 이 폼에 사용자 이름을 조회하고 hello 메시지를 출력하는 메서드를 추가해 보겠습니다. 11 | 12 | `modules/hello/hello.controller.php`에 다음과 같은 메서드를 추가합니다. 룰셋 파일을 사용할 때는 액션 실행 후 이동할 액션을 명시해야 합니다. `procHelloGreet` 함수의 실행이 완료되면 `dispHelloName` 화면으로 이동하도록 아래와 같이 `setRedirectUrl`을 설정합니다. 13 | 14 | ```php 15 | /** 16 | * Action for handling the name input form submission 17 | * Retrieves the name given by the user and passes it on for displaying the greeting screen 18 | */ 19 | function procHelloGreet() 20 | { 21 | $name = Context::get('name'); 22 | $this->setRedirectUrl(getNotEncodedUrl('', 'module', 'hello', 'act', 'dispHelloName', 'name', $name)); 23 | } 24 | ``` 25 | 26 | `modules/hello/conf/module.xml`의 `` 요소에 다음과 같이 추가합니다. 27 | 28 | ```xml 29 | 30 | ``` 31 | 32 | 폼 내용의 유효성을 검사하려면 XML 룰셋 파일을 추가해야 합니다. 파일 이름을 `say_hello.xml`로 짓고 `modules/hello/ruleset` 아래에 저장합니다. 33 | 34 | ```xml 35 | 36 | 37 | 38 | 39 | 40 | 41 | ``` 42 | 43 | 룰셋 파일에 사용되는 요소와 속성에 대한 자세한 설명은 [2. XE 개발 예제/모듈/룰셋 사용](../../Example/Module/05_use_ruleset)을 참조하십시오. 44 | -------------------------------------------------------------------------------- /Form/03_print_hello_world/README.md: -------------------------------------------------------------------------------- 1 | # 폼 사용 예제 2 | 3 | - [폼 사용](../) 4 | - [폼 뷰 생성](../01_create_form_view) 5 | - [XML 룰셋 파일과 컨트롤러 액션 추가](../02_ruleset_and_controller_action) 6 | - 인사 메시지 출력 7 | 8 | ## 인사 메시지 출력 9 | 10 | `modules/hello/hello.view.php`에 있는 `dispHelloName` 메서드를 다음과 같이 수정합니다. 11 | 12 | ```php 13 | /** 14 | * @brief Display form for entering a name 15 | **/ 16 | function dispHelloName() 17 | { 18 | $name = Context::get('name'); 19 | if(isset($name)) 20 | { 21 | $hello_message = "Hello " . $name; 22 | Context::set('hello_message', $hello_message); 23 | } 24 | $this->setTemplateFile('name'); 25 | } 26 | ``` 27 | 28 | `템플릿 파일(modules/hello/tpl/name.html)`도 다음과 같이 수정합니다. 29 | 30 | ```html 31 |

{$hello_message}

32 | 33 |

Enter your name:

34 |
35 | 36 | 37 | 38 |
39 | 40 |
41 |
42 | ``` 43 | 44 | 브라우저에서 해당 페이지를 다시 로드하면 완성된 폼을 가진 인사 메시지를 볼 수 있습니다. 45 | -------------------------------------------------------------------------------- /Form/README.md: -------------------------------------------------------------------------------- 1 | # 폼 사용 예제 2 | 3 | - 폼 사용 4 | - [폼 뷰 생성](./01_create_form_view) 5 | - [XML 룰셋 파일과 컨트롤러 액션 추가](./02_ruleset_and_controller_action) 6 | - [인사 메시지 출력](./03_print_hello_world) 7 | 8 | 폼은 사용자 입력값을 서버에 전송할 때 사용됩니다. XE에서는 폼을 전송할 때 입력값의 유효성을 확인하기 위한 룰셋 기능을 제공합니다. XE의 룰셋 기능을 사용하면 입력값의 유효성 확인 스크립트를 별도로 제작할 필요가 없습니다. 9 | 10 | 폼별로 다음과 같은 항목이 필요합니다. 11 | 12 | - 폼 마크업과 설계 13 | - 폼 전송 시 호출되는 서버 측 메서드 14 | 15 | 이와 같은 폼 전송을 위해서 연동하는 XE의 구성 요소는 다음과 같습니다. 16 | 17 | - 폼 템플릿 파일: 폼의 레이아웃과 필드 정의 18 | - 폼 전송을 처리할 controller 메서드(controller 파일 내) 19 | - 폼 유효성 검사를 위한 룰셋 XML 파일 20 | -------------------------------------------------------------------------------- /Make_Board_Skin/01_about_board_skin/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - 게시판 스킨이란 4 | - [게시판 모듈 설치](../02_install_board_module) 5 | - [쉬운 설치](../02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](../02_install_board_module/upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../06_write_header_n_footer) 13 | - [헤더 작성](../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](../07_write_list_page) 16 | - [_header.html, _footer.html 포함(include)](../07_write_list_page/include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](../07_write_list_page/show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../07_write_list_page/listing_documents) 19 | - [게시물 목록 헤더 출력](../07_write_list_page/print_list_header) 20 | - [게시물 목록 출력](../07_write_list_page/print_list) 21 | - [페이지 번호 링크 출력](../07_write_list_page/print_page_no) 22 | - [쓰기 버튼 출력](../07_write_list_page/print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../07_write_list_page/print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../07_write_list_page/confirm_print_list) 25 | - [쓰기 페이지 작성](../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../13_write_password_page) 54 | 55 | ## 게시판 스킨이란 56 | 57 | 게시판 스킨이란 게시판 모듈을 사용자 화면에 보여주는 인터페이스입니다. 게시판 스킨은 사용자 화면을 기준으로 목록, 읽기, 쓰기, 삭제, 댓글 쓰기, 댓글 삭제, 엮인글 삭제, 권한 안내, 비밀번호 입력 페이지로 구성됩니다. 58 | -------------------------------------------------------------------------------- /Make_Board_Skin/02_install_board_module/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../01_about_board_skin) 4 | - 게시판 모듈 설치 5 | - [쉬운 설치](./autoinstall) 6 | - [소스 파일 업로드](./upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../06_write_header_n_footer) 13 | - [헤더 작성](../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](../07_write_list_page) 16 | - [_header.html, _footer.html 포함(include)](../07_write_list_page/include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](../07_write_list_page/show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../07_write_list_page/listing_documents) 19 | - [게시물 목록 헤더 출력](../07_write_list_page/print_list_header) 20 | - [게시물 목록 출력](../07_write_list_page/print_list) 21 | - [페이지 번호 링크 출력](../07_write_list_page/print_page_no) 22 | - [쓰기 버튼 출력](../07_write_list_page/print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../07_write_list_page/print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../07_write_list_page/confirm_print_list) 25 | - [쓰기 페이지 작성](../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../13_write_password_page) 54 | 55 | ## 게시판 모듈 설치 56 | 57 | XE에서 게시판을 만들려면 게시판 모듈을 별도로 설치해야 합니다. 게시판 모듈은 XE 관리자 페이지의 쉬운 설치 기능을 사용하거나 게시판 모듈의 소스 파일을 서버에 업로드하여 설치할 수 있습니다. 58 | -------------------------------------------------------------------------------- /Make_Board_Skin/02_install_board_module/autoinstall/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Board_Skin/02_install_board_module/autoinstall/001.png -------------------------------------------------------------------------------- /Make_Board_Skin/02_install_board_module/autoinstall/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../../01_about_board_skin) 4 | - [게시판 모듈 설치](../) 5 | - 쉬운 설치 6 | - [소스 파일 업로드](../upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../../06_write_header_n_footer) 13 | - [헤더 작성](../../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../../06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](../../07_write_list_page) 16 | - [_header.html, _footer.html 포함(include)](../../07_write_list_page/include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](../../07_write_list_page/show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../../07_write_list_page/listing_documents) 19 | - [게시물 목록 헤더 출력](../../07_write_list_page/print_list_header) 20 | - [게시물 목록 출력](../../07_write_list_page/print_list) 21 | - [페이지 번호 링크 출력](../../07_write_list_page/print_page_no) 22 | - [쓰기 버튼 출력](../../07_write_list_page/print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../../07_write_list_page/print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../../07_write_list_page/confirm_print_list) 25 | - [쓰기 페이지 작성](../../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../../13_write_password_page) 54 | 55 | ## 쉬운 설치 56 | 57 | XE 관리자 페이지에서 *고급 > 쉬운 설치 > 모듈*을 선택하여 게시판 모듈을 서버에 바로 설치합니다. 58 | 59 | 쉬운 설치로 게시판 모듈을 설치한 경우 게시판 스킨을 만들려면 FTP를 통해 게시판 모듈이 설치된 디렉터리(*/modules/board/*)를 로컬 PC로 다운로드해야 합니다. 60 | 61 | 게시판 모듈의 디렉터리 구조는 다음과 같습니다. 게시판 모듈 디렉터리에 *skins* 디렉터리가 포함되어 있는지 확인합니다. 게시판 스킨은 *skins* 디렉터리에 저장됩니다. 62 | 63 | ![게시판 모듈의 디렉터리 구조](./001.png) 64 | 65 | > XE 1.7 이상 버전부터는 XE core에 게시판 모듈이 기본으로 포함되어 있습니다. 66 | -------------------------------------------------------------------------------- /Make_Board_Skin/02_install_board_module/upload_sources/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../../01_about_board_skin) 4 | - [게시판 모듈 설치](../) 5 | - [쉬운 설치](../autoinstall) 6 | - 소스 파일 업로드 7 | - [게시판 스킨의 위치와 필수 파일](../../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../../06_write_header_n_footer) 13 | - [헤더 작성](../../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../../06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](../../07_write_list_page) 16 | - [_header.html, _footer.html 포함(include)](../../07_write_list_page/include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](../../07_write_list_page/show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../../07_write_list_page/listing_documents) 19 | - [게시물 목록 헤더 출력](../../07_write_list_page/print_list_header) 20 | - [게시물 목록 출력](../../07_write_list_page/print_list) 21 | - [페이지 번호 링크 출력](../../07_write_list_page/print_page_no) 22 | - [쓰기 버튼 출력](../../07_write_list_page/print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../../07_write_list_page/print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../../07_write_list_page/confirm_print_list) 25 | - [쓰기 페이지 작성](../../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../../13_write_password_page) 54 | 55 | ## 소스 파일 업로드 56 | 57 | XE 공식 웹 사이트에서 게시판 모듈의 소스 파일을 로컬 PC에 다운로드한 후 FTP 프로그램을 통해서 웹 서버의 */modules/* 경로에 소스 파일을 업로드합니다. 만약 */xe/*라는 사용자 정의 디렉터리에 XE core를 설치했다면 */xe/modules/* 경로에 소스 파일을 업로드해야 합니다. 58 | 59 | 게시판 모듈이 정상적으로 업로드되었다면 게시판 모듈의 디렉터리 위치는 */modules/board/* 또는 */xe/modules/board/*입니다. 60 | 61 | > XE 1.7 이상 버전부터는 XE core에 게시판 모듈이 기본으로 포함되어 있습니다. -------------------------------------------------------------------------------- /Make_Board_Skin/03_board_skin_structure/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../01_about_board_skin) 4 | - [게시판 모듈 설치](../02_install_board_module) 5 | - [쉬운 설치](../02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](../02_install_board_module/upload_sources) 7 | - 게시판 스킨의 위치와 필수 파일 8 | - [게시판 스킨의 위치 확인](./confirm_directory) 9 | - [게시판 스킨 필수 파일](./required_files) 10 | - [게시판 스킨 정보 작성](../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../06_write_header_n_footer) 13 | - [헤더 작성](../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](../07_write_list_page) 16 | - [_header.html, _footer.html 포함(include)](../07_write_list_page/include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](../07_write_list_page/show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../07_write_list_page/listing_documents) 19 | - [게시물 목록 헤더 출력](../07_write_list_page/print_list_header) 20 | - [게시물 목록 출력](../07_write_list_page/print_list) 21 | - [페이지 번호 링크 출력](../07_write_list_page/print_page_no) 22 | - [쓰기 버튼 출력](../07_write_list_page/print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../07_write_list_page/print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../07_write_list_page/confirm_print_list) 25 | - [쓰기 페이지 작성](../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../13_write_password_page) 54 | 55 | ## 게시판 스킨의 위치와 필수 파일 56 | 57 | 이 장에서는 게시판 스킨들의 위치와 스킨을 구성하는 필수 파일들에 대해 설명합니다. 58 | -------------------------------------------------------------------------------- /Make_Board_Skin/03_board_skin_structure/confirm_directory/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../../01_about_board_skin) 4 | - [게시판 모듈 설치](../../02_install_board_module) 5 | - [쉬운 설치](../../02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](../../02_install_board_module/upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../) 8 | - 게시판 스킨의 위치 확인 9 | - [게시판 스킨 필수 파일](../required_files) 10 | - [게시판 스킨 정보 작성](../../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../../06_write_header_n_footer) 13 | - [헤더 작성](../../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../../06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](../../07_write_list_page) 16 | - [_header.html, _footer.html 포함(include)](../../07_write_list_page/include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](../../07_write_list_page/show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../../07_write_list_page/listing_documents) 19 | - [게시물 목록 헤더 출력](../../07_write_list_page/print_list_header) 20 | - [게시물 목록 출력](../../07_write_list_page/print_list) 21 | - [페이지 번호 링크 출력](../../07_write_list_page/print_page_no) 22 | - [쓰기 버튼 출력](../../07_write_list_page/print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../../07_write_list_page/print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../../07_write_list_page/confirm_print_list) 25 | - [쓰기 페이지 작성](../../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../../13_write_password_page) 54 | 55 | ## 게시판 스킨의 위치 확인 56 | 57 | 게시판 스킨 디렉터리의 위치는 다음과 같습니다. 58 | 59 | ``` 60 | /modules/board/skins/ 61 | ``` 62 | 63 | > 게시판 스킨을 로컬 PC에서 수정할 때는 수정한 내용을 웹 사이트의 게시판 스킨 디렉터리에 반영해야 합니다. 64 | -------------------------------------------------------------------------------- /Make_Board_Skin/05_make_board_n_apply_skin/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Board_Skin/05_make_board_n_apply_skin/001.png -------------------------------------------------------------------------------- /Make_Board_Skin/05_make_board_n_apply_skin/002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Board_Skin/05_make_board_n_apply_skin/002.png -------------------------------------------------------------------------------- /Make_Board_Skin/05_make_board_n_apply_skin/003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Board_Skin/05_make_board_n_apply_skin/003.png -------------------------------------------------------------------------------- /Make_Board_Skin/05_make_board_n_apply_skin/004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Board_Skin/05_make_board_n_apply_skin/004.png -------------------------------------------------------------------------------- /Make_Board_Skin/05_make_board_n_apply_skin/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../01_about_board_skin) 4 | - [게시판 모듈 설치](../02_install_board_module) 5 | - [쉬운 설치](../02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](../02_install_board_module/upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../04_write_board_skin_info) 11 | - 게시판 생성 및 스킨 적용 12 | - [게시판 헤더/푸터 작성](../06_write_header_n_footer) 13 | - [헤더 작성](../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](../07_write_list_page) 16 | - [_header.html, _footer.html 포함(include)](../07_write_list_page/include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](../07_write_list_page/show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../07_write_list_page/listing_documents) 19 | - [게시물 목록 헤더 출력](../07_write_list_page/print_list_header) 20 | - [게시물 목록 출력](../07_write_list_page/print_list) 21 | - [페이지 번호 링크 출력](../07_write_list_page/print_page_no) 22 | - [쓰기 버튼 출력](../07_write_list_page/print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../07_write_list_page/print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../07_write_list_page/confirm_print_list) 25 | - [쓰기 페이지 작성](../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../13_write_password_page) 54 | 55 | ## 게시판 생성 및 스킨 적용 56 | 57 | 새 게시판을 생성하고 스킨을 적용하는 방법은 다음과 같습니다. 58 | 59 | 1. XE 관리자 페이지에서 *사이트 제작/편집 > 사이트 메뉴 편집*을 선택합니다. 60 | 2. 원하는 사이트맵에서 *메뉴 추가 > 게시판*을 선택합니다. 61 | 3. 다음과 같이 각 항목을 입력하고 등록을 클릭합니다. 62 | - 메뉴 이름(브라우저 제목) `게시판 스킨 실습` 63 | - 메뉴 ID `test_board` 64 | 4. 생성된 게시판 메뉴를 클릭하여 *상세 설정 > 고급 설정*을 선택합니다. 65 | 5. *스킨* 항목을 원하는 스킨으로 바꾸고 저장합니다. 66 | 67 | ![사이트 제작/편집 > 사이트 메뉴 편집](./001.png) 68 | ![메뉴 추가](./002.png) 69 | ![상세 설정](./003.png) 70 | ![게시판 스킨 변경](./004.png) 71 | -------------------------------------------------------------------------------- /Make_Board_Skin/06_write_header_n_footer/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../01_about_board_skin) 4 | - [게시판 모듈 설치](../02_install_board_module) 5 | - [쉬운 설치](../02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](../02_install_board_module/upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../05_make_board_n_apply_skin) 12 | - 게시판 헤더/푸터 작성 13 | - [헤더 작성](./write_header) 14 | - [푸터 작성](./write_footer) 15 | - [목록 페이지 작성](../07_write_list_page) 16 | - [_header.html, _footer.html 포함(include)](../07_write_list_page/include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](../07_write_list_page/show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../07_write_list_page/listing_documents) 19 | - [게시물 목록 헤더 출력](../07_write_list_page/print_list_header) 20 | - [게시물 목록 출력](../07_write_list_page/print_list) 21 | - [페이지 번호 링크 출력](../07_write_list_page/print_page_no) 22 | - [쓰기 버튼 출력](../07_write_list_page/print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../07_write_list_page/print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../07_write_list_page/confirm_print_list) 25 | - [쓰기 페이지 작성](../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../13_write_password_page) 54 | 55 | ## 게시판 헤더/푸터 작성 56 | 57 | 이 장에서는 게시판 헤더와 푸터에 출력할 내용을 작성하는 방법을 설명합니다. 58 | -------------------------------------------------------------------------------- /Make_Board_Skin/06_write_header_n_footer/write_footer/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../../01_about_board_skin) 4 | - [게시판 모듈 설치](../../02_install_board_module) 5 | - [쉬운 설치](../../02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](../../02_install_board_module/upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../) 13 | - [헤더 작성](../write_header) 14 | - 푸터 작성 15 | - [목록 페이지 작성](../../07_write_list_page) 16 | - [_header.html, _footer.html 포함(include)](../../07_write_list_page/include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](../../07_write_list_page/show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../../07_write_list_page/listing_documents) 19 | - [게시물 목록 헤더 출력](../../07_write_list_page/print_list_header) 20 | - [게시물 목록 출력](../../07_write_list_page/print_list) 21 | - [페이지 번호 링크 출력](../../07_write_list_page/print_page_no) 22 | - [쓰기 버튼 출력](../../07_write_list_page/print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../../07_write_list_page/print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../../07_write_list_page/confirm_print_list) 25 | - [쓰기 페이지 작성](../../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../../13_write_password_page) 54 | 55 | ## 푸터 작성 56 | 57 | 게시판 푸터는 사용자가 게시판의 어떤 페이지에 접근해도 항상 같은 내용을 화면 아랫부분에 출력합니다. 예제 게시판 스킨에서는 별도의 내용을 포함하지 않고 *_header.html*에서 종료하지 않았던 `
`의 종료 태그만 작성했습니다. 58 | 59 | ```html 60 |
61 | ``` 62 | 63 | *_footer.html*은 *_header.html*과 함께 모든 페이지에서 포함(include)합니다. 64 | -------------------------------------------------------------------------------- /Make_Board_Skin/07_write_list_page/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Board_Skin/07_write_list_page/001.png -------------------------------------------------------------------------------- /Make_Board_Skin/07_write_list_page/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../01_about_board_skin) 4 | - [게시판 모듈 설치](../02_install_board_module) 5 | - [쉬운 설치](../02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](../02_install_board_module/upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../06_write_header_n_footer) 13 | - [헤더 작성](../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../06_write_header_n_footer/write_footer) 15 | - 목록 페이지 작성 16 | - [_header.html, _footer.html 포함(include)](./include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](./show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](./listing_documents) 19 | - [게시물 목록 헤더 출력](./print_list_header) 20 | - [게시물 목록 출력](./print_list) 21 | - [페이지 번호 링크 출력](./print_page_no) 22 | - [쓰기 버튼 출력](./print_write_btn) 23 | - [게시판 검색 입력 양식 출력](./print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](./confirm_print_list) 25 | - [쓰기 페이지 작성](../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../13_write_password_page) 54 | 55 | ## 목록 페이지 작성 56 | 57 | 게시판에 접근했을 때 처음 보이는 페이지는 게시물 목록을 보여주는 목록 페이지입니다. 목록 페이지는 *list.html*에서 작성합니다. 58 | 59 | 다음은 예제 게시판 스킨으로 만든 목록 페이지의 완성 화면입니다. 게시판 헤더에서 작성한 대로 **XE 실습**이라는 게시판 제목과 **XE 게시판 스킨 제작 실습을 위한 임시 게시판입니다.**라는 게시판 상세 설명이 게시판 윗부분에 항상 표시됩니다. 60 | 61 | ![게시판 목록 페이지 완성 화면](./001.png) 62 | 63 | 위의 게시판 목록 페이지는 가능한 모든 칼럼 항목을 표시하도록 설정한 상태입니다. 게시판 관리자가 목록 페이지에서 어떤 항목을 표시하려고 할지 알 수 없기 때문에 스킨을 만들 때 모든 항목을 출력하도록 설정하는 것이 좋습니다. 64 | 65 | *list.html*을 작성하는 방법은 하위 항목에서 설명합니다. 66 | -------------------------------------------------------------------------------- /Make_Board_Skin/07_write_list_page/confirm_print_list/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Board_Skin/07_write_list_page/confirm_print_list/001.png -------------------------------------------------------------------------------- /Make_Board_Skin/07_write_list_page/confirm_print_list/002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Board_Skin/07_write_list_page/confirm_print_list/002.png -------------------------------------------------------------------------------- /Make_Board_Skin/07_write_list_page/include_header_n_footer/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../../01_about_board_skin) 4 | - [게시판 모듈 설치](../../02_install_board_module) 5 | - [쉬운 설치](../../02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](../../02_install_board_module/upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../../06_write_header_n_footer) 13 | - [헤더 작성](../../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../../06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](../) 16 | - _header.html, _footer.html 포함(include) 17 | - [게시물이 없을 때 메시지 출력](../show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../listing_documents) 19 | - [게시물 목록 헤더 출력](../print_list_header) 20 | - [게시물 목록 출력](../print_list) 21 | - [페이지 번호 링크 출력](../print_page_no) 22 | - [쓰기 버튼 출력](../print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../confirm_print_list) 25 | - [쓰기 페이지 작성](../../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../../13_write_password_page) 54 | 55 | ## _header.html, _footer.html 포함(include) 56 | 57 | 예제 게시판 스킨의 *list.html*에서는 다음과 같이 *_header.html*과 *_footer.html*을 포함(include)하도록 작성했습니다. 58 | 59 | ```html 60 | 61 | 이곳에 게시물 목록을 출력할 예정입니다. 62 | 63 | ``` 64 | 65 | 위 코드에서 사용된 템플릿 문법은 다음과 같습니다. 66 | 67 | |XE 템플릿 문법|설명| 68 | |---|---| 69 | |``|_header.html 포함(include)| 70 | |``|_footer.html 포함(include)| 71 | -------------------------------------------------------------------------------- /Make_Board_Skin/07_write_list_page/print_list_header/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Board_Skin/07_write_list_page/print_list_header/001.png -------------------------------------------------------------------------------- /Make_Board_Skin/07_write_list_page/print_write_btn/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../../01_about_board_skin) 4 | - [게시판 모듈 설치](../../02_install_board_module) 5 | - [쉬운 설치](../../02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](../../02_install_board_module/upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../../06_write_header_n_footer) 13 | - [헤더 작성](../../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../../06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](../) 16 | - [_header.html, _footer.html 포함(include)](../include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](../show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](../listing_documents) 19 | - [게시물 목록 헤더 출력](../print_list_header) 20 | - [게시물 목록 출력](../print_list) 21 | - [페이지 번호 링크 출력](../print_page_no) 22 | - 쓰기 버튼 출력 23 | - [게시판 검색 입력 양식 출력](../print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../confirm_print_list) 25 | - [쓰기 페이지 작성](../../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../../13_write_password_page) 54 | 55 | ## 쓰기 버튼 출력 56 | 57 | *list.html*은 목록 페이지뿐만 아니라 읽기 페이지에서도 출력됩니다. 쓰기 버튼을 클릭하면 *write_form.html* 페이지로 이동합니다. 58 | 59 | 예제 게시판 스킨의 *list.html*에서는 다음과 같이 쓰기 페이지 링크 버튼을 작성했습니다. 60 | 61 | ```html 62 | 72 | ``` 73 | 74 | 위 코드에서 사용된 템플릿 문법과 변수는 다음과 같습니다. 75 | 76 | |XE 템플릿 문법/변수|설명| 77 | |---|---| 78 | |`{$lang->cmd_write}`|쓰기 페이지 링크 버튼. 목록 페이지와 읽기 페이지에서 출력됩니다.| 79 | -------------------------------------------------------------------------------- /Make_Board_Skin/07_write_list_page/show_message_when_no_document/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](../../01_about_board_skin) 4 | - [게시판 모듈 설치](../../02_install_board_module) 5 | - [쉬운 설치](../../02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](../../02_install_board_module/upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](../../03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](../../03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](../../03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](../../04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](../../05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](../../06_write_header_n_footer) 13 | - [헤더 작성](../../06_write_header_n_footer/write_header) 14 | - [푸터 작성](../../06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](../) 16 | - [_header.html, _footer.html 포함(include)](../include_header_n_footer) 17 | - 게시물이 없을 때 메시지 출력 18 | - [게시물 목록을 표로 작성](../listing_documents) 19 | - [게시물 목록 헤더 출력](../print_list_header) 20 | - [게시물 목록 출력](../print_list) 21 | - [페이지 번호 링크 출력](../print_page_no) 22 | - [쓰기 버튼 출력](../print_write_btn) 23 | - [게시판 검색 입력 양식 출력](../print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](../confirm_print_list) 25 | - [쓰기 페이지 작성](../../08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](../../08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](../../08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](../../08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](../../08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](../../08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](../../08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](../../08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](../../08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](../../09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](../../09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](../../09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](../../09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](../../09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](../../09_write_reading_page/print_content) 40 | - [첨부 파일 출력](../../09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](../../09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](../../09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](../../09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](../../10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](../../10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](../../10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](../../10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](../../11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](../../11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](../../11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](../../12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](../../13_write_password_page) 54 | 55 | ## 게시물이 없을 때 메시지 출력 56 | 57 | 조건문을 사용해서 게시물이 없을 때 메시지를 출력할 수 있습니다. 예제 게시판 스킨의 *list.html*에서는 게시물이 없을 때 **등록된 글이 없습니다**라는 메시지를 출력하도록 다음과 같이 조건문을 작성했습니다. 58 | 59 | ```html 60 | 61 |

{$lang->no_documents}

62 | 63 | ``` 64 | 65 | 위 코드에서 사용된 템플릿 문법과 변수는 다음과 같습니다. 66 | 67 | |XE 템플릿 문법/변수|설명| 68 | |---|---| 69 | |`cond="!$document_list && !$notice_list"`|게시물과 공지사항 목록이 모두 없으면 출력| 70 | |`{$lang->no_documents}`|**등록된 글이 없습니다**라는 언어 변수| 71 | -------------------------------------------------------------------------------- /Make_Board_Skin/README.md: -------------------------------------------------------------------------------- 1 | # 게시판 스킨 만들기 2 | 3 | - [게시판 스킨이란](./01_about_board_skin) 4 | - [게시판 모듈 설치](./02_install_board_module) 5 | - [쉬운 설치](./02_install_board_module/autoinstall) 6 | - [소스 파일 업로드](./02_install_board_module/upload_sources) 7 | - [게시판 스킨의 위치와 필수 파일](./03_board_skin_structure) 8 | - [게시판 스킨의 위치 확인](./03_board_skin_structure/confirm_directory) 9 | - [게시판 스킨 필수 파일](./03_board_skin_structure/required_files) 10 | - [게시판 스킨 정보 작성](./04_write_board_skin_info) 11 | - [게시판 생성 및 스킨 적용](./05_make_board_n_apply_skin) 12 | - [게시판 헤더/푸터 작성](./06_write_header_n_footer) 13 | - [헤더 작성](./06_write_header_n_footer/write_header) 14 | - [푸터 작성](./06_write_header_n_footer/write_footer) 15 | - [목록 페이지 작성](./07_write_list_page) 16 | - [_header.html, _footer.html 포함(include)](./07_write_list_page/include_header_n_footer) 17 | - [게시물이 없을 때 메시지 출력](./07_write_list_page/show_message_when_no_document) 18 | - [게시물 목록을 표로 작성](./07_write_list_page/listing_documents) 19 | - [게시물 목록 헤더 출력](./07_write_list_page/print_list_header) 20 | - [게시물 목록 출력](./07_write_list_page/print_list) 21 | - [페이지 번호 링크 출력](./07_write_list_page/print_page_no) 22 | - [쓰기 버튼 출력](./07_write_list_page/print_write_btn) 23 | - [게시판 검색 입력 양식 출력](./07_write_list_page/print_search_form) 24 | - [게시판 목록 화면 출력 결과 확인](./07_write_list_page/confirm_print_list) 25 | - [쓰기 페이지 작성](./08_write_writing_page) 26 | - [_header.html, _footer.html 포함(include)](./08_write_writing_page/include_header_n_footer) 27 | - [쓰기 화면의 HTML 구조](./08_write_writing_page/html_structure_write_form) 28 | - [쓰기 양식 작성](./08_write_writing_page/write_writing_form) 29 | - [제목 입력 창 작성](./08_write_writing_page/write_title_form) 30 | - [내용 입력 창(편집 창) 작성](./08_write_writing_page/write_input_form) 31 | - [글쓴이 정보 입력 창 작성](./08_write_writing_page/write_author_form) 32 | - [등록 버튼 출력](./08_write_writing_page/print_write_btn) 33 | - [쓰기 페이지 출력 결과 확인](./08_write_writing_page/confirm_write_form) 34 | - [읽기 페이지 작성](./09_write_reading_page) 35 | - [list.html에 _read.html 포함(include)](./09_write_reading_page/include_header_n_footer) 36 | - [읽기 페이지 구조](./09_write_reading_page/structure_read_form) 37 | - [제목, 글쓴이 출력](./09_write_reading_page/print_title_n_author) 38 | - [조회수, 추천 수, 날짜 출력](./09_write_reading_page/print_num_list) 39 | - [게시물 본문 출력](./09_write_reading_page/print_content) 40 | - [첨부 파일 출력](./09_write_reading_page/print_attach_files) 41 | - [목록, 수정, 삭제 버튼 출력](./09_write_reading_page/print_btns) 42 | - [엮인글 목록, 댓글 목록 포함(include)](./09_write_reading_page/include_trackback_n_comment_list) 43 | - [게시물에 대한 댓글 입력 양식 출력](./09_write_reading_page/print_input_comment_form) 44 | - [엮인글/댓글 관련 페이지 작성](./10_write_trackback_n_comment_page) 45 | - [엮인글 목록 작성](./10_write_trackback_n_comment_page/write_trackback_form) 46 | - [댓글 목록 작성](./10_write_trackback_n_comment_page/write_comment_form) 47 | - [댓글의 댓글 쓰기 및 댓글 수정 페이지 작성](./10_write_trackback_n_comment_page/write_recomment_n_edit_form) 48 | - [삭제 페이지 작성](./11_write_deleting_page) 49 | - [게시물 삭제 페이지 작성](./11_write_deleting_page/write_delete_document_form) 50 | - [댓글 삭제 페이지 작성](./11_write_deleting_page/write_delete_comment_form) 51 | - [엮인글 삭제 페이지 작성](./11_write_deleting_page/write_delete_trackback_form) 52 | - [권한 안내 페이지 작성](./12_write_grant_page) 53 | - [비밀번호 입력 페이지 작성](./13_write_password_page) 54 | 55 | 이 장에서는 예제 게시판 스킨을 사용해서 게시판 스킨을 만들고 적용하는 방법을 설명합니다. 56 | -------------------------------------------------------------------------------- /Make_Layout/01_about_layout/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/01_about_layout/001.png -------------------------------------------------------------------------------- /Make_Layout/01_about_layout/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - 레이아웃 스킨이란 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../03_write_layout_info) 8 | - [레이아웃 생성](../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../08_link_layout) 21 | - [페이지 생성](../08_link_layout/make_page) 22 | - [페이지 확인](../08_link_layout/confirm_page) 23 | - [페이지 수정](../08_link_layout/edit_page) 24 | 25 | ## 레이아웃 스킨이란 26 | 27 | XE는 레이아웃과 콘텐츠가 분리되어 있습니다. 레이아웃은 XE 콘텐츠를 담아내는 구조체 또는 얼개입니다. 28 | 29 | 일반적인 웹 사이트는 헤더, 글로벌 내비게이션, 로컬 내비게이션, 콘텐츠, 푸터 형식으로 구성되어 있는데, 이런 요소의 화면 배치를 결정하는 것이 바로 레이아웃 스킨의 역할입니다. 30 | 31 | 만약 게시판, 위키와 같은 특정 콘텐츠를 사용자에게 보여줄 때 다른 콘텐츠는 보여줄 필요가 없다면 레이아웃 스킨을 사용하지 않아도 됩니다. 그러나 게시판, 위키와 같은 콘텐츠 이외에 웹 사이트를 일관성 있게 탐색할 수 있도록 헤더, 글로벌 내비게이션, 로컬 내비게이션, 푸터 영역 등을 배치해야 한다면 레이아웃 스킨이 반드시 있어야 합니다. 32 | 33 | 다음은 레이아웃 스킨을 사용한 일반적인 화면 구성을 나타낸 것입니다. 34 | 35 | ![레이아웃 스킨을 사용한 일반적인 화면 구성](./001.png) 36 | 37 | XE core는 하나 이상의 레이아웃 스킨을 포함하고 있습니다. 기본으로 포함되어 있는 레이아웃 스킨은 XE core가 설치된 경로의 */layouts/*에 있습니다. 스킨 제작자는 XE core에 포함된 기본 레이아웃 스킨을 사용하거나 새로 만들 수도 있습니다. 38 | -------------------------------------------------------------------------------- /Make_Layout/02_layout_structure/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../01_about_layout) 4 | - 레이아웃 스킨의 위치와 디렉터리 구조 5 | - [레이아웃 스킨의 위치 확인](./confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](./directory_structure) 7 | - [레이아웃 스킨 정보 작성](../03_write_layout_info) 8 | - [레이아웃 생성](../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../08_link_layout) 21 | - [페이지 생성](../08_link_layout/make_page) 22 | - [페이지 확인](../08_link_layout/confirm_page) 23 | - [페이지 수정](../08_link_layout/edit_page) 24 | 25 | ## 레이아웃 스킨의 위치와 디렉터리 구조 26 | 27 | 이 장에서는 레이아웃 스킨이 있는 위치와 그 디렉토리의 구조를 설명합니다. 28 | -------------------------------------------------------------------------------- /Make_Layout/02_layout_structure/confirm_directory/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../) 5 | - 레이아웃 스킨의 위치 확인 6 | - [레이아웃 스킨 디렉터리 구조](../directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../../08_link_layout) 21 | - [페이지 생성](../../08_link_layout/make_page) 22 | - [페이지 확인](../../08_link_layout/confirm_page) 23 | - [페이지 수정](../../08_link_layout/edit_page) 24 | 25 | ## 레이아웃 스킨의 위치 확인 26 | 27 | */xe/*라는 사용자 정의 디렉터리에 XE core를 설치했다면 레이아웃 스킨 디렉터리의 위치는 다음과 같습니다. 28 | 29 | ``` 30 | /xe/layouts/ 31 | ``` 32 | 33 | > 레이아웃 스킨을 로컬 PC에서 수정할 때는 수정한 내용을 웹 사이트의 레이아웃 스킨 디렉터리에 반영해야 합니다. 34 | -------------------------------------------------------------------------------- /Make_Layout/02_layout_structure/directory_structure/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/02_layout_structure/directory_structure/001.png -------------------------------------------------------------------------------- /Make_Layout/02_layout_structure/directory_structure/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../) 5 | - [레이아웃 스킨의 위치 확인](../confirm_directory) 6 | - 레이아웃 스킨 디렉터리 구조 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../../08_link_layout) 21 | - [페이지 생성](../../08_link_layout/make_page) 22 | - [페이지 확인](../../08_link_layout/confirm_page) 23 | - [페이지 수정](../../08_link_layout/edit_page) 24 | 25 | ## 레이아웃 스킨 디렉터리 구조 26 | 27 | 레이아웃 스킨을 제작할 때 반드시 갖추어야 할 디렉터리 구조가 있습니다. 이 구조를 유지하지 않으면 레이아웃 스킨이 될 수 없습니다. 28 | 29 | 일반적인 레이아웃 스킨의 구조는 다음과 같습니다. 30 | 31 | ![레이아웃 스킨 디렉터리 구조](./001.png) 32 | 33 | **info.xml** 34 | info.xml은 레이아웃 스킨의 기본 정보들을 포함하며 관리자 화면에 보여줄 설명과 옵션을 제공합니다. info.xml은 반드시 다음 경로에 존재해야 합니다. *conf* 디렉터리 이름과 *info.xml* 파일 이름은 변경할 수 없습니다. 35 | 36 | ``` 37 | /xe/layouts/user_layout/conf/info.xml 38 | ``` 39 | 40 | **layout.html** 41 | *layout.html*은 레이아웃 스킨의 HTML과 CSS, JS 참조 정보를 포함합니다. *layout.html* 파일 이름은 변경할 수 없습니다. 42 | 43 | ``` 44 | /xe/layouts/user_layout/layout.html 45 | ``` 46 | 47 | **thumbnail.png** 48 | *thumbnail.png*는 레이아웃 미리보기용 이미지 파일입니다. 너비 180픽셀, 높이 120픽셀 이상 크기로 제작하여 넣어두면 관리자 화면에서 미리보기 이미지로 출력합니다. *thumbnail.png*라는 파일 이름은 변경할 수 없습니다. 49 | 50 | ``` 51 | /xe/layouts/user_layout/thumbnail.png 52 | ``` 53 | 54 | **CSS, JS, IMG** 55 | CSS, JS, IMG 파일은 레이아웃 스킨의 필수 요소가 아니므로 필요에 따라 생성해서 사용합니다. *conf* 디렉터리를 제외한 어느 곳에 위치해도 무방합니다. 관리해야 할 파일의 수가 많아지면 레이아웃 스킨 디렉터리 아래에 *css*, *js*, *img*와 같은 이름의 디렉터리를 추가로 생성해서 관리할 수 있습니다. 56 | -------------------------------------------------------------------------------- /Make_Layout/04_make_layout_instance/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../03_write_layout_info) 8 | - 레이아웃 생성 9 | - [사용자 정의 레이아웃 확인](./confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](./copy_layout) 11 | - [레이아웃 스킨 작성](../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../08_link_layout) 21 | - [페이지 생성](../08_link_layout/make_page) 22 | - [페이지 확인](../08_link_layout/confirm_page) 23 | - [페이지 수정](../08_link_layout/edit_page) 24 | 25 | ## 레이아웃 생성 26 | 27 | 이 장에서는 사용자 정의 레이아웃을 확인하고 레이아웃의 사본을 생성하는 과정을 설명합니다. 28 | -------------------------------------------------------------------------------- /Make_Layout/04_make_layout_instance/confirm_user_defined_layout/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/04_make_layout_instance/confirm_user_defined_layout/001.png -------------------------------------------------------------------------------- /Make_Layout/04_make_layout_instance/confirm_user_defined_layout/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../) 9 | - 사용자 정의 레이아웃 확인 10 | - [레이아웃 사본 생성](../copy_layout) 11 | - [레이아웃 스킨 작성](../../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../../08_link_layout) 21 | - [페이지 생성](../../08_link_layout/make_page) 22 | - [페이지 확인](../../08_link_layout/confirm_page) 23 | - [페이지 수정](../../08_link_layout/edit_page) 24 | 25 | ## 사용자 정의 레이아웃 확인 26 | 27 | *info.xml*을 올바르게 작성했는지 확인하는 방법은 다음과 같습니다. 28 | 29 | 1. XE 관리자 페이지에서 *고급 > 설치된 레이아웃*을 엽니다. 30 | 2. 테스트 레이아웃이 제대로 표시되는지 확인합니다. 31 | 32 | ![테스트 레이아웃](./001.png) 33 | -------------------------------------------------------------------------------- /Make_Layout/04_make_layout_instance/copy_layout/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/04_make_layout_instance/copy_layout/001.png -------------------------------------------------------------------------------- /Make_Layout/04_make_layout_instance/copy_layout/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../) 9 | - [사용자 정의 레이아웃 확인](../confirm_user_defined_layout) 10 | - 레이아웃 사본 생성 11 | - [레이아웃 스킨 작성](../../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../../08_link_layout) 21 | - [페이지 생성](../../08_link_layout/make_page) 22 | - [페이지 확인](../../08_link_layout/confirm_page) 23 | - [페이지 수정](../../08_link_layout/edit_page) 24 | 25 | ## 레이아웃 사본 생성 26 | 27 | 설치된 레이아웃인 *테스트 레이아웃*에서 레이아웃 *사본*을 생성해야 비로소 사용할 수 있는 상태가 됩니다. 사용자는 *user_layout*이라는 사본을 여러 개 반복해서 생성할 수도 있습니다. 28 | 29 | 레이아웃 사본을 생성하는 방법은 다음과 같습니다. 30 | 31 | 1. 테스트 레이아웃 페이지를 열고 추가를 클릭합니다. 32 | 2. 제목에 사본의 이름을 입력하고 추가를 클릭합니다. 제목은 *user_layout*의 또 다른 사본과 구별할 수 있게 입력해야 합니다. 이 예제에서는 테스트 레이아웃 사본 이름으로 *사용자 정의 레이아웃_사본1*을 입력했습니다. 33 | 3. 테스트 레이아웃 페이지에서 다음과 같이 *사용자 정의 레이아웃_사본1*이 생성된 것을 확인할 수 있습니다. 34 | 35 | ![사용자 정의 레이아웃_사본1](./001.png) 36 | 37 | 이제 이 레이아웃을 사용하고자 하는 모듈의 설정 화면에서 *사용자 정의 레이아웃_사본1*을 선택할 수 있습니다. 38 | 39 | > *layout.html*을 생성하지 않은 상태에서 이 레이아웃을 적용한 모듈 페이지에 접근하면 *Err : "./layouts/user_layout/layout.html" template file does not exist.* 오류 메시지가 화면에 출력됩니다. 40 | -------------------------------------------------------------------------------- /Make_Layout/05_write_layout/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../03_write_layout_info) 8 | - [레이아웃 생성](../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../04_make_layout_instance/copy_layout) 11 | - 레이아웃 스킨 작성 12 | - [레이아웃 스킨의 문서 구조](./layout_structure) 13 | - [{$content} 변수로 본문 출력](./print_content) 14 | - [글로벌 메뉴 출력](./print_global_menu) 15 | - [로컬 메뉴 출력](./print_local_menu) 16 | - [통합검색 양식 출력](./print_search_form) 17 | - [로그인 양식 출력](./print_login_form) 18 | - [사이트맵 작성](../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../08_link_layout) 21 | - [페이지 생성](../08_link_layout/make_page) 22 | - [페이지 확인](../08_link_layout/confirm_page) 23 | - [페이지 수정](../08_link_layout/edit_page) 24 | 25 | ## 레이아웃 스킨 작성 26 | 27 | 레이아웃 스킨의 내용은 *layout.html*에서 작성합니다. 28 | 29 | XE는 *DOCTYPE*, *html*, *head*, *body* 요소를 XE core에서 자동으로 출력한다는 특징이 있습니다. 따라서 스킨 제작자는 이 요소들을 스킨 파일에서 작성할 필요가 없습니다. 스킨 파일에 이 요소들을 포함하면 중첩 문법으로 처리되어 HTML 오류가 발생하거나 화면 깨짐 현상이 발생합니다. 30 | 31 | 레이아웃 스킨을 적용한 웹 페이지의 기본 구조는 다음과 같습니다. 32 | 33 | ```html 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | ``` 45 | 46 | *layout.html* 페이지에서 작성하는 HTML 코드와 내용은 모두 `` 요소 안쪽에 HTML 코드로 출력됩니다. 따라서 스킨 제작자는 `` 요소 안쪽에서 사용할 수 있는 유효한 HTML 문법으로 *layout.html*를 작성해야 합니다. `` 요소에 포함해야 할 내용은 XE 템플릿 문법을 사용하여 `` 요소 내부에서 작성할 수 있습니다. 47 | -------------------------------------------------------------------------------- /Make_Layout/05_write_layout/layout_structure/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../) 12 | - 레이아웃 스킨의 문서 구조 13 | - [{$content} 변수로 본문 출력](../print_content) 14 | - [글로벌 메뉴 출력](../print_global_menu) 15 | - [로컬 메뉴 출력](../print_local_menu) 16 | - [통합검색 양식 출력](../print_search_form) 17 | - [로그인 양식 출력](../print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../../08_link_layout) 21 | - [페이지 생성](../../08_link_layout/make_page) 22 | - [페이지 확인](../../08_link_layout/confirm_page) 23 | - [페이지 수정](../../08_link_layout/edit_page) 24 | 25 | ## 레이아웃 스킨의 문서 구조 26 | 27 | 예제 레이아웃 스킨은 *header*, *gnb(global navigation bar)*, *body*, *lnb(local navigation bar)*, *content*, *footer*로 구성되어 있습니다. 따라서 *layout.html*의 문서 구조는 다음과 같습니다. 28 | 29 | ```html 30 |
31 |
32 |

Site Logo

33 |
34 |
.gnb
35 |
36 |
37 |
38 |
.lnb
39 |
40 |
.content
41 |
42 |
43 | 44 |
45 | ``` 46 | 47 | HTML로 작성된 `
` 요소에 클래스 이름을 지정한 이유는 CSS 파일에서 HTML 요소를 선택해서 원하는 배치를 구현할 수 있도록 하기 위해서입니다. 48 | -------------------------------------------------------------------------------- /Make_Layout/05_write_layout/print_content/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../) 12 | - [레이아웃 스킨의 문서 구조](../layout_structure) 13 | - {$content} 변수로 본문 출력 14 | - [글로벌 메뉴 출력](../print_global_menu) 15 | - [로컬 메뉴 출력](../print_local_menu) 16 | - [통합검색 양식 출력](../print_search_form) 17 | - [로그인 양식 출력](../print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../../08_link_layout) 21 | - [페이지 생성](../../08_link_layout/make_page) 22 | - [페이지 확인](../../08_link_layout/confirm_page) 23 | - [페이지 수정](../../08_link_layout/edit_page) 24 | 25 | ## {$content} 변수로 본문 출력 26 | 27 | *layout.html*은 아직 사용자 화면에서 확인할 수 없습니다. 어떤 모듈에서도 아직 이 레이아웃을 선택하지 않았기 때문입니다. 레이아웃 스킨 페이지는 스스로는 존재할 수 없고 특정 모듈에서 사용될 때 해당 모듈 페이지에 접근하면서 확인할 수 있습니다. 레이아웃 스킨은 **모듈**에 의존적입니다. 28 | 29 | 예제 레이아웃 스킨을 사용자 화면에서 확인하려면 특정 모듈(페이지, 게시판, 위키 등)을 하나 생성하여 이 레이아웃 스킨과 연결해야 합니다. 그 전에 스킨 제작자는 레이아웃 스킨과 연결된 모듈(페이지, 게시판, 위키 등)에서 레이아웃 스킨을 화면에 제대로 표시할 수 있도록 **내용 변수**를 작성해야 합니다. 30 | 31 | 예제 레이아웃 스킨에서는 다음과 같이 레이아웃의 본문 영역에 {$content} 변수를 사용해서 **내용 변수**를 작성했습니다. 32 | 33 | ```html 34 |
35 |
36 |

Site Logo

37 |
38 |
.gnb
39 |
40 |
41 |
42 |
.lnb
43 |
44 |
45 | .content{$content} 46 |
47 |
48 |
49 | 50 |
51 | ``` 52 | 53 | *{$content}*는 레이아웃 스킨에서 사용할 수 있는 가장 중요한 변수로서, 현재의 레이아웃 스킨이 어떤 종류의 모듈과 연결되더라도 연결된 모듈의 내용을 본문 영역에 출력합니다. 어떤 모듈과 연결되는지에 따라서 정적인 페이지가 될 수도 있고 동적인 게시판, 위키 페이지가 될 수도 있습니다. 54 | 55 | XE에서 모듈과 레이아웃의 관계는 **레이아웃 스킨**에 여러 종류의 **모듈**을 탑재하는 것이 아니라 여러 종류의 **모듈**에 **레이아웃 스킨**을 연결하는 개념입니다. XE로 생성한 모듈 페이지에는 고유한 URL이 있지만, 레이아웃 스킨에는 URL이 없고 **모듈**에 연결된 상황에서만 표시된다는 것을 기억해 주시기 바랍니다. 56 | -------------------------------------------------------------------------------- /Make_Layout/05_write_layout/print_global_menu/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../) 12 | - [레이아웃 스킨의 문서 구조](../layout_structure) 13 | - [{$content} 변수로 본문 출력](../print_content) 14 | - 글로벌 메뉴 출력 15 | - [로컬 메뉴 출력](../print_local_menu) 16 | - [통합검색 양식 출력](../print_search_form) 17 | - [로그인 양식 출력](../print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../../08_link_layout) 21 | - [페이지 생성](../../08_link_layout/make_page) 22 | - [페이지 확인](../../08_link_layout/confirm_page) 23 | - [페이지 수정](../../08_link_layout/edit_page) 24 | 25 | ## 글로벌 메뉴 출력 26 | 27 | `
.gnb
` 요소 내부에 레이아웃과 연결된 글로벌 메뉴를 출력할 수 있습니다. 28 | 29 | XE 관리자 페이지에서 레이아웃과 메뉴를 연결하면 레이아웃은 항상 연결된 메뉴를 화면에 표시하는데, 이때 연결된 메뉴를 표시할 수 있도록 레이아웃 스킨에서 미리 코드를 작성해야 합니다. 30 | 31 | 예제 레이아웃 스킨에서는 다음과 같이 연결된 메뉴를 화면에 출력하는 코드를 작성했습니다. 메뉴를 최대 2단계까지 출력합니다. 32 | 33 | ```html 34 |
35 | .gnb 36 | 43 |
44 | ``` 45 | 46 | 위 코드에서 사용된 템플릿 문법과 변수는 다음과 같습니다. 47 | 48 | |템플릿 문법/변수|설명|구분| 49 | |---|---|---| 50 | |`loop="$global_menu->list=>$key1,$val1"`|연결 메뉴 목록이 있으면 출력|반복문| 51 | |`cond="$val1['list']"`|연결 메뉴가 하위 목록을 포함하면 출력|조건문| 52 | |`loop="$val1['list']=>$key2,$val2"`|연결 메뉴가 하위 목록을 포함하면 출력|반복문| 53 | |`class="active"|cond="$val1['selected']"` `class="active"|cond="$val2['selected']"`|연결 메뉴 또는 연결 메뉴 하위 목록과 현재 페이지가 일치하면 `
  • ` 요소에 `class="active"` 속성을 추가|조건문| 54 | |`target="_blank"|cond="$val1['open_window']=='Y'"` `target="_blank"|cond="$val2['open_window']=='Y'"`|연결 메뉴 링크 옵션이 새 창이면 target="_blank" 출력|조건문| 55 | |`{$val1['href']}` `{$val2['href']}`|연결 메뉴 링크 URL|변수| 56 | |`{$val1['link']}` `{$val2['link']}`|연결 메뉴 링크 텍스트|변수| 57 | -------------------------------------------------------------------------------- /Make_Layout/05_write_layout/print_local_menu/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../) 12 | - [레이아웃 스킨의 문서 구조](../layout_structure) 13 | - [{$content} 변수로 본문 출력](../print_content) 14 | - [글로벌 메뉴 출력](../print_global_menu) 15 | - 로컬 메뉴 출력 16 | - [통합검색 양식 출력](../print_search_form) 17 | - [로그인 양식 출력](../print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../../08_link_layout) 21 | - [페이지 생성](../../08_link_layout/make_page) 22 | - [페이지 확인](../../08_link_layout/confirm_page) 23 | - [페이지 수정](../../08_link_layout/edit_page) 24 | 25 | ## 로컬 메뉴 출력 26 | 27 | `
    .lnb
    ` 요소 내부에 레이아웃과 연결된 로컬 메뉴를 출력할 수 있습니다. 로컬 메뉴를 출력하는 문법은 기본적으로 글로벌 메뉴를 출력하는 방법과 유사합니다. 28 | 29 | 글로벌 메뉴와 로컬 메뉴 출력의 다른 점은 로컬 메뉴가 1단계 메뉴를 표시하지 않는다는 점입니다. 글로벌 메뉴가 `
    .gnb
    ` 영역에 이미 1~2단계를 표시하고 있기 때문에 로컬 메뉴는 현재 페이지를 기준으로 관련된 2~3단계 메뉴를 표시합니다. 30 | 31 | 로컬 메뉴는 메뉴에 연결된 페이지가 있을 때에만 출력되기 때문에 메뉴를 생성하는 과정에서 실제 연결할 수 있는 페이지의 URL을 입력해야 합니다. 32 | 33 | 예제 레이아웃 스킨에서는 다음과 같이 로컬 메뉴 출력 코드를 작성했습니다. 34 | 35 | ```html 36 |
    37 | .lnb 38 |

    {$val1['link']}

    39 | 47 |
    48 | ``` 49 | 50 | 위 코드에서 사용된 템플릿 문법과 변수는 다음과 같습니다. 51 | 52 | |템플릿 문법/변수|설명|구분| 53 | |---|---|---| 54 | |`loop="$global_menu->list=>$key1,$val1"`|연결 메뉴 목록이 있으면 출력|반복문| 55 | |`cond="$val1['selected']"`|연결 메뉴와 현재 페이지가 일치하면 내용을 출력|조건문| 56 | |`cond="$val1['selected'] && $val1['list']"`|연결 메뉴와 현재 페이지가 일치하고 동시에 하위 목록을 포함하면 출력|조건문| 57 | |`loop="$val1['list']=>$key2,$val2"` `loop="$val2['list']=>$key3,$val3"`|연결 메뉴가 하위 목록을 포함하면 출력|반복문| 58 | |`cond="$val2['list']"`|연결 메뉴가 하위 목록을 포함하면 출력|조건문| 59 | |`class="active"|cond="$val2['selected']"` `class="active"|cond="$val3['selected']"`|연결 메뉴 또는 연결 메뉴 하위 목록과 현재 페이지가 일치하면 `
  • ` 요소에 `class="active"` 속성을 추가|조건문| 60 | |`target="_blank"|cond="$val1['open_window']=='Y'"` `target="_blank"|cond="$val2['open_window']=='Y'"` `target="_blank"|cond="$val3['open_window']=='Y'"`|연결 메뉴 링크 옵션이 새 창이면 target="_blank" 출력|조건문| 61 | |`{$val1['href']}` `{$val2['href']}` `{$val3['href']}`|연결 메뉴 링크 URL|변수| 62 | |`{$val1['link']}` `{$val2['link']}` `{$val3['link']}`|연결 메뉴 링크 텍스트|변수| 63 | -------------------------------------------------------------------------------- /Make_Layout/05_write_layout/print_login_form/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../) 12 | - [레이아웃 스킨의 문서 구조](../layout_structure) 13 | - [{$content} 변수로 본문 출력](../print_content) 14 | - [글로벌 메뉴 출력](../print_global_menu) 15 | - [로컬 메뉴 출력](../print_local_menu) 16 | - [통합검색 양식 출력](../print_search_form) 17 | - 로그인 양식 출력 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../../08_link_layout) 21 | - [페이지 생성](../../08_link_layout/make_page) 22 | - [페이지 확인](../../08_link_layout/confirm_page) 23 | - [페이지 수정](../../08_link_layout/edit_page) 24 | 25 | ## 로그인 양식 출력 26 | 27 | 운영하려는 웹 사이트가 회원제 웹 사이트면 회원 가입을 받고 회원이 로그인할 수 있어야 합니다. XE core에는 이미 회원 가입 페이지와 로그인 양식이 준비되어 있습니다. 로그인 양식을 레이아웃 스킨에 포함하려면 원하는 위치에 로그인 양식 출력 코드를 추가합니다. 28 | 29 | 예제 레이아웃 스킨에서는 다음과 같이 `
    ...
    ` 내부의 영역 윗부분에 로그인 위젯을 출력하도록 작성했습니다. 30 | 31 | ```html 32 | ... 33 |
    34 | .lnb 35 | 38 |

    ...

    39 |
      ...
    40 |
    41 | ... 42 | ``` 43 | -------------------------------------------------------------------------------- /Make_Layout/05_write_layout/print_search_form/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../) 12 | - [레이아웃 스킨의 문서 구조](../layout_structure) 13 | - [{$content} 변수로 본문 출력](../print_content) 14 | - [글로벌 메뉴 출력](../print_global_menu) 15 | - [로컬 메뉴 출력](../print_local_menu) 16 | - 통합검색 양식 출력 17 | - [로그인 양식 출력](../print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../../08_link_layout) 21 | - [페이지 생성](../../08_link_layout/make_page) 22 | - [페이지 확인](../../08_link_layout/confirm_page) 23 | - [페이지 수정](../../08_link_layout/edit_page) 24 | 25 | ## 통합검색 양식 출력 26 | 27 | 웹 사이트 통합검색은 특정 모듈만을 검색 대상으로 하지 않고 생성된 모든 모듈을 검색 결과에 포함시키는 기능입니다. 그러나 통합검색 양식을 제공하지 않으면 통합검색 기능도 사용할 수 없습니다. 통합검색 양식은 보통 레이아웃 스킨에서 제공합니다. 28 | 29 | 통합검색 양식 코드는 XE 관리자 페이지의 *고급 > 설치된 모듈 > 통합검색*에서 제공합니다. 30 | 31 | 예제 레이아웃 스킨에서는 다음과 같이 `
    ...
    ` 요소에 통합검색 양식 코드 ``을 추가했습니다. 32 | 33 | ```html 34 |
    35 |
    36 |

    Site Logo

    37 | 44 |
    45 |
    46 | .gnb 47 | ... 48 |
    49 |
    50 |
    51 |
    52 |
    53 | .lnb 54 | ... 55 |
    56 |
    57 |
    {$content}
    58 |
    59 |
    60 | 61 |
    62 | ``` 63 | 64 | 위 코드에서 사용된 변수는 다음과 같습니다. 65 | 66 | |변수|설명| 67 | |---|---| 68 | |`{getUrl()}`|사용자의 검색어를 전송할 페이지의 URL| 69 | |`{$vid}`|가상 사이트 아이디| 70 | |`{$mid}`|모듈 아이디| 71 | |`{$is_keyword}`|사용자가 입력한 통합검색 키워드. 검색 결과 페이지에서 사용자가 입력한 키워드를 다시 보여 줍니다.| 72 | |`{$lang->cmd_search}`|언어 변수. *검색*이라는 단어가 변수에 할당되어 있습니다.| 73 | -------------------------------------------------------------------------------- /Make_Layout/06_write_sitemap/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/06_write_sitemap/001.png -------------------------------------------------------------------------------- /Make_Layout/06_write_sitemap/002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/06_write_sitemap/002.png -------------------------------------------------------------------------------- /Make_Layout/06_write_sitemap/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../03_write_layout_info) 8 | - [레이아웃 생성](../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../05_write_layout/print_login_form) 18 | - 사이트맵 작성 19 | - [레이아웃에 사이트맵 연결](../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../08_link_layout) 21 | - [페이지 생성](../08_link_layout/make_page) 22 | - [페이지 확인](../08_link_layout/confirm_page) 23 | - [페이지 수정](../08_link_layout/edit_page) 24 | 25 | ## 사이트맵 작성 26 | 27 | 사이트맵은 사이트 메뉴를 의미합니다. XE 관리자 페이지에서 사이트맵을 생성하고 원하는 레이아웃 사본과 연결하면 레이아웃이 출력될 때 사이트맵을 메뉴로 출력할 수 있습니다. 28 | 29 | 사이트맵을 생성하는 방법은 다음과 같습니다. 30 | 31 | 1. XE 관리자 페이지에서 *사이트 제작/편집 > 사이트 메뉴 편집*을 선택합니다. 32 | 2. 사이트맵 페이지에서 *사이트맵 추가*를 클릭합니다. 33 | 34 | ![사이트맵 추가](./001.png) 35 | 36 | 사이트맵은 여러 세트를 추가로 생성할 수 있는데 레이아웃과 연결할 때 다른 사이트맵과 구별할 수 있도록 제목을 반드시 입력해야 합니다. 37 | 38 | 1. 사이트맵 이름에 *사이트맵*이라고 입력하고 저장을 클릭합니다. 39 | 2. *사이트맵*에서 메뉴 추가를 클릭하고 웹 사이트의 글로벌 메뉴 구조를 완성합니다. 40 | 41 | ![메뉴 추가](./002.png) 42 | 43 | 아직은 *사이트맵*이라는 메뉴를 사용자 화면에서 볼 수 없습니다. 레이아웃에서 메뉴를 참조해야만 사용자 화면에 출력됩니다. 44 | 45 | > 메뉴를 생성하는 과정에서 모듈 또는 URL 항목에는 유효한 모듈 아이디 또는 연결 URL을 지정해야 합니다. 모듈 아이디 또는 연결 URL이 유효하지 않으면 레이아웃에서 메뉴가 정상적으로 표시되지 않을 수 있습니다. 46 | -------------------------------------------------------------------------------- /Make_Layout/07_link_sitemap/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/07_link_sitemap/001.png -------------------------------------------------------------------------------- /Make_Layout/07_link_sitemap/002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/07_link_sitemap/002.png -------------------------------------------------------------------------------- /Make_Layout/07_link_sitemap/003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/07_link_sitemap/003.png -------------------------------------------------------------------------------- /Make_Layout/07_link_sitemap/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../03_write_layout_info) 8 | - [레이아웃 생성](../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../06_write_sitemap) 19 | - 레이아웃에 사이트맵 연결 20 | - [페이지 모듈에 레이아웃 연결](../08_link_layout) 21 | - [페이지 생성](../08_link_layout/make_page) 22 | - [페이지 확인](../08_link_layout/confirm_page) 23 | - [페이지 수정](../08_link_layout/edit_page) 24 | 25 | ## 레이아웃에 사이트맵 연결 26 | 27 | *사이트맵*라는 사이트맵이 생성되었기 때문에 이제는 레이아웃에서 이 사이트맵을 참조할 수 있습니다. 레이아웃에 *사이트맵*을 연결하는 방법은 다음과 같습니다. 28 | 29 | 1. XE 관리자 페이지에서 *고급 > 설치된 레이아웃*을 선택합니다. 30 | 2. *테스트 레이아웃* 항목을 열고 *사용자 정의 레이아웃_사본1*의 설정을 선택합니다. 31 | 3. *메뉴 > 전역 메뉴(global_menu)*에서 *사이트맵*을 선택하고 레이아웃 일괄 적용을 선택한 다음 저장을 클릭합니다. 32 | 33 | > 레이아웃 일괄 적용을 선택하면 메뉴를 통해서 연결되어 있는 모든 모듈의 레이아웃이 현재의 레이아웃으로 한 번에 변경됩니다. 이후 *사이트맵*은 항상 이 레이아웃과 함께 출력됩니다. 34 | 35 | ![고급 > 설치된 레이아웃 > 테스트 레이아웃](./001.png) 36 | ![사용자 정의 레이아웃_사본1 > 설정](./002.png) 37 | ![전역 메뉴 설정](./003.png) 38 | -------------------------------------------------------------------------------- /Make_Layout/08_link_layout/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../03_write_layout_info) 8 | - [레이아웃 생성](../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../07_link_sitemap) 20 | - 페이지 모듈에 레이아웃 연결 21 | - [페이지 생성](./make_page) 22 | - [페이지 확인](./confirm_page) 23 | - [페이지 수정](./edit_page) 24 | 25 | ## 페이지 모듈에 레이아웃 연결 26 | 27 | 이 장에서는 페이지 모듈에 레이아웃 스킨을 적용해서 예제 레이아웃 스킨의 내용이 화면에 바르게 표시되는지 확인해 보겠습니다. 28 | -------------------------------------------------------------------------------- /Make_Layout/08_link_layout/confirm_page/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/08_link_layout/confirm_page/001.png -------------------------------------------------------------------------------- /Make_Layout/08_link_layout/confirm_page/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../) 21 | - [페이지 생성](../make_page) 22 | - 페이지 확인 23 | - [페이지 수정](../edit_page) 24 | 25 | ## 페이지 확인 26 | 27 | 생성된 페이지를 사용자 화면에서 접근하면 레이아웃 스킨이 적용된 결과를 확인할 수 있습니다. 모듈 ID를 *home*이라고 작성했기 때문에 이 페이지의 접근 경로는 다음과 같습니다. 아래 경로에서 *www.example.com*은 사용자의 웹 사이트가 설치된 도메인 주소를 의미합니다. 28 | 29 | 1. *mode_rewrite*를 사용할 경우 `http://www.example.com/home` 30 | 2. *mode_rewrite*를 사용하지 않는 경우 `http://www.example.com/index.php?mid=home` 31 | 32 | *home* 페이지를 열면 다음과 같은 화면이 나타납니다. 33 | 34 | ![레이아웃 스킨이 적용된 페이지](./001.png) 35 | 36 | 페이지 본문에는 아직 아무런 내용도 작성하지 않았기 때문에 표시할 내용이 없고, 본문 이외의 영역에 작성한 레이아웃 콘텐츠만 보입니다. *Site Logo*, *gnb*, *lnb*, *content*, *footer*라는 텍스트는 스킨 파일인 *layout.html* 문서에서 작성한 것입니다. 그 밖에 레이아웃 스킨에 포함했던 통합검색 양식, 글로벌 메뉴, 로그인 양식 위젯, 로컬 메뉴가 잘 출력되는 것을 확인할 수 있습니다. content 영역에는 페이지 본문을 편집할 수 있는 버튼이 있는데 이것은 관리자에게만 노출되는 기능입니다. 이 버튼이 보이지 않는다면 관리자 로그아웃 상태이거나 본문 영역에 `{$content}`라는 변수를 잘못 작성한 것입니다. 37 | -------------------------------------------------------------------------------- /Make_Layout/08_link_layout/edit_page/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/08_link_layout/edit_page/001.png -------------------------------------------------------------------------------- /Make_Layout/08_link_layout/edit_page/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../) 21 | - [페이지 생성](../make_page) 22 | - [페이지 확인](../confirm_page) 23 | - 페이지 수정 24 | 25 | ## 페이지 수정 26 | 27 | [페이지 확인](../confirm_page)에서 본 화면에서 페이지에 새로운 내용을 입력할 수 있습니다. 페이지를 수정하는 방법은 다음과 같습니다. 28 | 29 | 1. 레이아웃 스킨이 적용된 페이지에서 화면 오른쪽 아래에 있는 페이지 수정을 클릭합니다. 30 | 2. 간단한 제목과 본문 내용을 추가하고 등록을 클릭합니다. 추가한 내용이 페이지에 반영됩니다. 31 | 3. 사용자 화면에 표시되는 결과 화면은 다음과 같습니다. content 영역 오른쪽 아래에 표시되는 설정, 페이지 수정은 현재 페이지 모듈의 편집 권한이 있는 관리자에게만 표시되고 사용자 화면에는 표시되지 않습니다. 32 | 33 | ![content 영역을 바꾸는 모습](./001.png) 34 | -------------------------------------------------------------------------------- /Make_Layout/08_link_layout/make_page/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/08_link_layout/make_page/001.png -------------------------------------------------------------------------------- /Make_Layout/08_link_layout/make_page/002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/08_link_layout/make_page/002.png -------------------------------------------------------------------------------- /Make_Layout/08_link_layout/make_page/003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Make_Layout/08_link_layout/make_page/003.png -------------------------------------------------------------------------------- /Make_Layout/08_link_layout/make_page/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](../../01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](../../02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](../../02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](../../02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](../../03_write_layout_info) 8 | - [레이아웃 생성](../../04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](../../04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](../../05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](../../05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](../../05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](../../05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](../../05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](../../05_write_layout/print_search_form) 17 | - [로그인 양식 출력](../../05_write_layout/print_login_form) 18 | - [사이트맵 작성](../../06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](../../07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](../) 21 | - 페이지 생성 22 | - [페이지 확인](../confirm_page) 23 | - [페이지 수정](../edit_page) 24 | 25 | ## 페이지 생성 26 | 27 | 1. XE 관리자 페이지에서 *사이트 제작/편집 > 사이트 메뉴 편집*을 선택합니다. 28 | 2. *사이트맵*을 선택한 후 옆의 *메뉴 추가*를 클릭합니다. 29 | 3. *문서 페이지*를 선택하여 *메뉴 이름(브라우저 제목)*, *메뉴 ID*를 입력합니다. 이 예제에서는 다음과 같이 설정하고 저장합니다. 30 | - 메뉴 이름 `홈` 31 | - 메뉴 ID `home` 32 | 4. *사이트맵*에 *홈*이 생성된 것을 확인한 다음 *홈*의 *상세 설정*을 클릭해 페이지 관리 화면으로 이동합니다. 33 | 5. 페이지 관리의 *레이아웃* 항목에서 *사용자 정의 레이아웃_사본1(user_layout)*을 선택하고 저장을 클릭합니다. 34 | 35 | ![메뉴 생성](./001.png) 36 | ![상세 설정](./002.png) 37 | ![페이지 관리](./003.png) 38 | 39 | > 레이아웃에 *사용자 정의 레이아웃_사본1(user_layout)* 항목이 보이지 않는다면 *user_layout*의 사본이 아직 생성되지 않은 것입니다. *user_layout*의 사본을 생성하는 방법은 [레이아웃 사본 생성](../../04_make_layout_instance/copy_layout)을 참조하십시오. 40 | -------------------------------------------------------------------------------- /Make_Layout/README.md: -------------------------------------------------------------------------------- 1 | # 레이아웃 스킨 만들기 2 | 3 | - [레이아웃 스킨이란](./01_about_layout) 4 | - [레이아웃 스킨의 위치와 디렉터리 구조](./02_layout_structure) 5 | - [레이아웃 스킨의 위치 확인](./02_layout_structure/confirm_directory) 6 | - [레이아웃 스킨 디렉터리 구조](./02_layout_structure/directory_structure) 7 | - [레이아웃 스킨 정보 작성](./03_write_layout_info) 8 | - [레이아웃 생성](./04_make_layout_instance) 9 | - [사용자 정의 레이아웃 확인](./04_make_layout_instance/confirm_user_defined_layout) 10 | - [레이아웃 사본 생성](./04_make_layout_instance/copy_layout) 11 | - [레이아웃 스킨 작성](./05_write_layout) 12 | - [레이아웃 스킨의 문서 구조](./05_write_layout/layout_structure) 13 | - [{$content} 변수로 본문 출력](./05_write_layout/print_content) 14 | - [글로벌 메뉴 출력](./05_write_layout/print_global_menu) 15 | - [로컬 메뉴 출력](./05_write_layout/print_local_menu) 16 | - [통합검색 양식 출력](./05_write_layout/print_search_form) 17 | - [로그인 양식 출력](./05_write_layout/print_login_form) 18 | - [사이트맵 작성](./06_write_sitemap) 19 | - [레이아웃에 사이트맵 연결](./07_link_sitemap) 20 | - [페이지 모듈에 레이아웃 연결](./08_link_layout) 21 | - [페이지 생성](./08_link_layout/make_page) 22 | - [페이지 확인](./08_link_layout/confirm_page) 23 | - [페이지 수정](./08_link_layout/edit_page) 24 | 25 | 이 장에서는 예제 레이아웃 스킨을 사용해서 레이아웃 스킨을 만들고 적용하는 방법을 설명합니다. 26 | -------------------------------------------------------------------------------- /Skin_Base/01_understand_html/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - HTML의 이해 4 | - [요소와 속성, 값](./element_attribute_and_value) 5 | - [HTML의 시작과 끝](./start_and_end_of_html) 6 | - [부모 요소와 자식 요소](./parent_and_child_element) 7 | - [인라인 요소와 블록 요소](./inline_and_block_element) 8 | - [CSS의 이해](../02_understand_css) 9 | - [선택자와 속성, 값](../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../04_template_grammar) 18 | - [변수](../04_template_grammar/variables) 19 | - [XE core 변수](../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../04_template_grammar/condition_grammar) 21 | - [반복문](../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../04_template_grammar/use_php_grammar) 23 | - [include문](../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../04_template_grammar/block_template_grammar) 29 | 30 | ## HTML의 이해 31 | 32 | HTML은 데이터에 **의미**를 부여해서 무질서한 데이터를 유용한 **정보**로 바꾸는 힘이 있습니다. HTML 문서를 배치하고 꾸미려면 CSS를 사용해야 합니다. 데이터의 **의미**와 **표현**을 잘 구별해서 적합한 언어를 사용하여 HTML을 작성하면 다른 사람이 쉽게 이해하고 편집할 수 있습니다. 문서의 **표현**을 CSS로 분리한다면 디자인을 바꾸기 위해 HTML을 편집해야 하는 수고를 덜 수 있습니다. 33 | -------------------------------------------------------------------------------- /Skin_Base/01_understand_html/element_attribute_and_value/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../) 4 | - 요소와 속성, 값 5 | - [HTML의 시작과 끝](../start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../../04_template_grammar) 18 | - [변수](../../04_template_grammar/variables) 19 | - [XE core 변수](../../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../../04_template_grammar/condition_grammar) 21 | - [반복문](../../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../../04_template_grammar/use_php_grammar) 23 | - [include문](../../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../../04_template_grammar/block_template_grammar) 29 | 30 | ## 요소와 속성, 값 31 | 32 | HTML은 요소와 속성, 값으로 구성되어 있습니다. 33 | 34 | **요소(Element)** 35 | 36 | ```html 37 |

    XE

    38 | ``` 39 | 40 | `

    `로 시작해서 `

    `로 끝나는 전체가 **요소**입니다. 이 요소는 **`

    ` 요소**라고 지칭하며, `

    `과 `

    `은 각각 **시작 태그**와 **종료 태그**라고 부릅니다. 그 사이에 있는 **XE**는 이 요소의 **내용(contents)**이라고 합니다. 41 | 42 | **h**는 제목을 의미하는 **heading**의 약어로서 많은 태그가 이렇게 약어를 사용합니다. 숫자는 제목의 단계를 표시하고 **1**이면 최상위 수준의 제목입니다. 대부분의 웹 브라우저는 제목을 크고 굵게 표현하는데, 웹 제작자는 단순히 글꼴을 크고 굵게 표현하기 위하여 이 요소를 사용해서는 안 됩니다. 데이터에 아무런 의미를 부여하지 않고 크고 굵게 만드는 것은 **표현**에 해당하기 때문에 CSS로 처리해야 합니다. 43 | 44 | **속성(Attribute)** 45 | 46 | ```html 47 |

    XE

    48 | ``` 49 | 50 | 이 코드에서 **title**은 속성입니다. **속성**은 현재의 요소가 다른 요소와 어떤 차이가 있는지 나타냅니다. **title** 속성은 현재 요소의 의미를 부연 설명하는 **참고 제목** 역할을 합니다. HTML 요소마다 사용할 수 있는 속성이 다르게 규정되어 있습니다. 51 | 52 | **값(Value)** 53 | 54 | ```html 55 |

    XE

    56 | ``` 57 | 58 | 속성에는 반드시 **값**이 있습니다. **Xpress Engine**은 **title** 속성의 값입니다. 값은 현재의 **요소**가 어떤 **속성**을 지녔는지 구체적으로 정의하며, 화면 표시에 직접 영향을 주기도 합니다. 속성에 따라 잘못된 값을 입력하면 화면이 제대로 표시되지 않을 수도 있습니다. 값은 속성에 따라서 이미 정해져 있기도 하지만, 어떤 속성의 값은 사용자가 정의해야 합니다. **Xpress Engine**은 사용자 정의 값에 해당합니다. 59 | -------------------------------------------------------------------------------- /Skin_Base/01_understand_html/inline_and_block_element/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../) 4 | - [요소와 속성, 값](../element_attribute_and_value) 5 | - [HTML의 시작과 끝](../start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../parent_and_child_element) 7 | - 인라인 요소와 블록 요소 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../../04_template_grammar) 18 | - [변수](../../04_template_grammar/variables) 19 | - [XE core 변수](../../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../../04_template_grammar/condition_grammar) 21 | - [반복문](../../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../../04_template_grammar/use_php_grammar) 23 | - [include문](../../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../../04_template_grammar/block_template_grammar) 29 | 30 | ## 인라인 요소와 블록 요소 31 | 32 | 블록 요소는 **하나의 독립된 덩어리**로 취급하며 줄을 바꿔서 표현합니다. `
    ` `` `

    ` 요소 등이 블록 요소에 해당합니다. 인라인 요소는 **행 안의 일부**로서 줄 바꿈 없이 연속으로 표현합니다. `` `` `` 요소 등이 대표적인 인라인 요소입니다. 33 | 34 | 블록 요소는 인라인 요소를 포함할 수 있지만 인라인 요소는 블록 요소를 포함할 수 없습니다. 어떤 요소가 블록이고 어떤 요소가 인라인인지는 HTML 규격을 보면 알 수 있습니다. 35 | 36 | 다음은 블록 요소가 인라인 요소를 감싸고 있는 올바른 마크업입니다. `

    ` 요소는 블록 요소이고 `` 요소는 인라인 요소입니다. 37 | 38 | ```html 39 |

    XE

    40 | ``` 41 | 42 | 다음은 인라인 요소가 블록 요소를 감싸고 있는 잘못된 마크업입니다. 43 | 44 | ```html 45 |

    XE

    46 | ``` 47 | -------------------------------------------------------------------------------- /Skin_Base/01_understand_html/parent_and_child_element/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../) 4 | - [요소와 속성, 값](../element_attribute_and_value) 5 | - [HTML의 시작과 끝](../start_and_end_of_html) 6 | - 부모 요소와 자식 요소 7 | - [인라인 요소와 블록 요소](../inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../../04_template_grammar) 18 | - [변수](../../04_template_grammar/variables) 19 | - [XE core 변수](../../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../../04_template_grammar/condition_grammar) 21 | - [반복문](../../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../../04_template_grammar/use_php_grammar) 23 | - [include문](../../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../../04_template_grammar/block_template_grammar) 29 | 30 | ## 부모 요소와 자식 요소 31 | 32 | HTML에서 요소는 다른 요소를 포함할 수 있습니다. 33 | 34 | 예를 들어, 제목 `XE`를 클릭하면 초기 화면으로 이동하는 콘텐츠를 작성해 보겠습니다. 35 | 36 | ```html 37 |

    38 | XE 39 |

    40 | ``` 41 | 42 | `

    ` 요소 안에 `` 요소가 포함되어 있습니다. 이와 같이 하나의 데이터는 여러 개의 요소로 중첩할 수 있습니다. 이때 `

    ` 요소와 같이 바깥쪽에 있는 요소를 **부모 요소**라 부르고, `` 요소와 같이 안쪽에 있는 요소를 **자식 요소**라 부릅니다. 43 | 44 | `` 요소는 데이터가 다른 자원을 참조하도록 연결합니다. href 속성은 `` 요소 안에서 참조 대상을 지정합니다. 즉, 위의 예제 코드는 **XE라는 데이터는 최상위 수준 제목이며 index.html을 참조하고 있다**라는 것을 정의합니다. 45 | 46 | 단, 요소를 중첩해서 사용할 때는 시작 태그와 종료 태그의 사용 순서를 지켜야 합니다. 다음과 같이 선언하는 것은 중첩 규칙을 어긴 잘못된 예입니다. 47 | 48 | ```html 49 |

    50 | XE

    51 | 52 | ``` 53 | -------------------------------------------------------------------------------- /Skin_Base/01_understand_html/start_and_end_of_html/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../) 4 | - [요소와 속성, 값](../element_attribute_and_value) 5 | - HTML의 시작과 끝 6 | - [부모 요소와 자식 요소](../parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../../04_template_grammar) 18 | - [변수](../../04_template_grammar/variables) 19 | - [XE core 변수](../../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../../04_template_grammar/condition_grammar) 21 | - [반복문](../../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../../04_template_grammar/use_php_grammar) 23 | - [include문](../../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../../04_template_grammar/block_template_grammar) 29 | 30 | ## HTML의 시작과 끝 31 | 32 | 모든 HTML 요소에는 데이터의 범위를 명시하기 위하여 시작과 끝이 있습니다. 33 | 34 | ```html 35 |

    XE

    36 | ``` 37 | 38 | - 이 요소의 시작은 `

    `입니다. 여기서부터 첫 번째 제목이 시작됩니다. 39 | - 이 요소의 끝은 `

    `입니다. 첫 번째 제목은 여기서 끝납니다. 40 | 41 | 텍스트 콘텐츠가 아닌 경우 HTML 요소 자체가 데이터가 되는 경우도 있는데 이런 경우는 시작과 동시에 끝납니다. 다음과 같은 경우 이미지가 다른 콘텐츠를 포함하지 않으므로 시작과 동시에 닫습니다. 42 | 43 | ```html 44 | 45 | ``` 46 | -------------------------------------------------------------------------------- /Skin_Base/02_understand_css/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../01_understand_html) 4 | - [요소와 속성, 값](../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../01_understand_html/inline_and_block_element) 8 | - CSS의 이해 9 | - [선택자와 속성, 값](./selector_attribute_and_value) 10 | - [CSS 선택자의 종류](./type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../04_template_grammar) 18 | - [변수](../04_template_grammar/variables) 19 | - [XE core 변수](../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../04_template_grammar/condition_grammar) 21 | - [반복문](../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../04_template_grammar/use_php_grammar) 23 | - [include문](../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../04_template_grammar/block_template_grammar) 29 | 30 | ## CSS의 이해 31 | 32 | HTML이 웹 문서에 **의미**를 부여해서 데이터를 **정보**로 바꾼다면 CSS는 문서의 **배치와 표현**에 관여하여 콘텐츠를 이해하기 쉽고 보기 좋게 만듭니다. XE 스킨에서 대부분의 경우 CSS 파일은 HTML과 분리되어 있지만 HTML 문서가 CSS 파일을 참조하고 있기 때문에 사용자는 HTML과 CSS가 모두 반영된 최종 화면을 보게 됩니다. CSS 문법을 익히면 문서를 보기 좋게 꾸밀 수 있을 뿐만 아니라 HTML을 더 의미 있고 적법하게 사용할 수 있습니다. 33 | -------------------------------------------------------------------------------- /Skin_Base/02_understand_css/selector_attribute_and_value/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../) 9 | - 선택자와 속성, 값 10 | - [CSS 선택자의 종류](../type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../../04_template_grammar) 18 | - [변수](../../04_template_grammar/variables) 19 | - [XE core 변수](../../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../../04_template_grammar/condition_grammar) 21 | - [반복문](../../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../../04_template_grammar/use_php_grammar) 23 | - [include문](../../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../../04_template_grammar/block_template_grammar) 29 | 30 | ## 선택자와 속성, 값 31 | 32 | CSS는 **선택자**와 **속성**과 **값**으로 구성되어 있습니다. **선택자**는 HTML의 특정 **요소**를 선택하고 **속성**과 **값**은 선택된 HTML 요소가 화면에 어떻게 출력될 것인지를 정의합니다. 33 | 34 | **선택자(selector)** 35 | 36 | ```css 37 | h1 {font-size:24px} 38 | ``` 39 | 40 | **h1**은 **선택자**입니다. `

    ` 요소를 가리킵니다. 41 | 42 | **속성(property)** 43 | 44 | ```css 45 | h1 {font-size:24px} 46 | ``` 47 | 48 | **font-size**는 **속성**입니다. `

    ` 요소의 글꼴 크기를 제어하는 선언입니다. 49 | 50 | **값(value)** 51 | 52 | ```css 53 | h1 {font-size:24px} 54 | ``` 55 | 56 | **24px**은 **값**입니다. `

    ` 요소의 `font-size` 속성(글꼴 크기) 값을 구체적으로 명시합니다. 57 | -------------------------------------------------------------------------------- /Skin_Base/03_use_javascript_and_jquery/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../01_understand_html) 4 | - [요소와 속성, 값](../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../02_understand_css) 9 | - [선택자와 속성, 값](../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../02_understand_css/type_of_selector) 11 | - 자바스크립트와 jQuery 라이브러리 사용 12 | - [jQuery 라이브러리 포함](./include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](./init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](./init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](./run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](./practice_jquery) 17 | - [XE 템플릿 문법](../04_template_grammar) 18 | - [변수](../04_template_grammar/variables) 19 | - [XE core 변수](../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../04_template_grammar/condition_grammar) 21 | - [반복문](../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../04_template_grammar/use_php_grammar) 23 | - [include문](../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../04_template_grammar/block_template_grammar) 29 | 30 | ## 자바스크립트와 jQuery 라이브러리 사용 31 | 32 | XE는 자바스크립트를 쉽게 사용할 수 있도록 jQuery라는 자바스크립트 라이브러리를 사용하고 있습니다. jQuery를 사용하면 스킨 제작자가 자바스크립트 전문가가 아닌 경우에도 자바스크립트를 쉽게 다룰 수 있습니다. 33 | 34 | 이 절에서는 XE 스킨을 제작할 때 HTML 문서에 자바스크립트를 포함시키는 방법을 설명합니다. 35 | -------------------------------------------------------------------------------- /Skin_Base/03_use_javascript_and_jquery/include_jquery/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../) 12 | - jQuery 라이브러리 포함 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../practice_jquery) 17 | - [XE 템플릿 문법](../../04_template_grammar) 18 | - [변수](../../04_template_grammar/variables) 19 | - [XE core 변수](../../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../../04_template_grammar/condition_grammar) 21 | - [반복문](../../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../../04_template_grammar/use_php_grammar) 23 | - [include문](../../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../../04_template_grammar/block_template_grammar) 29 | 30 | ## jQuery 라이브러리 포함 31 | 32 | XE core에는 이미 jQuery 라이브러리가 포함되어 있고 모든 페이지에서 참조하도록 선언되기 때문에 별도로 jQuery 라이브러리를 불러오는 선언을 할 필요가 없습니다. XE로 생성된 모든 웹 문서에는 HTML 코드의 요소 안쪽에 다음과 같이 jQuery 라이브러리 참조 코드가 포함됩니다. 33 | 34 | ```html 35 | 36 | ``` 37 | 38 | 자바스크립트 참조 코드는 문법적으로 HTML 코드의 `` 요소 또는 `` 요소 안쪽의 어느 곳에도 포함시킬 수 있지만 XE에서는 jQuery 라이브러리 참조 코드를 HTML 문서의 `` 요소 안쪽에 포함시키고 있습니다. 웹 브라우저는 자바스크립트 코드를 선언된 순서대로 해석하는데 자바스크립트 코드의 해석 순서가 화면 표시에 영향을 미치는 경우가 있습니다. HTML 해석과 동시에 즉시 결과를 실행해야 하는 jQuery 의존 코드가 있는 경우 jQuery 라이브러리보다 먼저 해석되면 안 되기 때문에 XE는 jQuery 라이브러리 참조 선언을 HTML 문서의 `` 요소 안쪽에 포함한 것입니다. 39 | 40 | > *XE 설치 경로에 따라 jquery.js 파일의 참조 경로는 보기와 다를 수 있습니다.* 41 | -------------------------------------------------------------------------------- /Skin_Base/03_use_javascript_and_jquery/init_javascript_with_standard_grammar/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../) 12 | - [jQuery 라이브러리 포함](../include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../init_javascript_with_template_grammar) 14 | - 표준 문법으로 자바스크립트 선언 15 | - [HTML 해석 이후 jQuery 실행](../run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../practice_jquery) 17 | - [XE 템플릿 문법](../../04_template_grammar) 18 | - [변수](../../04_template_grammar/variables) 19 | - [XE core 변수](../../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../../04_template_grammar/condition_grammar) 21 | - [반복문](../../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../../04_template_grammar/use_php_grammar) 23 | - [include문](../../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../../04_template_grammar/block_template_grammar) 29 | 30 | ## 표준 문법으로 자바스크립트 선언 31 | 32 | 별도로 작성된 자바스크립트 파일을 HTML 문서에서 불러오는 경우 XE 템플릿 문법을 사용하면 HTML 문서의 `` 요소 또는 `` 요소의 종료 지점 가운데 선언 위치를 선택할 수 있습니다. 그러나 `` 요소의 종료 지점이 아니라 `` 요소 내부의 원하는 위치에 정확하게 삽입하려면 삽입을 원하는 위치에 다음과 같이 HTML 표준 문법으로 선언합니다. 33 | 34 | ```html 35 | 36 | ... 37 | 38 | ... 39 | 40 | ``` 41 | 42 | 별도의 자바스크립트 파일을 작성하지 않고 HTML 문서에서 직접 자바스크립트 코드를 작성하려면 다음과 같이 선언합니다. 43 | 44 | ```html 45 | 46 | ... 47 | 52 | ... 53 | 54 | ``` 55 | 56 | > 자바스크립트 코드의 시작과 종료 지점에 ``를 선언하는 것은 자바스크립트 코드에 포함된 문자들이 HTML 코드로 해석되는 것을 방지하기 위한 것입니다. ``를 선언하지 않으면 꺾은 괄호(<, >)와 각종 자바스크립트 연산자가 문자 그대로 해석되지 않고 HTML 태그가 시작되거나 HTML 엔티티가 시작되는 것으로 잘못 해석될 수 있습니다. `` 선언은 자바스크립트 문법이 아니기 때문에 선언된 라인을 한 줄 주석으로 처리합니다. 57 | -------------------------------------------------------------------------------- /Skin_Base/03_use_javascript_and_jquery/init_javascript_with_template_grammar/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../) 12 | - [jQuery 라이브러리 포함](../include_jquery) 13 | - XE 템플릿 문법으로 자바스크립트 선언 14 | - [표준 문법으로 자바스크립트 선언](../init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../practice_jquery) 17 | - [XE 템플릿 문법](../../04_template_grammar) 18 | - [변수](../../04_template_grammar/variables) 19 | - [XE core 변수](../../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../../04_template_grammar/condition_grammar) 21 | - [반복문](../../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../../04_template_grammar/use_php_grammar) 23 | - [include문](../../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../../04_template_grammar/block_template_grammar) 29 | 30 | ## XE 템플릿 문법으로 자바스크립트 선언 31 | 32 | jQuery 코드는 자바스크립트이기 때문에 자바스크립트 문법에 따라 작성해야 합니다. 자바스크립트의 선언 위치는 HTML 문서의 `` 요소 또는 `` 요소 안쪽이어야 하며 이 밖의 위치에 선언하면 HTML 문법 오류가 발생합니다. HTML 문법이 허용하지 않는 위치에 자바스크립트 코드를 작성하면 표준에 따라 엄격하게 구현된 브라우저에서는 자바스크립트를 해석하지 못할 수도 있습니다. 자바스크립트 코드를 HTML 문서에 직접 포함하는 방법도 있지만 별도의 `*.js` 파일로 분리하여 HTML 문서에서 불러오는 방법도 있습니다. 33 | 34 | 자바스크립트는 용도에 따라 다음과 같이 선언 위치를 구분해서 사용합니다. 35 | 36 | **`` 요소에서 JS 파일 참조** 37 | 38 | 웹 브라우저가 화면 표시를 끝내기 전에 자바스크립트로 사용자 화면의 일부 콘텐츠를 보여주거나 감추는 동작을 실행한다면 자바스크립트 코드를 HTML 문서의 `` 요소 위치에 포함하는 것이 좋습니다. 이런 경우 자바스크립트 코드를 `` 요소에 포함하면 자바스크립트가 HTML보다 늦게 해석되어 일시적으로 화면이 제대로 보이지 않을 수 있습니다. 39 | 40 | `` 요소에 포함된 자바스크립트는 HTML 문서보다 먼저 해석되지만 HTML 문서의 로딩이 완료된 이후에 실행하도록 코드를 작성해야 합니다. 41 | 42 | **`` 요소에서 JS 파일 참조** 43 | 44 | 자바스크립트가 HTML 문서를 로딩하는 시점에 화면 표시를 위한 어떤 동작을 실행하지 않는다면 HTML 문서의 `` 요소에 포함하되 가장 아래쪽에 선언하는 것이 좋습니다. 웹 브라우저는 HTML 코드와 자바스크립트 코드를 동시에 해석하지 않고 작성된 순서대로 해석하기 때문에 자바스크립트 코드를 나중에 해석하도록 하면 HTML 문서를 화면에 표시하는 속도가 빨라집니다. 45 | -------------------------------------------------------------------------------- /Skin_Base/03_use_javascript_and_jquery/run_jquery_after_html_loading/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../) 12 | - [jQuery 라이브러리 포함](../include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../init_javascript_with_standard_grammar) 15 | - HTML 해석 이후 jQuery 실행 16 | - [jQuery의 동작 방식 실습](../practice_jquery) 17 | - [XE 템플릿 문법](../../04_template_grammar) 18 | - [변수](../../04_template_grammar/variables) 19 | - [XE core 변수](../../04_template_grammar/variables_of_xe_core) 20 | - [조건문](../../04_template_grammar/condition_grammar) 21 | - [반복문](../../04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](../../04_template_grammar/use_php_grammar) 23 | - [include문](../../04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](../../04_template_grammar/css_reference) 25 | - [JS 파일 참조](../../04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](../../04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](../../04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](../../04_template_grammar/block_template_grammar) 29 | 30 | ## HTML 해석 이후 jQuery 실행 31 | 32 | XE로 생성된 모든 문서는 jQuery 라이브러리를 참조하기 때문에 ` 44 | ``` 45 | 46 | > jQuery 문법에서 `jQuery`는 `달러 기호($)`로 치환하여 표기할 수 있습니다. 그러나 XE는 `$` 기호를 사용하는 다른 자바스크립트 라이브러리와의 충돌을 피하기 위하여 jQuery 함수를 시작하는 부분에서만큼은 `$` 기호로 치환하는 것을 허락하지 않습니다. 따라서 XE에서는 jQuery 함수를 처음 작성할 때 `jQuery(function($){ ... })`라고 작성해야 합니다. 47 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../01_understand_html) 4 | - [요소와 속성, 값](../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../02_understand_css) 9 | - [선택자와 속성, 값](../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../03_use_javascript_and_jquery/practice_jquery) 17 | - XE 템플릿 문법 18 | - [변수](./variables) 19 | - [XE core 변수](./variables_of_xe_core) 20 | - [조건문](./condition_grammar) 21 | - [반복문](./loop_grammar) 22 | - [간단한 PHP문 사용](./use_php_grammar) 23 | - [include문](./include_grammar) 24 | - [CSS 파일 참조](./css_reference) 25 | - [JS 파일 참조](./js_reference) 26 | - [XML JS 필터 적용](./use_xml_js_filter) 27 | - [위젯 삽입하기](./include_widget) 28 | - [XE 블럭 템플릿 문법](./block_template_grammar) 29 | 30 | ## XE 템플릿 문법 31 | 32 | XE 템플릿 문법은 서버 측에서 PHP 문법으로 해석되며 DB로부터 원하는 정보를 뽑아내어 사용자 화면에 출력합니다. XE 템플릿 문법을 사용하면 모듈 또는 위젯의 기능이나 내용을 허용된 범위 안에서 확장하거나 축소할 수 있습니다. 33 | 34 | XE 템플릿 문법을 적용하여 XE 스킨을 작성하는 방법에는 다음과 같은 네 가지가 있습니다. 35 | 36 | - HTML 주석 `` 안에 작성하는 방법. 예) `...` 37 | - 가상의 `` 요소 안에 작성하는 방법. 예) `...` 38 | - HTML 요소에 직접 작성하는 방법. 예) `

    ...

    ` 39 | - 주석이나 요소에 의존하지 않고 작성하는 방법. 예) {$content} 내용 변수로 데이터를 출력함. 40 | 41 | > `` 요소는 HTML 표준 요소가 아니라 XE core만의 가상의 요소입니다. HTML 요소의 형식을 빌려 쓰고는 있지만 제어문을 실행할 뿐 실제로 화면에 요소가 출력되지는 않습니다. cond 속성 또한 XE core만의 가상의 속성으로서 조건문 역할을 합니다. 42 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/block_template_grammar/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - [변수](../variables) 19 | - [XE core 변수](../variables_of_xe_core) 20 | - [조건문](../condition_grammar) 21 | - [반복문](../loop_grammar) 22 | - [간단한 PHP문 사용](../use_php_grammar) 23 | - [include문](../include_grammar) 24 | - [CSS 파일 참조](../css_reference) 25 | - [JS 파일 참조](../js_reference) 26 | - [XML JS 필터 적용](../use_xml_js_filter) 27 | - [위젯 삽입하기](../include_widget) 28 | - XE 블럭 템플릿 문법 29 | 30 | ## XE 블럭 템플릿 문법 31 | 32 | **조건식이 참이면 포함된 내용을 출력** 33 | 34 | ```html 35 | 36 |

    Welcome XE!

    37 |
    38 | ``` 39 | 40 | **조건식이 참이면 `

    ` 요소와 함께 포함된 내용을 출력** 41 | 42 | ```html 43 |

    44 | Welcome XE! 45 |

    46 | ``` 47 | 48 | **`

    ` 요소는 무조건 출력하는데 조건식이 참이면 `attr="value"` 속성과 값을 함께 출력** 49 | 50 | ```html 51 |

    52 | Welcome XE! 53 |

    54 | ``` 55 | 56 | **$key값 없이 `...` 반복** 57 | 58 | ```html 59 | 60 | ... 61 | 62 | ``` 63 | 64 | **$key값 없이 `...` 반복** 65 | 66 | ```html 67 | ... 68 | ``` 69 | 70 | **$key값 포함 `...` 반복** 71 | 72 | ```html 73 | 74 | ... 75 | 76 | ``` 77 | 78 | **$key값 포함 `...` 반복** 79 | 80 | ```html 81 | ... 82 | ``` 83 | 84 | **초기값 0부터 시작하여 `...` 100회 반복** 85 | 86 | ```html 87 | 88 | ... 89 | 90 | ``` 91 | 92 | **초기값 0부터 시작하여 `...` 100회 반복** 93 | 94 | ```html 95 | ... 96 | ``` 97 | 98 | **header.html을 포함(include)** 99 | 100 | ```html 101 | 102 | ``` 103 | 104 | **CSS/JS/SML JS 필터 파일을 ``에 포함** 105 | 106 | ```html 107 | 108 | ``` 109 | 110 | **JS/XML JS 필터 파일을 문서 ``에 포함** 111 | 112 | ```html 113 | 114 | ``` 115 | 116 | **경로가 일치하는 CSS/JS/XML JS 필터 파일을 제외** 117 | 118 | ```html 119 | 120 | ``` 121 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/condition_grammar/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - [변수](../variables) 19 | - [XE core 변수](../variables_of_xe_core) 20 | - 조건문 21 | - [반복문](../loop_grammar) 22 | - [간단한 PHP문 사용](../use_php_grammar) 23 | - [include문](../include_grammar) 24 | - [CSS 파일 참조](../css_reference) 25 | - [JS 파일 참조](../js_reference) 26 | - [XML JS 필터 적용](../use_xml_js_filter) 27 | - [위젯 삽입하기](../include_widget) 28 | - [XE 블럭 템플릿 문법](../block_template_grammar) 29 | 30 | ## 조건문 31 | 32 | 주어진 조건에 따라 필요한 내용을 문맥에 알맞게 출력하거나 출력하지 않아야 할 때 조건문이 필요합니다. 조건문은 `if` `elseif` `else` `end`와 **조건식**으로 이루어져 있습니다. if문이 시작되면 반드시 end문으로 닫아서 조건문이 끝났음을 선언해야 합니다. 조건식 내용은 PHP로 해석되기 때문에 PHP에서 사용 가능한 여러 가지 연산자(&&, ||, ==, ! 등)를 사용할 수도 있습니다. 33 | 34 | 다음은 “Welcome XE!"라는 문장을 표현하는 다양한 조건문 사용법입니다. 35 | 36 | **조건식이 참이면 포함된 내용을 출력** 37 | 38 | ```html 39 | 40 |

    Welcome XE!

    41 | 42 | ``` 43 | 44 | **조건식이 참이면 포함된 내용을 출력** 45 | 46 | ```html 47 | 48 |

    Welcome XE!

    49 |
    50 | ``` 51 | 52 | **조건식이 참이면 `

    ` 요소와 함께 포함된 내용을 출력** 53 | 54 | ```html 55 |

    56 | Welcome XE! 57 |

    58 | ``` 59 | 60 | **`

    ` 요소는 무조건 출력하는데 조건식이 참이면 `attr="value"` 속성과 값을 출력** 61 | 62 | ```html 63 |

    64 | Welcome XE! 65 |

    66 | ``` 67 | 68 | > `` 요소는 HTML 표준 요소가 아니라 XE core만의 가상의 요소입니다. HTML 요소의 형식을 빌려 쓰고는 있지만 제어문을 실행할 뿐 실제로 화면에 요소가 출력되지는 않습니다. cond 속성 또한 XE core만의 가상의 속성으로서 조건문 역할을 합니다. `if` `elseif` `else`문을 동시에 사용하면 참 또는 거짓뿐만 아니라 여러 가지 조건을 부여하고 조건에 따라 다른 결과를 출력할 수 있습니다. 69 | 70 | > ```html 71 | 72 |

    조건A를 만족하면 이 문장을 출력합니다.

    73 | 74 |

    조건A를 만족하지 못하고 조건B를 만족하면 이 문장을 출력합니다.

    75 | 76 |

    조건A, 조건B를 동시에 만족하지 못하면 이 문장을 출력합니다.

    77 | 78 | ``` 79 | > 위와 같은 조건식을 XE core 1.4.4 버전부터 새로 추가된 `cond` 조건식으로 바꾸면 다음과 같이 더 단순하게 표현할 수 있습니다. 80 | > ```html 81 |

    조건A를 만족하면 이 문장을 출력합니다.

    82 |

    조건B를 만족하면 이 문장을 출력합니다.

    83 |

    조건A, 조건B를 동시에 만족하지 못하면 이 문장을 출력합니다.

    84 | ``` 85 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/css_reference/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - [변수](../variables) 19 | - [XE core 변수](../variables_of_xe_core) 20 | - [조건문](../condition_grammar) 21 | - [반복문](../loop_grammar) 22 | - [간단한 PHP문 사용](../use_php_grammar) 23 | - [include문](../include_grammar) 24 | - CSS 파일 참조 25 | - [JS 파일 참조](../js_reference) 26 | - [XML JS 필터 적용](../use_xml_js_filter) 27 | - [위젯 삽입하기](../include_widget) 28 | - [XE 블럭 템플릿 문법](../block_template_grammar) 29 | 30 | ## CSS 파일 참조 31 | 32 | CSS 파일을 HTML 문서에서 참조하는 방법을 설명합니다. 33 | 34 | **CSS 참조** 35 | 36 | ```html 37 | 38 | 또는 39 | 40 | ``` 41 | 42 | HTML 문서의 `` 요소에서 `xe.css` 파일을 참조합니다. 결과 코드는 다음과 같습니다. 43 | 44 | ```html 45 | 46 | 47 | 48 | ``` 49 | 50 | CSS 파일은 HTML 문서의 `` 요소에서만 참조할 수 있습니다. `` 요소에서 별도의 CSS 파일을 참조하면 HTML 문법 오류가 발생합니다. 51 | 52 | **media 지정** 53 | 54 | ```html 55 | 56 | ``` 57 | 58 | CSS 파일의 대상이 되는 미디어를 선택하여 지정할 수 있습니다. 결과 코드는 다음과 같습니다. 59 | 60 | ```html 61 | 62 | 63 | 64 | ``` 65 | 66 | media 속성의 값에 쉼표를 사용하면 여러 개의 값을 지정할 수 있습니다. 기본값은 all입니다. 사용 가능한 값은 다음과 같습니다. 67 | 68 | |속성 값|설명| 69 | |---|---| 70 | |all|media를 지정하지 않았을 때의 기본값. 모든 출력 장치에 대응| 71 | |aural|음성 출력 장치(스크린 리더)| 72 | |braille|점자 출력기| 73 | |embossed|점자 인쇄기| 74 | |handheld|모바일 장치| 75 | |print|인쇄기| 76 | |projection|투사 장치| 77 | |screen|스크린(모니터)| 78 | |tty|전신 타자기(Tele Type Writer)| 79 | |tv|텔레비전| 80 | 81 | CSS media 속성을 지정할 때에는 의도하는 장치가 CSS 표준을 준수하는지 반드시 확인해야 합니다. 장치가 지원하지 않으면 지정한 media 속성은 적용되지 않습니다. 82 | 83 | **IE 조건부 주석 사용** 84 | 85 | ```html 86 | 87 | ``` 88 | 89 | targetie 속성을 사용하면 CSS 파일을 IE의 특정 브라우저 버전에서만 해석할 수 있도록 조건부 주석으로 출력합니다. 결과 코드는 다음과 같습니다. 90 | 91 | ```html 92 | 95 | ``` 96 | 97 | 이 코드는 모든 브라우저에서 주석으로 처리하지만 IE 6 브라우저는 주석으로 처리하지 않고 해석합니다. 98 | 99 | **CSS 파일 참조 선언 순서 변경** 100 | 101 | ```html 102 | 103 | ``` 104 | 105 | index 속성을 사용하면 CSS 파일의 선언 순서를 변경할 수 있습니다. 106 | 107 | index 속성의 값은 양의 정수 또는 음의 정수를 사용할 수 있습니다. 음의 정수를 사용하면 더 빨리 선언할 수 있고, 양의 정수를 사용하면 더 늦게 선언할 수 있습니다. index="-1" 값을 지정하면 다른 CSS 파일보다 한 줄 빠른 위치에서 선언됩니다. 108 | 109 | CSS 파일은 동일한 명령이 충돌하는 경우 나중에 선언된 값이 우선순위를 갖게 되기 때문에 우선순위를 높게 두어야 하는 경우 나중에 선언하는 것이 좋습니다. 110 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/include_grammar/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - [변수](../variables) 19 | - [XE core 변수](../variables_of_xe_core) 20 | - [조건문](../condition_grammar) 21 | - [반복문](../loop_grammar) 22 | - [간단한 PHP문 사용](../use_php_grammar) 23 | - include문 24 | - [CSS 파일 참조](../css_reference) 25 | - [JS 파일 참조](../js_reference) 26 | - [XML JS 필터 적용](../use_xml_js_filter) 27 | - [위젯 삽입하기](../include_widget) 28 | - [XE 블럭 템플릿 문법](../block_template_grammar) 29 | 30 | ## include문 31 | 32 | 스킨을 제작할 때 여러 페이지에 걸쳐 반복되는 콘텐츠 블록이 있으면 별도의 파일로 분할하여 관리하는 것이 편리합니다. 하나의 파일만 수정하면 여러 페이지에 한 번에 적용할 수 있기 때문입니다. include는 별도의 파일을 현재 페이지로 불러오는 명령어입니다. 33 | 34 | |include문|설명| 35 | |---|---| 36 | |``|header.html을 포함(include)| 37 | |``|header.html을 포함(include)| 38 | 39 | > `` 요소는 HTML 표준 요소가 아니라 XE core만의 가상의 요소입니다. HTML 요소의 형식을 빌려 쓰고는 있지만 include문을 실행할 뿐 실제로 화면에 `` 요소가 출력되지는 않습니다. `target` 속성 또한 XE core만의 템플릿 문법 중 하나입니다. `target` 속성에는 포함(include)하려는 파일의 경로를 작성합니다. 40 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/include_widget/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - [변수](../variables) 19 | - [XE core 변수](../variables_of_xe_core) 20 | - [조건문](../condition_grammar) 21 | - [반복문](../loop_grammar) 22 | - [간단한 PHP문 사용](../use_php_grammar) 23 | - [include문](../include_grammar) 24 | - [CSS 파일 참조](../css_reference) 25 | - [JS 파일 참조](../js_reference) 26 | - [XML JS 필터 적용](../use_xml_js_filter) 27 | - 위젯 삽입하기 28 | - [XE 블럭 템플릿 문법](../block_template_grammar) 29 | 30 | ## 위젯 삽입하기 31 | 32 | 위젯은 XE core 또는 모듈에 포함된 정보를 사용자에게 의미 있는 형태로 가공해서 보여주는 인터페이스 역할을 합니다. 웹 사이트 초기 화면에 최근 게시물을 나타내는 위젯과 로그인 양식을 보여주는 위젯이 XE core에 포함되어 있습니다. 위젯이 존재하는 이유는 스킨 제작자가 복잡한 프로그램 로직을 모르는 경우에도 쉽게 원하는 기능을 구현할 수 있도록 지원하기 위해서입니다. 33 | 34 | 스킨 제작자는 템플릿 코드 한 줄만으로도 원하는 기능을 구현할 수 있습니다. 위젯을 삽입하기 위한 템플릿 코드는 `` 요소에 widget이라는 속성을 포함하고 있습니다. `` 요소는 HTML 표준이기도 하지만 widget이라는 속성을 포함하게 되면 XE 템플릿 문법으로 해석되어 서버에서 표준 HTML로 변환됩니다. 35 | 36 | 다음은 로그인 양식을 출력하는 위젯 삽입 코드입니다. 37 | 38 | ```html 39 | 40 | ``` 41 | 42 | 위젯을 삽입하기 위한 코드는 XE 관리자 페이지에서 `사이트 설정 > 위젯`을 선택하고 코드생성 기능을 사용하면 자동으로 생성됩니다. 43 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/js_reference/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - [변수](../variables) 19 | - [XE core 변수](../variables_of_xe_core) 20 | - [조건문](../condition_grammar) 21 | - [반복문](../loop_grammar) 22 | - [간단한 PHP문 사용](../use_php_grammar) 23 | - [include문](../include_grammar) 24 | - [CSS 파일 참조](../css_reference) 25 | - JS 파일 참조 26 | - [XML JS 필터 적용](../use_xml_js_filter) 27 | - [위젯 삽입하기](../include_widget) 28 | - [XE 블럭 템플릿 문법](../block_template_grammar) 29 | 30 | ## JS 파일 참조 31 | 32 | JS 파일을 HTML 문서에서 참조하는 방법을 설명합니다. 33 | 34 | JS 파일은 HTML 문서의 `` 요소 또는 `` 요소에서만 불러올 수 있습니다. `` 요소 또는 `` 요소 이외의 요소에서 JS 파일을 참조하면 HTML 문법 오류가 발생하여 JS 파일을 해석하지 못하는 브라우저가 있을 수 있습니다. 35 | 36 | **`` 요소에서 JS 파일 참조** 37 | 38 | 다음은 xe.js 파일을 HTML 문서의 `` 요소에서 불러오는 방법입니다. 39 | 40 | ```html 41 | 42 | 또는 43 | 44 | ``` 45 | 46 | 결과 코드는 다음과 같습니다. 47 | 48 | ```html 49 | 50 | 51 | 52 | ``` 53 | 54 | **`` 요소에서 JS 파일 참조** 55 | 56 | 다음은 xe.js 파일을 HTML 문서의 `` 요소에서 불러오는 방법입니다. 57 | 58 | ```html 59 | 60 | ``` 61 | 62 | `` 요소는 대상 파일을 HTML 문서에서 불러옵니다. 속성과 값은 다음과 같습니다. 63 | 64 | |속성|값|설명| 65 | |---|---|---| 66 | |media|aural, braille, embossed, handheld, print, projection, screen, tty, tv|CSS 파일의 대상이 되는 미디어를 선택하여 지정할 수 있습니다. 쉼표(,)를 이용하여 여러 개의 값을 지정할 수 있습니다. 기본값은 **all**입니다.| 67 | |target|IE 6, IE 7, IE 8, ...|IE 조건부 주석을 사용하여 IE 브라우저 범위 안에서 CSS/JS 적용 브라우저를 선택할 수 있습니다. 기본값은 빈 값으로서 *적용 안 함*입니다.| 68 | |index|정수|CSS/JS 참조 선언의 위치를 변경할 수 있습니다. 값은 양의 정수와 음의 정수를 사용할 수 있습니다. 양의 정수는 현재 위치보다 나중에 선언되고 음의 정수는 현재 위치보다 먼저 선언됩니다. 기본값은 빈 값으로서 선언 순서를 변경하지 않으며 기본값으로 두는 경우 다른 CSS 파일보다 늦게 선언됩니다.| 69 | |type|head, body|JS 참조 선언 위치를 문서의 요소로 할 것인지 `` 요소로 할 것인지 결정할 수 있습니다. 기본값은 **head**로서 생략하는 경우 JS 파일은 문서 `` 요소에 포함됩니다.| 70 | 71 | `` 요소에서 JS 파일을 불러오면 `` 요소가 끝나기 직전에 JS 파일 참조가 선언됩니다. 결과 코드는 다음과 같습니다. 72 | 73 | ```html 74 | 75 | ... 76 | 77 | 78 | ``` 79 | 80 | **IE 조건부 주석 사용** 81 | 82 | ```html 83 | 84 | ``` 85 | 86 | targetie 속성을 사용하면 JS 파일을 IE의 특정 브라우저 버전에서만 해석할 수 있도록 조건부 주석으로 출력합니다. 결과 코드는 다음과 같습니다. 87 | 88 | ```html 89 | 92 | ``` 93 | 94 | 이 코드는 모든 브라우저에서 주석으로 처리하지만 IE 6 브라우저는 주석으로 처리하지 않고 해석합니다. 95 | 96 | **JS 파일 참조 선언 순서 변경** 97 | 98 | ```html 99 | 100 | ``` 101 | 102 | index 속성을 사용하면 JS 파일의 선언 순서를 변경할 수 있습니다. index 속성의 값은 양의 정수 또는 음의 정수를 사용할 수 있습니다. 음의 정수를 사용하면 더 빨리 선언할 수 있고, 양의 정수를 사용하면 더 늦게 선언할 수 있습니다. `index="-1"` 값을 지정하면 다른 CSS 파일보다 한 줄 빠른 위치에서 선언됩니다. 103 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/loop_grammar/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - [변수](../variables) 19 | - [XE core 변수](../variables_of_xe_core) 20 | - [조건문](../condition_grammar) 21 | - 반복문 22 | - [간단한 PHP문 사용](../use_php_grammar) 23 | - [include문](../include_grammar) 24 | - [CSS 파일 참조](../css_reference) 25 | - [JS 파일 참조](../js_reference) 26 | - [XML JS 필터 적용](../use_xml_js_filter) 27 | - [위젯 삽입하기](../include_widget) 28 | - [XE 블럭 템플릿 문법](../block_template_grammar) 29 | 30 | ## 반복문 31 | 32 | 주어진 조건에 따라 필요한 내용을 반복해서 출력해야 할 때 반복문이 필요합니다. 반복문은 `foreach` `end`와 **조건식**으로 이루어져 있습니다. foreach문이 시작되면 반드시 end문으로 닫아서 반복문이 끝났음을 선언해야 합니다. 33 | 34 | **$key값 없이 `...` 반복** 35 | 36 | ```html 37 | 38 | ... 39 | 40 | ``` 41 | 42 | **$key값 없이 `...` 반복** 43 | 44 | ```html 45 | 46 | ... 47 | 48 | ``` 49 | 50 | **$key값 없이 `...` 반복** 51 | 52 | ```html 53 | ... 54 | ``` 55 | 56 | **$key값 포함 `...` 반복** 57 | 58 | ```html 59 | 60 | ... 61 | 62 | ``` 63 | 64 | **$key값 포함 `...` 반복** 65 | 66 | ```html 67 | 68 | ... 69 | 70 | ``` 71 | 72 | **$key값 포함 `...` 반복** 73 | 74 | ```html 75 | ... 76 | ``` 77 | 78 | **초기값 0부터 시작하여 `...` 100회 반복** 79 | 80 | ```html 81 | 82 | ... 83 | 84 | ``` 85 | 86 | **초기값 0부터 시작하여 `...` 100회 반복** 87 | 88 | ```html 89 | 90 | ... 91 | 92 | ``` 93 | 94 | **초기값 0부터 시작하여 `...` 100회 반복** 95 | 96 | ```html 97 | ... 98 | ``` 99 | 100 | **조건문이 참이면 `
  • `를 반복** 101 | *조건문이 "거짓"이 될 수 없다면 무한 반복 오류가 발생할 수 있음* 102 | 103 | ```html 104 | 105 |
  • 106 | 107 | ``` 108 | 109 | > `loop` 속성은 HTML 표준 속성이 아니라 XE core만의 템플릿 문법 중 하나입니다. `loop`는 foreach문의 조건식을 표현할 때 사용하는 가상의 속성입니다. 110 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/use_php_grammar/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - [변수](../variables) 19 | - [XE core 변수](../variables_of_xe_core) 20 | - [조건문](../condition_grammar) 21 | - [반복문](../loop_grammar) 22 | - 간단한 PHP문 사용 23 | - [include문](../include_grammar) 24 | - [CSS 파일 참조](../css_reference) 25 | - [JS 파일 참조](../js_reference) 26 | - [XML JS 필터 적용](../use_xml_js_filter) 27 | - [위젯 삽입하기](../include_widget) 28 | - [XE 블럭 템플릿 문법](../block_template_grammar) 29 | 30 | ## 간단한 PHP문 사용 31 | 32 | XE 스킨 파일에서는 PHP 문법을 사용할 수 없지만, 다음과 같이 중괄호 안에 앳 기호(@)를 포함하면 간단한 PHP 문장을 사용할 수 있습니다. 33 | 34 | ``` 35 | {@$is_logged = Context::get('is_logged')} 36 | ``` 37 | 38 | PHP문을 사용할 때 하나의 문장은 하나의 줄에 작성해야 합니다. 예를 들어 다음과 같은 문장은 PHP에서는 문제가 없지만 XE에서는 치명적인 오류를 내기도 합니다. 여러 개의 문장이 한 줄에 작성되었기 때문입니다. 39 | 40 | ``` 41 | {@$test = 365; $test = $test * $test} 42 | ``` 43 | 44 | 위 문장은 다음과 같이 한 줄에 한 문장씩 작성해야 합니다. 45 | 46 | ``` 47 | {@ 48 | $test = 365; 49 | $test = $test * $test; 50 | } 51 | ``` 52 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/use_xml_js_filter/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - [변수](../variables) 19 | - [XE core 변수](../variables_of_xe_core) 20 | - [조건문](../condition_grammar) 21 | - [반복문](../loop_grammar) 22 | - [간단한 PHP문 사용](../use_php_grammar) 23 | - [include문](../include_grammar) 24 | - [CSS 파일 참조](../css_reference) 25 | - [JS 파일 참조](../js_reference) 26 | - XML JS 필터 적용 27 | - [위젯 삽입하기](../include_widget) 28 | - [XE 블럭 템플릿 문법](../block_template_grammar) 29 | 30 | ## XML JS 필터 적용 31 | 32 | XML JS 필터는 XML 형식으로 입력 항목을 정의해 두면 폼을 전송할 때 유효성 검사를 자동으로 수행하는 기능입니다. 유효성 검사는 XML 기반으로 자동으로 변환된 자바스크립트가 수행하므로 사용자는 복잡한 자바스크립트를 작성할 필요가 없습니다. XML JS 필터는 유효성 검사를 통과한 폼 데이터를 어떤 모듈의 어떤 명령어로 보낼 것인지 정하는 기능도 합니다. 33 | 34 | XML JS 필터를 적용하는 방법은 CSS, JS 파일을 참조하는 문법과 동일합니다. 35 | 36 | ```html 37 | 38 | ``` 39 | 40 | 이렇게 XML JS 필터를 불러오면 XML 문서는 JS 문서로 컴파일되어 소스 코드로 출력됩니다. 출력 결과는 다음과 같습니다. 41 | 42 | ```html 43 | 44 | ... 45 | 46 | 47 | ``` 48 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/variables/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - 변수 19 | - [XE core 변수](../variables_of_xe_core) 20 | - [조건문](../condition_grammar) 21 | - [반복문](../loop_grammar) 22 | - [간단한 PHP문 사용](../use_php_grammar) 23 | - [include문](../include_grammar) 24 | - [CSS 파일 참조](../css_reference) 25 | - [JS 파일 참조](../js_reference) 26 | - [XML JS 필터 적용](../use_xml_js_filter) 27 | - [위젯 삽입하기](../include_widget) 28 | - [XE 블럭 템플릿 문법](../block_template_grammar) 29 | 30 | ## 변수 31 | 32 | 변수는 프로그램에서 미리 선언한 내용을 출력하거나 사용자들이 입력한 내용을 다시 화면에 출력할 때 필요합니다. 사용자 화면에서 볼 수 있는 대부분의 내용이 모두 변수로 출력된 것이라 해도 과언이 아닙니다. 33 | 34 | 변수의 사용 형식은 다음과 같습니다. 35 | 36 | **기본 형식** 37 | 38 | ``` 39 | {$string} 40 | ``` 41 | 42 | 변수의 기본 형식은 중괄호({}) 안에 변수 이름을 적고 변수 이름 앞에 달러 기호($)를 붙이는 것입니다. 변수 이름은 **문자열(string)**로 작성해야 하고 미리 선언된 이름만 사용할 수 있습니다. 43 | 44 | **변수 속의 변수 형식** 45 | 46 | ``` 47 | {$string->string} 48 | {$string->string->string} 49 | ``` 50 | 51 | 변수는 또 다른 변수를 포함하고 있을 수 있는데 이런 변수를 사용하려면 **하이픈과 꺾은 괄호(->)**를 사용하여 변수와 변수를 연결합니다. 52 | 53 | **변수 속의 함수 형식** 54 | 55 | ``` 56 | {$string->string()} 57 | {$string->string(string | integer)} 58 | ``` 59 | 60 | 변수에 함수를 연결하려면 **하이픈과 꺾은 괄호(->)**를 사용합니다. 함수 이름 뒤에는 항상 소괄호(())가 붙습니다. 소괄호에는 함수의 내용으로 문자열(string)이나 정수(integer)를 포함할 수 있습니다. 함수 이름으로는 미리 선언된 이름만 사용할 수 있습니다. 61 | -------------------------------------------------------------------------------- /Skin_Base/04_template_grammar/variables_of_xe_core/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](../../01_understand_html) 4 | - [요소와 속성, 값](../../01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](../../01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](../../01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](../../01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](../../02_understand_css) 9 | - [선택자와 속성, 값](../../02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](../../02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](../../03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](../../03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](../../03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](../../03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](../../03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](../) 18 | - [변수](../variables) 19 | - XE core 변수 20 | - [조건문](../condition_grammar) 21 | - [반복문](../loop_grammar) 22 | - [간단한 PHP문 사용](../use_php_grammar) 23 | - [include문](../include_grammar) 24 | - [CSS 파일 참조](../css_reference) 25 | - [JS 파일 참조](../js_reference) 26 | - [XML JS 필터 적용](../use_xml_js_filter) 27 | - [위젯 삽입하기](../include_widget) 28 | - [XE 블럭 템플릿 문법](../block_template_grammar) 29 | 30 | ## XE core 변수 31 | 32 | **XE core 변수**란 XE core에서 사용하는 변수를 말합니다. XE core 변수는 여러 모듈에서 두루 사용할 수 있습니다. 특정 모듈에서만 사용할 수 있는 변수들도 있는데 이런 변수들은 그냥 **변수**라고 부릅니다. XE core 변수는 다음과 같습니다. 33 | 34 | |변수|설명| 35 | |---|---| 36 | |$is_logged|사용자의 로그인 여부를 확인| 37 | |$current_url|현재 페이지 URL| 38 | |$request_uri|XE core 설치 URL| 39 | |$logged_info|로그인 사용자에게 자신의 회원정보를 보여 줌| 40 | |$logged_info->member_srl|로그인 사용자 고유번호| 41 | |$logged_info->user_id|로그인 사용자 아이디| 42 | |$logged_info->email_address|로그인 사용자 이메일 주소| 43 | |$logged_info->email_id|로그인 사용자 이메일 아이디| 44 | |$logged_info->email_host|로그인 사용자 이메일 호스트| 45 | |$logged_info->user_name|로그인 사용자 이름| 46 | |$logged_info->nick_name|로그인 사용자 닉네임| 47 | |$logged_info->homepage|로그인 사용자 홈페이지| 48 | |$logged_info->blog|로그인 사용자 블로그| 49 | |$logged_info->birthday|로그인 사용자 생년월일 (YYYYMMDD)| 50 | |$logged_info->profile_image|로그인 사용자 프로필 이미지| 51 | |$logged_info->image_name|로그인 사용자 이름 이미지 경로| 52 | |$logged_info->image_mark|로그인 사용자 그룹 이미지 경로| 53 | |$logged_info->signature|로그인 사용자 서명| 54 | |$logged_info->group_list|로그인 사용자 가입 그룹 목록| 55 | |$logged_info->is_admin|로그인 사용자가 관리자인지 확인| 56 | |$logged_info->is_site_admin|로그인 사용자가 가상 사이트 관리자인지 확인| 57 | |$module_info|모듈 정보로서 현재 모듈의 정보를 보여 줌| 58 | |$module_info->module|모듈 이름| 59 | |$module_info->use_mobile|모듈 모바일 스킨 사용 여부| 60 | |$module_info->mid|모듈 아이디| 61 | |$module_info->skin|모듈 스킨 이름| 62 | |$module_info->mskin|모듈 모바일 스킨 이름| 63 | |$module_info->browser_title|모듈 문서 제목| 64 | |$module_info->string|모듈에서 만들어진 확장 변수| 65 | -------------------------------------------------------------------------------- /Skin_Base/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작의 기초 2 | 3 | - [HTML의 이해](./01_understand_html) 4 | - [요소와 속성, 값](./01_understand_html/element_attribute_and_value) 5 | - [HTML의 시작과 끝](./01_understand_html/start_and_end_of_html) 6 | - [부모 요소와 자식 요소](./01_understand_html/parent_and_child_element) 7 | - [인라인 요소와 블록 요소](./01_understand_html/inline_and_block_element) 8 | - [CSS의 이해](./02_understand_css) 9 | - [선택자와 속성, 값](./02_understand_css/selector_attribute_and_value) 10 | - [CSS 선택자의 종류](./02_understand_css/type_of_selector) 11 | - [자바스크립트와 jQuery 라이브러리 사용](./03_use_javascript_and_jquery) 12 | - [jQuery 라이브러리 포함](./03_use_javascript_and_jquery/include_jquery) 13 | - [XE 템플릿 문법으로 자바스크립트 선언](./03_use_javascript_and_jquery/init_javascript_with_template_grammar) 14 | - [표준 문법으로 자바스크립트 선언](./03_use_javascript_and_jquery/init_javascript_with_standard_grammar) 15 | - [HTML 해석 이후 jQuery 실행](./03_use_javascript_and_jquery/run_jquery_after_html_loading) 16 | - [jQuery의 동작 방식 실습](./03_use_javascript_and_jquery/practice_jquery) 17 | - [XE 템플릿 문법](./04_template_grammar) 18 | - [변수](./04_template_grammar/variables) 19 | - [XE core 변수](./04_template_grammar/variables_of_xe_core) 20 | - [조건문](./04_template_grammar/condition_grammar) 21 | - [반복문](./04_template_grammar/loop_grammar) 22 | - [간단한 PHP문 사용](./04_template_grammar/use_php_grammar) 23 | - [include문](./04_template_grammar/include_grammar) 24 | - [CSS 파일 참조](./04_template_grammar/css_reference) 25 | - [JS 파일 참조](./04_template_grammar/js_reference) 26 | - [XML JS 필터 적용](./04_template_grammar/use_xml_js_filter) 27 | - [위젯 삽입하기](./04_template_grammar/include_widget) 28 | - [XE 블럭 템플릿 문법](./04_template_grammar/block_template_grammar) 29 | 30 | XE 스킨 제작에 필요한 HTML과 CSS, 자바스크립트/jQuery, XE 템플릿 문법을 설명합니다. 31 | -------------------------------------------------------------------------------- /Skin_Summary/01_about_skin/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작 개요 2 | 3 | - XE 스킨이란 4 | - [XE 스킨 제작에 필요한 요소](../02_skin_element) 5 | - [HTML(Hyper Text Markup Language)](../02_skin_element/html) 6 | - [CSS(Cascading Style Sheet)](../02_skin_element/css) 7 | - [자바스크립트와 jQuery 라이브러리](../02_skin_element/javascript_and_jquery) 8 | - [XE 템플릿 문법](../02_skin_element/template_grammar) 9 | 10 | ## XE 스킨이란 11 | 12 | 스킨은 XE로 생성한 데이터를 사용자 화면에 표현하는 양식입니다. 모듈, 레이아웃, 위젯, 위젯 스타일에는 스킨이 하나 이상 있습니다. XE 사용자는 [XE 공식 웹 사이트](https://www.xpressengine.com/)에서 제공하는 다양한 스킨을 다운로드해서 사용하거나, 이 문서를 참조해서 자신만의 스킨을 직접 제작할 수 있습니다. 13 | 14 | 모듈과 위젯의 스킨은 해당 모듈이나 위젯이 설치된 디렉터리의 하위에 있는 `skins` 디렉터리에 저장됩니다. 레이아웃과 위젯 스타일의 스킨은 해당 레이아웃과 위젯 스타일이 설치된 디렉터리에 저장됩니다. 15 | -------------------------------------------------------------------------------- /Skin_Summary/02_skin_element/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작 개요 2 | 3 | - [XE 스킨이란](../01_about_skin) 4 | - XE 스킨 제작에 필요한 요소 5 | - [HTML(Hyper Text Markup Language)](./html) 6 | - [CSS(Cascading Style Sheet)](./css) 7 | - [자바스크립트와 jQuery 라이브러리](./javascript_and_jquery) 8 | - [XE 템플릿 문법](./template_grammar) 9 | 10 | ## XE 스킨 제작에 필요한 요소 11 | 12 | XE 스킨을 제작하려면 HTML과 CSS, 자바스크립트, XE 템플릿 문법을 알아야 합니다. 목차를 참고하여 다음 문서를 확인하십시오. 13 | -------------------------------------------------------------------------------- /Skin_Summary/02_skin_element/css/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작 개요 2 | 3 | - [XE 스킨이란](../../01_about_skin) 4 | - [XE 스킨 제작에 필요한 요소](../) 5 | - [HTML(Hyper Text Markup Language)](../html) 6 | - CSS(Cascading Style Sheet) 7 | - [자바스크립트와 jQuery 라이브러리](../javascript_and_jquery) 8 | - [XE 템플릿 문법](../template_grammar) 9 | 10 | ## CSS(Cascading Style Sheet) 11 | 12 | HTML이 웹 페이지의 구조를 담당하는 언어라면 CSS는 표현을 담당하는 언어입니다. 웹 브라우저에는 HTML 요소에 대한 기본적인 표현 양식이 있는데, CSS를 사용하여 이 표현 양식을 더 보기 좋게 바꿀 수 있습니다. 특정 HTML 요소를 선택하고 해당 요소에 CSS 속성을 부여하여 화면에서 배치, 색, 선, 모양, 배경, 이미지 등을 자유롭게 표현할 수 있습니다. 13 | -------------------------------------------------------------------------------- /Skin_Summary/02_skin_element/html/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작 개요 2 | 3 | - [XE 스킨이란](../../01_about_skin) 4 | - [XE 스킨 제작에 필요한 요소](../) 5 | - HTML(Hyper Text Markup Language) 6 | - [CSS(Cascading Style Sheet)](../css) 7 | - [자바스크립트와 jQuery 라이브러리](../javascript_and_jquery) 8 | - [XE 템플릿 문법](../template_grammar) 9 | 10 | ## HTML(Hyper Text Markup Language) 11 | 12 | 웹 페이지의 구조를 만드는 언어입니다. 표현하려는 콘텐츠의 제목, 문단, 목록 등을 HTML 태그로 작성하면 웹 브라우저가 이 태그를 해석해서 웹 페이지로 출력합니다. HTML 문서를 표준 문법에 따라 의미 있게 작성하면 검색 엔진이 웹 문서를 수집하기 좋고 다양한 접근 환경에서 사용할 수 있습니다. 13 | -------------------------------------------------------------------------------- /Skin_Summary/02_skin_element/javascript_and_jquery/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작 개요 2 | 3 | - [XE 스킨이란](../../01_about_skin) 4 | - [XE 스킨 제작에 필요한 요소](../) 5 | - [HTML(Hyper Text Markup Language)](../html) 6 | - [CSS(Cascading Style Sheet)](../css) 7 | - 자바스크립트와 jQuery 라이브러리 8 | - [XE 템플릿 문법](../template_grammar) 9 | 10 | ## 자바스크립트와 jQuery 라이브러리 11 | 12 | HTML, CSS가 정적인 표현을 담당하는 언어라면 자바스크립트는 XE 문서의 동적인 표현을 다룹니다. 자바스크립트를 사용하면 페이지를 이동하지 않고도 사용자의 실행 결과를 즉시 화면에 출력할 수 있습니다. 미리 로딩된 콘텐츠를 상황에 알맞게 화면에 보여주거나 감추고, 사용자의 입력 데이터에 오류가 없는지 즉시 확인해서 오류에 대한 추가 설명을 제공하기도 합니다. XE는 자바스크립트를 쉽게 사용할 수 있도록 jQuery라는 자바스크립트 라이브러리를 사용하고 있습니다. 13 | 14 | 자바스크립트가 모든 환경에서 지원되는 것은 아니므로, HTML만으로 구현할 수 있는 기능을 전적으로 자바스크립트에 의존하여 구현하면 상호 운용성이 떨어집니다. 자바스크립트를 사용할 때는 항상 이를 온전하게 지원하지 못하는 장애 상황도 고려해야 합니다. 15 | -------------------------------------------------------------------------------- /Skin_Summary/02_skin_element/template_grammar/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작 개요 2 | 3 | - [XE 스킨이란](../../01_about_skin) 4 | - [XE 스킨 제작에 필요한 요소](../) 5 | - [HTML(Hyper Text Markup Language)](../html) 6 | - [CSS(Cascading Style Sheet)](../css) 7 | - [자바스크립트와 jQuery 라이브러리](../javascript_and_jquery) 8 | - XE 템플릿 문법 9 | 10 | ## XE 템플릿 문법 11 | 12 | XE 템플릿 문법은 서버에서 PHP 문법으로 해석되며 DB로부터 원하는 정보를 뽑아내어 사용자 화면에 출력합니다. XE 템플릿 문법을 사용하면 모듈 또는 위젯의 기능을 허용된 범위 안에서 확장하거나 축소할 수 있습니다. 13 | -------------------------------------------------------------------------------- /Skin_Summary/README.md: -------------------------------------------------------------------------------- 1 | # XE 스킨 제작 개요 2 | 3 | - [XE 스킨이란](./01_about_skin) 4 | - [XE 스킨 제작에 필요한 요소](./02_skin_element) 5 | - [HTML(Hyper Text Markup Language)](./02_skin_element/html) 6 | - [CSS(Cascading Style Sheet)](./02_skin_element/css) 7 | - [자바스크립트와 jQuery 라이브러리](./02_skin_element/javascript_and_jquery) 8 | - [XE 템플릿 문법](./02_skin_element/template_grammar) 9 | 10 | 이 문서에서는 XE 스킨의 정의와 스킨 제작에 필요한 요소를 설명합니다. 11 | -------------------------------------------------------------------------------- /Tutorial/Lifecycle/README.md: -------------------------------------------------------------------------------- 1 | # XE core 이해하기 2 | 3 | - [개요](../Summary) 4 | - XE 라이프사이클 5 | 6 | ## XE 라이프사이클 7 | 8 | XE 요청 라이프사이클이란 URL에 접속한 순간부터 클라이언트에 응답을 보낸 순간까지 XE가 거치는 일련의 과정을 나타냅니다. 다음은 XE 요청 라이프사이클을 나타낸 그림입니다. 9 | 10 | ![XE 요청 라이프사이클](./img/Lifecycle.png) 11 | 12 | *이 파일의 원본은 [이곳](./doc/Lifecycle.pdf)과 [이곳](./doc/Lifecycle.xml)을 눌러 다운로드 받을 수 있습니다.* 13 | 14 | 개발자는 애드온을 사용해서 이 라이프사이클의 특정 순간에 커스텀 코드를 실행할 수 있습니다. 애드온은 XE 추가 기능의 일종으로서, PHP include 메커니즘으로 작동합니다. 코드가 직접 코어 메서드에 포함되기 때문에 라이프사이클을 조작하는 기능을 구현할 수 있습니다. 애드온에 관한 자세한 설명은 [2.2 애드온]()을 참조하십시오. -------------------------------------------------------------------------------- /Tutorial/Lifecycle/doc/Lifecycle.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Tutorial/Lifecycle/doc/Lifecycle.pdf -------------------------------------------------------------------------------- /Tutorial/Lifecycle/img/Lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xpressengine/xe-tutorial/6996bfde3a9d10619401273c17f165b8617545c8/Tutorial/Lifecycle/img/Lifecycle.png -------------------------------------------------------------------------------- /Tutorial/README.md: -------------------------------------------------------------------------------- 1 | # XE core 이해하기 2 | 3 | - [개요](./Summary) 4 | - [XE 라이프사이클](./Lifecycle) -------------------------------------------------------------------------------- /Tutorial/Summary/README.md: -------------------------------------------------------------------------------- 1 | # XE core 이해하기 2 | 3 | - 개요 4 | - [XE 라이프사이클](../Lifecycle) 5 | 6 | ## 개요 7 | 8 | XE core는 개발자들이 원하는 웹 애플리케이션을 만드는 기반이 되는 프레임워크입니다. XE core는 회원 관리, 문서/댓글뿐만 아니라 DBMS의 종류와 상관없이 데이터를 관리할 수 있는 기능도 제공합니다. XE 자체가 MVC(Model-View-Controller) 구조로 되어 있어 완벽한 SoC(Separation of Concerns)를 구현할 수 있습니다. 9 | 10 | XE 애플리케이션으로 유입되는 모든 요청은 index.php에서 처리합니다. 이 페이지는 요청 컨텍스트를 초기화하고 적절한 모듈을 찾아서 클라이언트(브라우저)로 응답을 보내는 역할을 담당합니다. 11 | 12 | XE의 기능 대부분이 모듈로 이루어져 있습니다. XE는 요청이 들어오면 모듈 이름과 액션 이름(없으면 기본값 사용)을 기준으로 어떤 모듈을 사용할지 정합니다. 예를 들어 관리자 페이지를 표시하려면 URL은 `index.php?module=admin&act=dispBoardAdminContent`가 됩니다. -------------------------------------------------------------------------------- /XML_Query/01_create_schema/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## 테이블 생성하기 23 | 24 | XE의 구성요소 중에서 DB 테이블을 생성할 수 있는 구성요소는 오직 모듈입니다. 위젯, 애드온과 같은 다른 요소는 질의(query)만 할 수 있습니다. 25 | 26 | 테이블을 생성하려면 우선 생성할 테이블의 스키마를 정의해야 합니다. XE는 테이블의 스키마를 정의하기 위해 XML 스키마 정의 언어(XML Schema Language)를 사용합니다. 27 | 28 | XML 스키마 정의 언어로 작성된 테이블 스키마는 테이블당 하나의 XML파일을 가지며, XML파일의 이름은 테이블명과 동일해야 합니다. XML 스키마 파일은 모듈의 schemas 폴더에 저장됩니다. 29 | 30 | XE는 모듈을 설치할 때, 모듈의 schemas 폴더에 등록된 스키마들을 조회하여 테이블을 생성합니다. 31 | 32 | ## XML 스키마 정의 33 | 34 | 35 | ### 테이블 선언 36 | 37 | ``` 38 | 39 | ... 40 |
    41 | ``` 42 | 43 | XML스키마의 최상위 요소(element)는 ``입니다. `name`속성은 테이블명입니다. 44 | 45 | ### 컬럼 선언 46 | 47 | ``` 48 |
    49 | 50 | ... 51 |
    52 | ``` 53 | 54 | ``요소의 자식인 ``요소는 테이블의 컬럼을 정의합니다. 사용가능한 속성은 아래와 같습니다. 55 | 56 | 속성(예시) | 설명 57 | ------------- | ------------- 58 | name="title" | 컬럼명을 지정 59 | type="varchar" | 데이터 타입을 지정, 다음중 하나의 값을 가집니다.
    (number,bignumber,varchar,char,text,bigtext,date,float) 60 | size="11" | 데이터 사이즈를 지정 61 | notnull="notnull" | notnull 여부를 지정 62 | primary_key="primary_key" | 기본키 여부를 지정 63 | index="index_title" | 컬럼에 인덱스를 지정 64 | unique="unique_title" | 컬럼에 unique index를 지정 65 | default="제목없음" | 기본값을 지정 66 | auto_increment="auto_increment" | 자동 증가 컬럼 여부를 지정 67 | 68 | > Note: XML스키마 정의 언어로 복합(다중컬럼) 인덱스는 추가할 수 없습니다. 복합 인덱스를 사용하는 방법은 [TODO:스키마 변경 장 링크]()를 보세요 69 | 70 | -------------------------------------------------------------------------------- /XML_Query/02_alter_schema/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## 테이블 변경하기 (Alter table) 23 | 24 | 테이블을 생성할 때에는 XML 스키마 정의 언어를 사용할 수 있지만, 이미 생성된 테이블을 변경 또는 삭제할 때에는 XML 스키마 정의 언어를 사용할 수는 없습니다. 25 | 26 | XE에서는 테이블을 변경/삭제하기 위하여 DB 클래스를 사용합니다. DB 클래스의 위치는 `./classes/db/DB.class.php`입니다. 다양한 DBMS를 제공 하기위해 `DB`클래스를 확장한 커스텀 `DB`클래스(ex:`./classes/db/DBMysql.class.php`)도 같은 디렉토리에 존재합니다. 27 | 28 | (특히 배포를 목적으로 하는 모듈일 경우) 테이블 변경은 모듈을 업데이트할 때 실행되도록 해야 합니다. 29 | 테이블을 변경하는 코드를 테이블을 소유한 모듈의 `moduleUpdate()` 메소드 안에 넣으십시오. 30 | 31 | 이 메소드는 각 모듈의 기본 클래스에 존재 합니다. 게시판 모듈의 경우, `./modules/board/board.class.php`입니다. 32 | 33 | 34 | > Note: 테이블의 컬럼을 추가, 삭제할 때에는 해당 테이블의 XML 스키마도 동시에 변경해 주어야 합니다. XE는 DB질의(쿼리)를 실행시 XML스키마를 항상 참조합니다. 35 | 36 | --- 37 | 38 | > Note: 테이블 변경은 모듈의 설치 및 업데이트/삭제 사이클과 깊이 연관되어 있습니다. [TODO:모듈 튜토리얼 링크]을 참고하세요. 39 | 40 | 41 | ### DB클래스 가져오기 42 | 43 | ``` 44 | $DB = DB::getInstance(); 45 | ``` 46 | DB클래스의 싱글톤 객체를 가져올 수 있습니다. 47 | 48 | 49 | ### 컬럼 존재여부 확인 50 | 51 | ``` 52 | // $table_name 테이블에 $column_name 컬럼이 존재여부 검사 53 | DB::isColumnExists($table_name, $column_name) 54 | ``` 55 | 컬럼을 추가 삭제하기 전에 컬럼의 존재여부를 확인하세요. 56 | 57 | ``` 58 | // example 59 | 60 | if($DB->isColumnExists('documents', 'is_secret')) 61 | { 62 | ... 63 | } 64 | ``` 65 | 66 | ### 컬럼 추가하기 67 | 68 | ``` 69 | // $table_name 테이블에 $column_name인 컬럼을 추가 70 | DB::addColumn($table_name, $column_name, $type = 'number', $size = '', $default = '', $notnull = false) 71 | ``` 72 | 73 | 컬럼을 추가할 때에는 위의 메소드를 사용하세요. 74 | 75 | 76 | ``` 77 | // example 78 | 79 | $DB->addColumn('documents',"notify_message","char",1); 80 | ``` 81 | 82 | ### 컬럼 삭제하기 83 | 84 | ``` 85 | DB::dropColumn($table_name, $column_name) 86 | ``` 87 | 88 | 89 | ``` 90 | // example 91 | 92 | if($DB->isColumnExists('documents', 'is_secret')) 93 | { 94 | $DB->dropColumn('documents', 'is_secret'); 95 | } 96 | ``` 97 | 98 | ### 인덱스 존재 여부 확인 99 | 100 | ``` 101 | DB::isIndexExists($table_name, $index_name); 102 | ``` 103 | 104 | 105 | ``` 106 | // example 107 | 108 | if(!$DB->isIndexExists("comments", "idx_status")) 109 | { 110 | ... 111 | } 112 | ``` 113 | 114 | 115 | ### 인덱스 추가하기 116 | 117 | ``` 118 | DB::addIndex($table_name, $index_name, $target_columns, $is_unique = false) 119 | ``` 120 | 121 | 단일 인덱스 추가 122 | 123 | ``` 124 | // example 125 | 126 | $DB->addIndex("comments", "idx_voted_count", array("voted_count")); 127 | ``` 128 | 129 | 복합(다중 컬럼) 인덱스 추가 130 | 131 | ``` 132 | // example 133 | 134 | $DB->addIndex("documents", "idx_module_status", array("module_srl","status")); 135 | ``` 136 | 137 | ### 인덱스 삭제하기 138 | 139 | ``` 140 | DB::dropIndex($table_name, $index_name, $is_unique = false) 141 | ``` 142 | 143 | ``` 144 | // example 145 | 146 | $DB->dropIndex("document_extra_vars", "unique_module_vars", true); 147 | ``` 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | -------------------------------------------------------------------------------- /XML_Query/03_xml_query/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## XML 쿼리 기본 23 | 24 | ### XML 쿼리의 작성 25 | 26 | XML 쿼리는 XML 쿼리 정의 언어(XML Query Language)로 작성되며, 하나의 쿼리는 하나의 XML파일에 저장됩니다. 27 | 28 | XML 쿼리 파일은 세가지 경로 중 한 곳에 저장될 수 있습니다. 29 | 30 | * 애드온 디렉토리의 하위 queries 디렉토리 31 | 32 | 예) ./addons/adminlogging/queries/ 33 | 34 | * 모듈 디렉토리의 하위 queries 디렉토리 35 | 36 | 예) ./modules/member/queries/ 37 | 38 | * 위젯 디렉토리의 하위 queries 디렉토리 39 | 40 | 예) ./widgets/content/queries/ 41 | 42 | ### XML 쿼리 ID 43 | 44 | XML 쿼리는 각각 쿼리 ID를 가집니다. XML 쿼리 파일의 파일명은 쿼리의 ID와 동일해야 합니다. 45 | 46 | 쿼리의 최상위 요소(element)는 ``입니다. `` 요소의 `id`속성에 쿼리의 ID가 명시되어야 합니다. 47 | 48 | ``` 49 | 50 | 51 | 52 | 53 |
    54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | ``` 64 | 65 | 위 XML 쿼리는 ID가 `getMemberInfo`이며 `getMemberInfo.xml`에 저장됩니다. 66 | -------------------------------------------------------------------------------- /XML_Query/04_select_query_basic/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## SELECT 쿼리 - 기본 23 | 24 | XML 쿼리의 최상위 요소(element)는 ``입니다. 25 | 26 | `` 요소는 속성(attribute)으로 `id`와 `action`을 가집니다. 각 속성은 쿼리의 id와 쿼리의 타입(select, insert, update, delete)을 나타냅니다. 27 | 28 | 29 | ### SELECT절 30 | 31 | `
    `요소는 FROM절을 구성합니다. 테이블을 지정합니다. 32 | 33 | ``` 34 | 35 | 36 |
    37 | 38 | 39 | 40 | 41 | 42 | ``` 43 | 44 | ``` 45 | SELECT * FROM member; 46 | ``` 47 | 48 | ``요소를 사용하여 SELECT절을 구성합니다. 특정 컬럼만 조회할 수 있습니다. 49 | 50 | ``` 51 | 52 | 53 |
    54 | 55 | 56 | 57 | 58 | 59 | 60 | ``` 61 | 62 | ``` 63 | SELECT user_id, nick_name FROM member; 64 | ``` 65 | 66 | ### alias 속성 사용하기 67 | 68 | `alias` 속성을 이용하여 별칭을 지정할 수 있습니다. `table`, `column`, `query` 요소에서 사용할 수 있습니다. 69 | 70 | 71 | ``` 72 | 73 | 74 |
    75 | 76 | 77 | 78 | 79 | 80 | 81 | ``` 82 | 83 | ``` 84 | SELECT m.user_id AS uid, nick_name AS nick FROM member AS m; 85 | ``` 86 | -------------------------------------------------------------------------------- /XML_Query/05_select_query_with_groupby/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## SELECT 쿼리 - GROUP BY절 23 | 24 | `` 요소를 사용하여 GROUP BY절을 작성할 수 있습니다. 25 | 26 | ``` 27 | 28 | 29 |
    30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | ``` 39 | 40 | ``` 41 | SELECT email_host FROM member GROUP BY email_host; 42 | ``` 43 | -------------------------------------------------------------------------------- /XML_Query/07_select_query_with_navigation/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## SELECT 쿼리 - ORDER BY절 23 | 24 | XML 쿼리에서는 ORDER BY, OFFSET, LIMIT절 그리고 paging 처리를 위한 pagination을 구현하기 위해 `` 요소를 사용합니다. 25 | 26 | `` 요소는 자식요소로 ``, ``, ``, `` 요소를 갖습니다. 27 | 28 | 29 | ORDER BY절은 `` 요소로 작성할 수 있습니다. 30 | 31 | `` 요소의 `var` 속성은 정렬 기준 컬럼명이 바인딩되는 변수명이며, `order` 속성은 정렬 차순(내림차순, 오름차순)이 바인딩되는 변수명입니다. 32 | 33 | ``` 34 | 35 | 36 |
    37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | ``` 52 | 53 | ``` 54 | SELECT * FROM member WHERE is_admin = ':is_admin' ORDER BY :sort_index :sort_order OFFSET 55 | -- ex) SELECT * FROM member WHERE is_admin = 'Y' ORDER BY user_id desc 56 | ``` 57 | 58 | 59 | > Note: XML 쿼리에서는 ORDER BY나 OFFSET, LIMIT절을 별도로 사용할 수 없습니다. `` 요소를 통해 항상 동시에 사용됩니다. 60 | 61 | ## SELECT 쿼리 - OFFSET, LIMIT절 및 pagination 62 | 63 | `` 요소의 자식요소인 `list_count`, `page_count`, `page` 요소를 사용하여 작성됩니다. 64 | 65 | 각 요소의 `var` 속성은 변수바인딩, `default` 속성은 기본값을 지정합니다. 66 | 67 | ### list_count 요소 68 | 69 | LIMIT절에 해당됩니다. result set의 row를 지정합니다. 70 | 71 | ### page_count 요소 72 | 73 | pagination에서 출력될 페이지 수를 지정합니다. 74 | 75 | ### page 요소 76 | 77 | pagination에서 현재 페이지를 지정합니다. 78 | 79 | ``` 80 | 81 | 82 |
    83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | ``` 98 | ``` 99 | SELECT * FROM member WHERE is_admin = ':is_admin' ORDER BY :sort_index :sort_order 100 | -- 예) 한 페이지에 20(default)개씩 출력할 때, 1(default)페이지에 해당하는 목록을 조회 => LIMIT 0, 20 101 | 102 | ``` 103 | 104 | > pagination은 게시판의 목록 페이지와 같이 쿼리 결과를 뷰페이지에 출력할 때, 목록 하단에 나오는 page navigation을 처리하기 위한 기능입니다. 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /XML_Query/08_select_query_with_join/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## SELECT 쿼리 - JOIN 23 | 24 | XML 쿼리를 이용하여 LEFT JOIN(또는 LEFT OUTER JOIN), RIGHT JOIN(또는 RIGHT OUTER JOIN)을 사용할 수 있습니다. 25 | 26 | ``` 27 | SELECT files.* 28 | FROM xe_files AS files 29 | LEFT join xe_member AS member on files.member_srl = member.member_srl 30 | WHERE files.isvalid = 'Y'; 31 | ``` 32 | 33 | ``` 34 | 35 | 36 |
    37 |
    38 | 39 | 40 | 41 |
    42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | ``` 51 | 52 | ``요소의 `type` 속성에 사용할 JOIN(LEFT JOIN|LEFT OUTER JOIN|RIGHT JOIN|RIGHT OUTER JOIN)을 명시한 후, `
    `요소의 자식요소로 ``요소를 추가하여 on절에서 사용될 조건문을 작성합니다. 53 | 54 | > FULL OUTER JOIN과 INNER JOIN은 제공하지 않습니다. INNER JOIN 대신, 암묵적인 INNER JOIN(implicit INNER JOIN)을 사용할 수 있습니다. 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /XML_Query/10_insert_query/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## INSERT 쿼리 23 | 24 | ``` 25 | 26 | 27 |
    28 | 29 | 30 | 31 | 32 | 33 | 34 | ``` 35 | 36 | ``` 37 | INSERT INTO member (member_srl, user_id) VALUES (:member_srl, :user_id); 38 | ``` 39 | 40 | INSERT 쿼리는 `query` 요소의 `action` 속성을 'insert'로 지정합니다. 41 | 42 | `table` 요소는 row를 삽입할 table명을 지정하고 `column`요소에는 value를 지정합니다. 43 | 44 | 앞서 SELECT 쿼리에서 보았던 `condition`요소의 속성들(`var`, `default`, `filter`, `notnull`, `minlength`, `maxlength`)을 동일하게 사용할 수 있습니다. 45 | 46 | -------------------------------------------------------------------------------- /XML_Query/11_update_query/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## UPDATE 쿼리 23 | 24 | ``` 25 | 26 | 27 |
    28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | ``` 38 | ``` 39 | UPDATE xe_member AS member SET password = :password, user_name = :user_name WHERE member_srl = :member_srl; 40 | ``` 41 | 42 | UPDATE 쿼리는 `query` 요소의 `action` 속성을 'update'로 지정합니다. 43 | 44 | -------------------------------------------------------------------------------- /XML_Query/12_delete_query/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## DELETE 쿼리 23 | ``` 24 | 25 | 26 |
    27 | 28 | 29 | 30 | 31 | 32 | ``` 33 | ``` 34 | DELETE FROM xe_member WHERE member_srl = :member_srl; 35 | ``` 36 | 37 | DELETE 쿼리는 `query` 요소의 `action` 속성을 'delete'로 지정합니다. 38 | -------------------------------------------------------------------------------- /XML_Query/13_execute_query/README.md: -------------------------------------------------------------------------------- 1 | # XML Query 2 | 3 | 4 | 5 | - [Quick Start](/XML_Query) 6 | - [테이블 생성하기](/XML_Query/01_create_schema/) 7 | - [테이블 변경하기](/XML_Query/02_alter_schema/) 8 | - [XML 쿼리 기본](/XML_Query/03_xml_query/) 9 | - [SELECT 쿼리 - 기본](/XML_Query/04_select_query_basic/) 10 | - [SELECT 쿼리 - GROUP BY절](/XML_Query/05_select_query_with_groupby/) 11 | - [SELECT 쿼리 - WHERE절](/XML_Query/06_select_query_with_where/) 12 | - [SELECT 쿼리 - ORDER BY절](/XML_Query/07_select_query_with_navigation/) 13 | - [SELECT 쿼리 - JOIN절](/XML_Query/08_select_query_with_join/) 14 | - [SELECT 쿼리 - 서브쿼리](/XML_Query/09_select_query_with_subquery/) 15 | - [INSERT 쿼리](/XML_Query/10_insert_query/) 16 | - [UPDATE 쿼리](/XML_Query/11_update_query/) 17 | - [DELETE 쿼리](/XML_Query/12_delete_query/) 18 | - [XML 쿼리 실행하기](/XML_Query/13_execute_query/) 19 | 20 | 21 | 22 | ## 쿼리 실행하기 23 | 24 | 아래는 `user_id`가 'admin'인 회원을 검색하는 코드입니다. 25 | 26 | ``` 27 | $arg = new stdClass(); 28 | $arg->user_id = 'admin'; 29 | $output = executeQuery('member.getMemberInfo', $arg); 30 | 31 | if($output->toBool()) 32 | { 33 | $member = $output->data; 34 | echo $member->nickname; 35 | } 36 | ``` 37 | 38 | ### executeQuery 함수 실행 39 | 40 | 작성된 XML 쿼리는 `executeQuery()`, `executeQueryArray()`함수를 사용하여 실행할 수 있습니다. 41 | 42 | 43 | ``` 44 | /* ./config/func.inc.php */ 45 | 46 | function executeQuery($query_id, $args = NULL, $arg_columns = NULL) 47 | function executeQueryArray($query_id, $args = NULL, $arg_columns = NULL 48 | ``` 49 | 50 | #### 첫번째 파라메터 51 | 52 | 첫번째 파라메터는 XML 쿼리 ID입니다. 53 | 54 | XML 쿼리는 애드온, 모듈, 위젯이 소유할 수 있습니다. 소유하는 구성요소에 따라 아래와 같이 첫번째 파라메터의 규칙이 바뀝니다. 55 | 56 | 쿼리가 소속된 구성요소 | 규칙 | 예시 57 | -------|-------|------- 58 | 모듈 | `module_name`.`query_id` | `board.getBoardList` 59 | 애드온| addon.`addon_name`.`query_id`|`addon.counter.getCount` 60 | 위젯|widget.`widget_name`.`query_id`|`widget.content.getDocumentList` 61 | 62 | 63 | #### 두번째 파라메터 64 | 65 | 두번째 파라메터는 쿼리에 바인딩 될 변수를 담은 Object 객체입니다. 66 | 67 | ``` 68 | /* ./modules/member/queries/getMemberInfo.xml */ 69 | 70 | 71 | 72 |
    73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | ``` 82 | 위 쿼리의 `user_id` 변수에 바인딩 할 값('admin')이 있다면 아래와 같이 두번째 파라메터를 지정하세요. 83 | 84 | ``` 85 | $arg = new stdClass(); 86 | $arg->user_id = 'admin'; 87 | $output = executeQuery('member.getMemberInfo', $arg); 88 | ``` 89 | 90 | ### 쿼리 실행 결과 91 | 92 | 결과값은 Object 클래스의 객체로 반환됩니다 93 | 94 | ``` 95 | // $output을 json 형식으로 출력 96 | 97 | { 98 | "error":0, 99 | "message":"success", 100 | "variables":{ 101 | "_query":"SELECT * FROM documents LIMIT 10", 102 | "_elapsed_time":"0.00082" 103 | }, 104 | "httpStatusCode":null, 105 | "total_count":4181, 106 | "total_page":210, 107 | "page":1, 108 | "data":{ 109 | ..... 110 | }, 111 | "page_navigation":{ // navigation을 사용한 쿼리일 경우 존재 112 | "total_count":4181, 113 | "total_page":210, 114 | "cur_page":1, 115 | "page_count":"10", 116 | "first_page":1, 117 | "last_page":210, 118 | "point":0 119 | } 120 | } 121 | ``` 122 | 123 | #### 성공 여부 조회 124 | ``` 125 | $output->toBool() // true면 성공, false이면 실패 126 | ``` 127 | 128 | #### 성공시 결과 데이터 조회 129 | ``` 130 | $rows = $output->data; 131 | ``` 132 | 133 | `executeQuery()`함수는 `$output->data`에 담긴 row가 두개 이상이면 array로 반환합니다. 134 | 135 | `executeQueryArray()` 함수는 `$output->data`의 row 개수와 상관없이 array로 반환합니다. row가 0개일 경우 빈 array 반환합니다. 136 | 137 | #### 실패시 오류메세지 보기 138 | 139 | ``` 140 | $output->getMessage(); 141 | ``` 142 | 143 | 144 | 145 | --------------------------------------------------------------------------------