WordPress、Laravel Bladeでプロゞェクトを構築するだけでなく

あなたはWordPressを愛するこずができたす、あなたは愛するこずはできたせんが、それが問題を解決するこずに同意しないこずは難しいです。 最近、WordPressの開発は、4〜5個の情報ペヌゞを備えた原始的なブログの䜜成にはほど遠い状態にありたす。 倚くの䌁業が、倚くの内郚ロゞックを備えた本栌的なナヌザヌシステムを䜜成するためのツヌルずしおWordPressを䜿甚しおいたす。 悲しい真実は、圌がこれに完党に適しおいないずいうこずです。 しかし、残念ながら、このこずを理解できるのは、実皌働䞭のプロゞェクトの次の起動時のみです。

機胜のコストにより、プロゞェクトの保守が非垞に難しくなりたす。 プロゞェクトに組み蟌たれたすべおのロゞックは、ほずんどの堎合テストが行​​われおいないため、構造が䞍十分で蚘述が䞍十分です。 プロゞェクトが1人の人間によっお開発された堎合、プロゞェクトの内郚コンポヌネントの理解はこの人間になくなりたす。 その結果、䌚瀟は別のレガシヌコヌドを取埗したす。

おそらく、私が説明した状況はおなじみですが、おそらくそうではないでしょう。 WordPress゚コシステムでの5幎間の開発の埌、私は䜕かを倉える必芁があるこずに気付きたした。 プロゞェクトの構造を再考し、ロゞックず出力を敎理するためのルヌルを導入し、コヌドの再珟性の問題を解決する必芁がありたす。 そのため、ワヌドプレスのテヌマフレヌムワヌクであるClassyを曞くためにアむデアが生たれたした。

画像

WordPressのテヌマを開発した堎合、開いおいる蚘事がどのように衚瀺されるかsingle-post.phpでも、すべおの蚘事のリストを含むペヌゞarchive-post.phpでも、すべおのビュヌをメむンで衚瀺する必芁がありたす。テヌマディレクトリ。 このような゜リュヌションは、単玔なプロゞェクトでは意味をなすかもしれたせんが、プロゞェクトがロゞックを取埗するずすぐに、これが問題になりたす。

平均的なプロゞェクトの耇雑さに関するファむル数の䟋
├──404.php
├──README
├──archive-gallery.php
├──archive-inspiration.php
├──archive-rent.php
├──archive-vendor.php
├──attachment.php
├──category.php
├──comments.php
├──footer-rent.php
├──footer-vendor.php
├──footer.php
├──functions.php
├──gulpfile.js
├──header-rent.php
├──header-vendor.php
├──header.php
├──image.php
├──index.php
├──page-diy-ideas.php
├──page-edit-vendor-profile.php
├──page-local-blogs.php
├──page-login.php
├──page-my-favorites.php
├──page-my-listings.php
├──page-my-messages.php
├──page-my-profile.php
├──page-new-listing.php
├──page-password-reset.php
├──page-register.php
├──page-vendor-guide.php
├──page-vendors.php
├──page-wedding-ideas.php
├──page.php
├──screenshot.png
├──search.php
├──searchform.php
├──sidebar-home.php
├──sidebar-rent.php
├──sidebar-vendor.php
├──sidebar-filters.php
├──sidebar-general.php
├──sidebar-user.php
├──single-inspiration.php
├──single-rent.php
├──single-gallery.php
├──single-vendor.php
├──single.php
├──style.css
├──tag.php
├──taxonomy-location.php
├──template-about.php
├──template-activate-account.php
├──template-become-a-member.php
├──template-contact.php
├──template-default.php
├──template-faq.php
├──template-grab-a-badge.php
├──template-map.php
├──template-new-inspiration.php
├──template-new-rent.php
└──template-welcome.php

「私たちが知っおいるのはそれだけですが、あなたは䜕を提䟛したすか」あなたは尋ねたす。 そしお、最近のWordPressアップデヌト、぀たりバヌゞョン4.4から最終的に完党に利甚可胜になった簡単なものを提案したす-すべおのビュヌを適切なフォルダに入れ、index.phpだけをルヌトに残しお、レンダリング党䜓を凊理したす

Classy::render(); 

以前は次のように芋えおいたした。

├──archive-rent.php
├──single-rent.php
├──header-rent.php
├──footer-rent.php
└──sidebar-rent.php

今のようになりたす

├──ビュヌ
│├──家賃
││├──archive.blade.php
││├──single.blade.php
││├──layout.blade.php

より組織化されおいたすか そう思う。

どのように機胜したすか


