Log in
# Installation

설치 매뉴얼 영상
https://youtu.be/o1TvQf-dcZA

1. 데이터베이스 연결설정
	- `cp .env.example .env`

2. `./install.sh` 실행
	- storage/public 폴더 생성 및 퍼미션 설정
	- `composer update`
	- Database 생성 (schema.sql)

3. 관리자 비밀번호 변경
	- 초기 계정: root / admin
	- 로그인 후, 관리자 비밀번호 변경

4. 환경설정 업데이트
	- Settings > Configuration: Save Changes
	- .env 파일 내용 중 일부를 읽어와 데이터베이스에 저장
	- 업데이트한 내용으로 .env 업데이트

5. 이미지 옵티마이저 설치
    - sudo apt-get install jpegoptim
    - sudo apt-get install optipng
    - sudo apt-get install pngquant
    - sudo apt-get install gifsicle
    - sudo apt-get install webp

**기본시스템 설치완료**

5. 테스트 사이트 데이터 설치
	- .install/ 안에 있는 인스톨러 설치
	- database 내용 업데이트
	- public/files, public/storage 에 테스트에 필요한 파일들 복사

# Build Concept
Basic concept of sf4l

**Concept**
- Core System for multiple sites
	- Component와 data 분리
	- Conceptual Component/Site Scope
- Component per menu
	- 메뉴별 component binding
	- Component를 통한 데이터 관리

**Core System**
- core
	- System Components and programs
	- System/Site blade template, html, css/js
		- errors, seo, files 등
	- Site specific Component (주로 Main)
- files
	- public/files/ 에 업로드 (개발 사이트를 위해 사이트별로 rsync 로 sync 하는 스크립트 추가)
- database
	- 공용 DB server/local DB server

**HTML view page structure**
- Header
	- Nav: GNB
	- Aside
	- Search, and etc

- Main: Component
	- Content: Doc, Bbs, Main, and misc

- Footer
	- Copyright
	- Information

**Laravel Blade Template**
- layout.blade.php: main 을 제외한 header, footer
- main.blade.php: extend()를 이용, Main Component를 삽입한다.
- 기타 Component, Doc 등도 Main 과 동일한 방식으로 삽입한다. (각 Component 에서 경로, 파일명 등의 규칙을 정함)

**Component/Site Scope**
- Global
	- Site, Component 등 시스템 전체에 영향을 끼치는 프로그램
	- 변수 혹은 객체
- Site
	- Site 내에서만 사용하지만, 사이트 내에서 사용하는 전체 Component에 영향을 끼치는 프로그램
	- 예) Site Composer
- Component
	- Component 내에서만 작동
	- `${Component}` 형태로 blade에 삽입
	- 기타 변수 혹은 객체

**Main Component**
- 사이트 내 여러 components 의 내용들의 접근에 용이하도록 index 역할을 하는 프로그램
- 사이트별로 각기 다른 Main Component
- Sub main 으로도 확장할 수 있음 (using menu_id)

**Doc Component**
- Database/HTML file/blade template 등 주로 static 한 내용을 보여주는 프로그램
- 간단한 text/html 위주의 content 일 경우, Doc component editor 를 통해 실시간으로 생성/업데이트 가능
- 복잡한 디자인, 스크립트 등을 사용할 경우 HTML이나 blade 파일로 관리
	- /resources/views/{APP_NAME}/doc/ 폴더 안에 계층형 구조로 파일 저장 가능
	- 파일에 사용되는 js/css 등의 resource는 resource() 함수로 관리
	- 이미지는 public/files/ 내에 추가

## Directory Information

**/public/asset**
- 시스템 스크립트
- Url: /asset
- 예) /public/asset/ckeditor -> /asset/ckeditor

**/public/files**
- git으로 관리되지 않는 사이트별 파일
- Url: /files
- 예) 메뉴용 이미지: /public/files/menu/{menu-id} -> /files/menu/{menu-id}

**/storage/app/public**
- 업로드 데이터 (프로그램이 관리)
- Storage::disk('public')
- Url: Storage::url()

## APP_NAME = Site Name

**/app/Components/{APP_NAME}**
	사이트별 컴포넌트 디렉토리
	/SiteComposer.php - view composer 바인딩

**/resources/views/{APP_NAME}**
	사이트별 스타일 디렉토리
	/asset : resource('asset/xxx.css')

## route
**(/namespace)/db/actKey/subKey/optKey/**

- uid : 가장 먼저 나오는 numeric value
- sid : 두번째 나오는 numeric value

## Variables

- $namespace
- $db
- $actKey
- $subKey
- $optKey
- $uid
- $sid
- $hide_header
- $method : $actKey 를 reverseSnake()으로 변경한 값
- $user : login 한 user 객체
- $Menu : 현재 메뉴 객체
- $access : 현재 메뉴 권한 객체
- $seoHeader : 현재 메뉴 SEO Header 객체
- $darkMode
- $isLogged, $isRoot, $isAdmin
- Config::get() : Settings > Configuration 에 있는 값들을 불러옴