HydePHP의 내부 구조 - 3부: 페이지 모델

페이지 모델에 대한 심층 분석 AKA "Hyde가 Markdown으로 수행할 작업을 아는 방법"



Deep-Dives takes a closer look at the codebase and tries to explain what's going on.
You don't need to know this to use Hyde. Actually, the reason Hyde has page models is so that you don't have to worry about anything other than your content (unless you want to).



HydePHP의 내부 아키텍처에 대한 제 시리즈의 세 번째 기사에 오신 것을 환영합니다.

If you haven't read part one already, you should do that first. Here is a quick link .



페이지 모델이란 무엇입니까?



Hyde에서 페이지 모델은 페이지에 렌더링할 데이터와 Hyde에게 페이지를 렌더링하는 방법을 알려주는 정보를 포함하는 간단한 클래스입니다. 이렇게 하면 Hyde 데이터가 알려진 동작으로 예측 가능한 상태를 갖게 됩니다.

가장 단순한 페이지 유형인 마크다운 페이지의 모델을 살펴보겠습니다.

class MarkdownPage extends MarkdownDocument
{
    public static string $sourceDirectory = '_pages';
    public static string $parserClass = MarkdownPageParser::class;
}


Static properties means that the value of these properties is shared across all instances of the class.
Non-static properties are unique to each instance of the class (meaning they are specific to the page being rendered).


$sourceDirectory는 마크다운 페이지를 찾을 위치를 Hyde 자동 검색에 알려줍니다.$parserClass에는 Markdown 파일을 MarkdownPage 개체로 구문 분석하기 위한 논리가 포함되어 있습니다.

보시다시피 MarkdownPage는 모든 Markdown 기반 페이지 유형에 대한 공유 코드를 포함하는 MarkdownDocument 클래스를 확장합니다. 한 번 보자.

class MarkdownDocument extends AbstractPage
{
    use HasDynamicTitle;

    public static string $fileExtension = '.md';

    public array $matter;
    public string $body;
    public string $title;
    public string $slug;
}


여기서 $fileExtension는 모든 Markdown 기반 페이지에 대해 설정됩니다.

다른 속성은 블레이드 보기에서 사용할 데이터 및 데이터 유형을 정의합니다.
HasDynamicTitle 특성을 통해 Hyde는 페이지 머리말에 설정된 제목이 없는 경우 몇 가지 다른 요소를 기반으로 페이지 제목을 추측할 수 있습니다.

페이지 모델을 사용하여 정적 페이지를 생성하는 방법



페이지 모델은 정적 사이트 구축 프로세스에 필수적입니다.

Markdown 파일을 정적 HTML로 컴파일할 때 블로그 게시물을 예로 들면 다음과 같습니다.

빌드 루프 중에 _posts 디렉토리의 소스 파일은 CollectionService에 의해 발견됩니다.
그것이 _posts 디렉토리에 있기 때문에 Hyde는 이것이 Markdown 포스트라는 것을 알고 있으며, 이것은 사용되는 많은 진행 클래스에 영향을 미칠 것입니다. Markdown 파일은 MarkdownPostParser에 전달되고 MarkdownFileService는 Markdown 블로그 게시물 파일을 MarkdownPost 모델로 구문 분석합니다.

이제 MarkdownPost 모델에는 Author 모델과 같은 모든 메타데이터와 실제 Markdown 콘텐츠가 포함됩니다. 이제 모델 데이터를 사용하여 HTML을 렌더링하여 블레이드 템플릿을 채우는 StaticPageBuilder로 모델을 전달할 수 있습니다post.

블로그 게시물이므로 결과 HTML은 _site/posts 디렉토리에 저장됩니다.

보시다시피 여기에서 많은 일이 벌어지고 있습니다. 그러나 이러한 방식을 사용하면 사용할 레이아웃을 지정할 필요조차 없는 콘텐츠를 매우 쉽고 빠르게 생성할 수 있습니다.

좋은 웹페이지 즐겨찾기