WordPressの階局に粟通しおいる堎合は、リク゚ストを凊理するずきに、指定されたリク゚ストの最も具䜓的な衚珟を芋぀けようずし、実際にメむンのClassy :: renderを配眮したファむルであるindex.phpに達するたでダりンするこずを知っおいたす。

画像

この堎合、Classy :: renderは、ビュヌの怜玢ClassyView :: get_templateずスコヌプの怜玢ClassyScope :: get_scopeの2぀の機胜を実行したす。 これら2぀の関数は、ワヌドプレスを䜿甚するビュヌ怜玢アルゎリズムを繰り返したすが、別々に2回実行したす。 これにより、独立したプレれンテヌションずデヌタアヌキテクチャを実珟できたす。

なぜですか 開発䞭に、同じデヌタを異なる方法で衚瀺する必芁がある状況が非垞に頻繁に発生したす。 たずえば、倚くのテンプレヌトがありたすが、これらはpage.phpの䞀皮のデザむンにすぎたせん。 したがっお、なぜデヌタを䞀床スコヌプ/ page.phpに登録し、テンプレヌト甚に個別のビュヌを開発しないのですかview / page / dark.php、view / page / light.phpなど この結果、スコヌプが䞀床準備されるため、繰り返されるコヌドの数が枛りたす。

それでは、WordPress 4.4はどうなっおいたすか


そうそう、私はそれに぀いお話すこずを完党に忘れおいたした。 WordPress 4.4では、管理パネルでナヌザヌに衚瀺されるテンプレヌトのリストを最終的に倉曎できるようになりたした。 さお、「theme_page_templates」 フックのおかげで、このリストを曞き換えお、新しい方法で登録されたテンプレヌトを远加できたす。

そしお、それらは非垞に簡単に登録されたす。 たずえば、aboutテンプレヌトを䜜成したす。 これを行うには、view / page / about.blade.phpビュヌを䜜成し、ファむルの䞊郚でテンプレヌト名Aboutを指定したす。 ぀たり、最終的に、私たちの芋解は次のようになりたす。

 {{-- Template Name: About --}} @extends('base.default') @section('content') @if ($post) <article class=“about"> <h1>{{ $post->title() }}</h1> <section class="body"> {{ $post->content() }} </section> </article> @endif @stop 


モデルコンセプト


残念ながら、WordPressはデフォルトではデヌタ抜象化レむダヌを䜿甚したせんが、必芁です。

別のprefix_vendor_get_postsを蚘述する代わりに、Vendorクラスをモデルずしお䜿甚し、get_postsを通垞のメ゜ッドずしお䜿甚しおください。 この䞀芋シンプルな方法は、プロゞェクトのサポヌト䞭に倚くの劎力を節玄し、最も重芁なこずずしお、より少ないバグで機胜を蚘述できるようにしたす。

この堎合、ClassyPostずいうモデルがありたす。これは、他のカスタムポストタむプモデルによっお展開できたす。

ララベルブレヌド


WordPress開発でテンプレヌト゚ンゞンを䜿甚するこずは誰にずっおもビゞネスですが、経隓から、プロゞェクト開発時間の短瞮、構造化、読みやすく読みやすいコヌドの䜜成に圹立぀こずがわかっおいたす。 最近たで、テンプレヌト゚ンゞン-Twigの実装であるTimberを䜿甚したしたが、いく぀かの欠点がありたす。

1PHP機胜の実行。 このように芋えるので、ここではコメントなしでできるず思いたす

 {{function('edit_post_link', 'Edit', '<span class="edit-link">', '</span>')}} 

Laravel Bladeではphpコヌドを実行できたすが、同じ関数は次のようになりたす。

 {{ edit_post_link('Edit', '<span class="edit-link">', '</span>') }} 

2スピヌド。 Timberは最速のフレヌムワヌクではなく、䞻な問題は機胜のオヌバヌロヌドです。 小さなプロゞェクトでは、これは目に芋えたせんが、より倚くのトラフィックを持぀プロゞェクトを扱うずき、これは痛みのポむントになりたす。 私のアむデアは、フレヌムワヌクを最小限に抑えお、プロゞェクトで実際に䜿甚されおいるものだけにするこずでした。

おわりに


Classyプロゞェクトは完党にオヌプン゜ヌスです。 私の最初のアむデアは、WordPressのプロゞェクトの組織に関する問題の解決を支揎するこずでした。私ず同僚はこの問題を解決し、この実装が他の人にも圹立぀こずを願っおいたす。 珟圚の実装ではバグが発生する可胜性がありたすが、バグの陀去に積極的に取り組んでいきたす。 完了した䜜業に぀いおのフィヌドバックをお埅ちしおいたす。

GitHubのリポゞトリ。

Source: https://habr.com/ru/post/J301848/


All Articles