Pico

Pico를 테스트하면서 배운 것들을 정리한다.

1   설치

1.1   Composer가 설치되지 않은 서버

Pico 설치는 간단하다.

$ curl -sSL https://getcomposer.org/installer | php
$ php composer.phar create-project picocms/pico-composer pico

1.2   Composer가 설치된 서버

Composer가 이미 설치되어 있는 경우 다음과 같이 한 줄로 설치할 수 있다.

$ composer create-project picocms/pico-composer pico

1.3   Git으로 문서의 버전 관리하기

Git으로 문서의 버전을 관리하기 위해서는 두 가지 방법이 있다. content 디렉토리만 Git 저장소로 만드는 방법과 Pico 전체 디렉토리를 Git 저장소로 만드는 방법이다. 후자의 경우 테마와 플러그인까지 모두 버전 관리가 되므로 더 나은 방법 같다.

여기서는 Git의 베어 저장소(bare repository) 없이 웹서버와 랩탑에 작업 저장소(working repository)만 만드는 방법을 설명한다. 개인적인 사이트의 내용을 제삼자인 GitHub에 올리는 것은 좋은 생각이 아니기 때문이다.

우선 Pico의 Composer 스타터 프로젝트를 복제한다.

$ git clone https://github.com/picocms/pico-composer.git pico

개인적인 문서의 푸시 시도조차 방지하기 위해서 푸시 URL을 삭제한다. 풀은 아직 가능하기 때문에 업데이트를 가져 올 수는 있다.

$ cd pico
$ git remote set-url --push origin no_push

이제 랩탑에서 이 작업 저장소로 푸시가 가능하도록 설정한다.

$ git config receive.denyCurrentBranch updateInstead

git config receive.denyCurrentBranch ignore로 설정해도 되지만 푸시함과 동시에 업데이트되지는 않는다. git checkout -f를 이용해서 직접 체크아웃을 해 주는 불편함을 덜 수 있다.

이제 Pico를 설치한다. Composer가 설치되어 있지 않은 경우 상위 디렉토리로 이동한 다음 pico 디렉토리에 설치한다.

$ cd ..
$ curl -sSL https://getcomposer.org/installer | php
$ php composer.phar --working-dir=pico install

Composer가 설치되어 있으면 pico 디렉토리 안에서 설치한다.

$ composer --working-dir=. install

랩탑으로 옮겨서 위에서 설정한 저장소를 복제하면 끝난다.

$ git clone example.com:pico

2   설정

config/config.yml.template를 참고해서 config/config.yml 파일을 만들면 된다.

3   한글 지원 Pico Edit 플러그인

Pico Edit 플러그인을 수정해서 한글을 지원하는 플러그인을 만들었다.

4   meta.date_formatted의 한글 출력

config/config.yml에서 date_format을 한글로 설정하면 한글이 깨져서 출력된다. 직접적인 원인은 vendor/picocms/pico/lib/Pico.php 파일의 1,522 번째 줄에서 벌써 UTF-8인 문자열을 다시 한 번 UTF-8으로 인코딩하기 때문이다. 이 줄을 다음과 같이 바꾸면 한글이 제대로 출력된다.

$meta['date_formatted'] = $meta['time'] ? strftime($dateFormat, $meta['time']) : '';

하지만, 개발자에 따르면, 이렇게 하면 시스템 인코딩이 UTF-8이 아니고 config/config.yml이 UTF-8으로 작성되었을 경우 strftime()이 시스템 인코딩으로 문자열을 출력하기 때문에 문제가 있을 수 있다고 한다. 그러면서 다음과 같은 해결책을 제시했다.

if (empty($meta['date_formatted']) && $meta['time']) {
    $encodingList = (mb_detect_order() === [ 'ASCII', 'UTF-8' ]) ? [ 'ASCII', 'UTF-8', 'CP1252' ] : mb_detect_order();
    $dateFormat = $this->getConfig('date_format');
    $meta['date_formatted'] = mb_convert_encoding(strftime($dateFormat, $meta['time']), 'UTF-8', $encodingList);
}

5   Pico Yet Another Linker 플러그인

Grav의 Markdown Yet Another Linker 플러그인Pico로 이식했다. 데모 페이지를 만들었다.

참고문헌

이 칸을 비워 두세요.