CMSは自分で行いたす。 サむクリングの理論

たくさんの面癜い人

そしお誰もが自転車を䜜りたす。

そしおある朝

火薬を思い぀きたす。

ビクタヌ・ツォむ



画像



最初は、「私はPRです」のセクションで、自分がどれだけうたくやっおいるか、私がどんな玠晎らしいこずをしたかに぀いおの蚘事を曞きたかったのですが、ネット䞊で少し怜玢した埌、私は自分だけではないこずに驚いおいたした。 それから私は反察に行くこずにしたしたおそらくほずんどすべおのWebプログラマヌは、少なくずも圌の人生で䞀床は完党なCMSを曞き蟌もうずしたす。 同時に、蚭蚈プロセスおよびこのプロセスはコヌドの蚘述時にすでに発生しおいるこずが倚いで、開発者には確かに質問がありたす。 これらの質問で、圌は怜玢゚ンゞンに目を向け、同様のレヌキですでに旅行した人のサむトにアクセスしたす。



そこで、私は初心者の「自転車開発者」がどのようなリク゚ストを受け取ったのかを調べ始め、䜜業の始めには私には明らかではなかったいく぀かのこずを匷調しようずしたした。







1. MVCがすべおです



Webアプリケヌション開発に関する䌚話がどこに来おも、MVCModel-View-Controllerずいう略語がすぐに衚瀺されたす。 このアプロヌチでは、むンタヌフェむスをロゞックから分離し、ロゞックをデヌタから分離する必芁があるず述べおいたす。 私はこれらのアむデアに完党に染み蟌んだずは蚀いたせんが、デザむンたたはデザむンの倉曎がコヌドのロゞックに圱響を䞎えないずいう事実-私は口で泡で防埡する準備ができおいたす:)



これが、レヌキナンバヌ1が眮かれおいる堎所です。倖芳をプログラムロゞックから分離する必芁がありたす。 それを行う方法-誰もが自分で決める。 この問題にはかなりの数の壊れたコピヌがありたす。ここにはさたざたなテンプレヌト゚ンゞンずxslt倉換があり、php + htmlが別々のファむルに取り出されおいたす。 遞択肢は倧きいが、通垞の「銀の匟䞞」は存圚しない。芏暡の片偎に柔軟性があり、もう片偎に了解性がある。 「最小のプログラミング」を備えたSmartyでさえ、倚くのナヌザヌにずっお耇雑に思えたす。 したがっお、システムを箱から出しお、最小限のプログラミング知識で必芁に応じおファむルを保存したいナヌザヌに焊点を圓おる堎合は、頭を痛めるだけの䟡倀がありたす。



さらに、蚭蚈は亀換可胜であり、堎合によっおはオンザフラむでも可胜です。 ぀たり、䟿利なストレヌゞず線集を提䟛する必芁がありたす。 そしお、倚くの人が無芖したもう䞀぀のこずデザむンは簡単に線集可胜で曎新可胜でなければなりたせん。 200個のテンプレヌトで構成される無料のフォヌラムのデザむンを調敎する必芁がありたした。このテンプレヌトでは、すべおがテヌブルでしっかりず「釘付け」され、JavaScriptの䞀郚が「ロゞックから」挿入されたす。



私はこの蚭蚈を思い぀きたした。ナヌザヌ蚭蚈には、基本蚭蚈にはないものしかありたせん。 ぀たり、最も最小限のケヌスでは、デザむンはデザむンの名前を持぀空のカタログで構成されたす。 この堎合、欠萜しおいるすべおの郚品が借甚されるため、蚭蚈が基本蚭蚈ずたったく同じに芋えるこずは明らかですが、出発点ずしお非垞に䟿利です。 デザむンにcssが衚瀺される堎合、システムは自動的にそれに切り替えたすhtmlはただベヌスのものから借甚しおいたす。 JSでも同じです。 これで埗られるのは、ナヌザヌ蚭蚈においお、圌自身が䜜成したファむルのみです。 ナヌザヌは、自分が修正したファむル、および䜜業開始時に基本蚭蚈から単玔にコピヌしたファむルを芚えおおく必芁はありたせん。 このサむトには、ナヌザヌを線集するこずなく、基本蚭蚈のほがすべおの革新的な技術も衚瀺されたす。 そのようなシステムは䟿利で論理的であるず感じたしたが、ある人にずっおはやや予想倖のように思えたす。 それをサヌビスに取り入れるか、あなた自身のものを思い぀くかはあなた次第です。



2.サむト構造



コアを取埗したす。 カヌネルは䜕をすべきですか そしお、すべおの「汚い」䜜業を行う必芁がありたす。サむト蚭定、ナヌザヌグルヌプの暩限ず蚭定、䜿甚モゞュヌル、テンプレヌト、キャッシュ、ロヌカリれヌションパラメヌタヌなどを決定したす。 ぀たり、プラグむンが動䜜を開始するたでに、興味のあるすべおの情報をカヌネルから取埗できたす。 気味が悪いように聞こえたすが、芁玠の盞互䜜甚を明確に想像すれば、これはすべお比范的簡単に蚘述しお䜜業できたす。



画像



このサむトは、デヌタベヌス内のどこかにダンプされたペヌゞの集たりではなく、厳密な階局になるず自分で決めたした。 その結果、サむト構造はツリヌ状になり、デザむンの堎合のように、欠萜しおいる郚分は芪から継承されたす。 ナヌザヌグルヌプの構造もツリヌに䌌おいたす-暩限ず蚭定も芪から継承されたす。 ロヌカリれヌションファむルずモゞュヌルも単玔な階局を持っおいたす。 明確な階局により、サむトマップの自動生成、さたざたなメニュヌ、暩利の分配など、あらゆる皮類の䞍快なものを゚ンゞンに転送するこずができたしたはい耇数のグルヌプに䜕かを䞎えるために、それぞれを線集する必芁はありたせん-階局を定矩するだけです。 生きお喜ぶ そしお、もし熊手がなければすべおがうたくいくでしょう



最初にレヌキ。 キャッシング


私は「メガドラむブ」の蚭蚈に埓事しおいたしたが、どういうわけかキャッシング次第ではありたせんでした...はい、そしおあなたは思う-䜕がそんなに耇雑なのですか ペヌゞを倉数に配眮しおファむルに保存し、次回そこから衚瀺したした。 䜕かビゞネス...い぀でも添付できたす ああ...そしお、登録ナヌザヌ甚に別のペヌゞがありたす...ええず、考えおみおください-キャッシュに2぀のペヌゞを保存したす そしお、ヘッダヌに「hello、Vasya」ず衚瀺する必芁がありたす...たあ、ヘッダヌのこのフラグメントはキャッシュされるべきではありたせん。 そしお、地䞋の同じフラグメント...ず䞭郚...うヌん...ただペヌゞのさたざたな郚分をさたざたな期間キャッシュする必芁がありたす...私たちは座っお、ブロックキャッシュのために゚ンゞンずキャッシュシステムを曞き換えたす-各ブロックに独自の寿呜がありたす。



2番目のレヌキ。 キャッシング


どうしお 再床キャッシュしたすか 結局のずころ、圌らはすべおを矎しく行いたした ええ、そうです...圌らはしたした...そしお、タスクが圌の個人的な蚭定に基づいお各ナヌザヌのコンテンツを生成するこずになるたでそれはうたくいきたした。 同時に、キャッシュのサむズはゞェット戊闘機の速床ずずもに増倧し、その内容は再び芁求されるよりもはるかに早く叀くなっおいたす。 サむトを高速化する代わりに、速床を萜ずしお、誰も必芁ずしないギガバむトのキャッシュペヌゞを䜜成したす。サむトのメむンスクリプトは「His Majesty」キャッシュ無効化ツヌルです。 うヌん...゚ンゞンを再床曞き盎しおください。今回はパフ​​ォヌマンスのボトルネックであるため、デヌタベヌスク゚リのレベルでキャッシュを実装したす。 曞き換えられた...すべおがnです。



3番目のレヌキ。 キャッシング


あなたは自分の䜜成を芋お、完党な銬鹿のように感じたす。ペヌゞ党䜓を保存するのではなく、毎回䜜成したす。 しかし、キャッシングはその反察のために正確に考案されたした どのように私は䜕かを砎裂させるのですか



その結果、䞀郚のモゞュヌルはブロックにキャッシュされ、䞀郚はク゚リレベルでキャッシュされたす。 これにより、たずえばサむトメニュヌなど、めったに倉曎されないものをキャッシュに栌玍するこずができたした。



私自身の教蚓ずしお、これを孊びたした。システムは、実行の特定の段階で、簡単にキャッシュたたはそこから取埗できるデヌタをグルヌプ化するように最初に蚭蚈する必芁がありたす。 たた、キャッシュシステムを゚ンゞンに厳密に結び付けるべきではありたせん。今日ではキャッシュをファむルに保存するだけで十分であり、明日たたは今倜にはすでにmemcacheサヌバヌにサヌビスを提䟛しおいたす。



画像



゚ンゞンの䜜成プロセスでは、リファクタリングに関するスマヌトブックを読むこずも、゚ンゞンの䜜成埌に読むこずも理にかなっおいたす。 いずれにせよ、3぀すべおあなた、゚ンゞン、本がそれをうたくやるこずができたす。



3.モゞュヌル性。



珟代のシステムを「それ自䜓」のものずしお想像するのは困難です-機胜を拡匵するためのむンタヌフェヌスが必芁です。 したがっお、CMSの最もおいしい郚分であるモゞュヌルの䜜成に進みたす。 たた、倚くの質問もありたす。モゞュヌルの倖芳、システムぞの接続方法などです。

䞀郚のシステムでは、モゞュヌルの呌び出しはシステムのカヌネルに厳密に登録されおいるため、モゞュヌルを蚘述したりサヌドパヌティをむンストヌルしたりする堎合は、゜ヌスコヌドにアクセスし、むンストヌルマニュアルを甚意しお、察応する呌び出しをコヌドに入力したす。 このアプロヌチのすべおの愚かさで、倚くのシステムはたさにそのように機胜したす。 この゜リュヌションにはバリ゚ヌションがありたす。各モゞュヌルは特定のディレクトリ内の個別のファむルです。 この堎合、カヌネルにモゞュヌルを登録するだけでなく、単䞀のファむルずしお実行する必芁もありたす。 アクティブなテンプレヌトを持぀バリアントもありたした。぀たり、テンプレヌトに{module_name}が入力され、パヌサヌがこのタグに到達するず、モゞュヌルmodule_nameが実行のために呌び出され、その結果がタグの代わりになりたす。 おそらくこの方法は䟿利かもしれたせんが、この堎合、ロゞックをプレれンテヌションから分離するだけでなく、逆もたた完党に混圚しおいたす。



䞀定数のコヌンの埌、おそらく簡朔で単玔な䟋ではないシステムになりたしたが、非垞に䟿利なようです。 各モゞュヌルは、カヌネルが1぀のファむルindex.phpのみを呌び出す個別のディレクトリです。 このファむルは、「Hello world」を出力し、ハむパヌスペヌス準゚ミッタヌの制埡ファむルを接続できたす。これは、モゞュヌル開発者にずっお䟿利です。 同じディレクトリに、モゞュヌルパラメヌタ、可胜な蚭定、および暩限のシステムの説明が蚘茉されたxmlファむルがありたす。 このファむルは、システム自䜓がモゞュヌルを远加し、この頭痛をナヌザヌに転送しないようにするために䜿甚されたす。「モゞュヌルのむンストヌル」ボタンをクリックしおください-受信しおください。



むンストヌルを理解したした。 新しい問題が発生したす-たずえば、ナヌザヌがフォトアルバムやフォヌラムなどを1ペヌゞに投皿しないようにする方法はありたすか 垞識に頌るのは無意味なので、モゞュヌルの入力が必芁です。 このタむプのモゞュヌルこれらのモゞュヌルの䞀郚では、「コンポヌネント」の抂念を探りたしたは、ペヌゞに1぀しか存圚できたせん。



さお、ペヌゞには1぀のコンポヌネントしかありたせんが、他にも倚くのコンポヌネントが存圚する可胜性がありたす-それらはどのような順序で接続されるべきですか 結局のずころ、仕事の終わりにナヌザヌをサむトのメむンペヌゞに移動させる䜕らかのスキン切り替えのモゞュヌルが、亀尟期のりサギの数の動態を分析するためのモゞュヌルが完了した埌に接続するずバカになりたす-分析結果が衚瀺されず、蚈算に時間がかかりたせん。 したがっお、モゞュヌルは接続の順序で指定する必芁がありたす。



このためにnixランレベルの類䌌物を玹介する人もいたす。各モゞュヌルでは、接続するモゞュヌル間で登録する必芁がありたす。 ナヌザヌずしお、この決定は衰匱に陥りたしたが、開発者ずしお私はほずんど同じこずを思い぀きたした。モゞュヌルは3぀の倧きなグルヌプに分かれおいたす。 グルヌプの1぀はすでに述べた「コンポヌネント」であり、他の2぀は、1぀のグルヌプのモゞュヌルがコンポヌネントの前に接続され、他のグルヌプのモゞュヌルが接続されおいる点のみが異なりたす。 さらに、この分離をナヌザヌから隠し、「コンポヌネント」ず「モゞュヌルのみ」だけがナヌザヌに残されたした。



そのため、モゞュヌルを蚭蚈し、接続を決定したした...次に、その構成方法ず蚱可方法を決定する必芁がありたす。 そしお、ここではすべおが単玔ですカヌネルは汚い仕事のために蚭蚈されおいるため、それを傷぀け、xmlのモゞュヌルが蚭定のリストを提䟛し、カヌネルにそれを解析させ、保存し、芁求に応じお提䟛したすシンプル。



開発プロセス䞭に発生した別の問題は、モゞュヌル間のデヌタの転送です。 パズルの条件に埓っお、圌らはお互いに぀いお䜕も知らず、数字の順にカヌネルによっお呌び出されたす。 しかし、あるモゞュヌルから別のモゞュヌルにニュヌスを送信したいのです これを行うために、グロヌバル倉数甚の特別なクラスを導入したした。このクラスでは、すべおのモゞュヌルが埌続のナヌザヌのために䜕かを保存できたす。 これはおそらく非垞に゚レガントな゜リュヌションではありたせん。



4.アップデヌト



私は垞に最新バヌゞョンを持ちたいのですが、これのために最小限の䜓の動きを䜜りたいです。 したがっお、曎新プロセスを自動化する必芁がありたす。 そしお、ここでも、非垞に広範囲ではないにしおも、゜リュヌションの動物園がありたす。 最も進歩的なものは、すべおのディレクトリに777の暩利を、ファむルに666の暩利を眮いおから、「スクリプトがすべおを実行する」こずを提案したす。 これがグランドキャニオンほどの倧きさのセキュリティホヌルであるずいう事実は、䞀般的に誰も気にしたせん。



スクリプトには、曎新プログラムを䞀時ディレクトリにダりンロヌドし、FTPアクセス蚭定をナヌザヌに芁求した埌、それ自䜓を曎新するずいう2぀のオプションのアむデアがありたした。 したがっお、圌は䜙分な暩限を䞎える必芁はなく、すべおが自動的に行われ、曎新はサヌバヌ内で远跡されたす...毎回ナヌザヌにFTPアクセス蚭定を芁求するか、サむトに保存しおください...぀たり、すべおの卵を1぀にバスケット。 したがっお、私は別のオプションを遞択したしたナヌザヌは曎新をアヌカむブたたはsvn経由でダりンロヌドし、サむトにアップロヌドし、サむトのコヌドは「新しい」ず感じお、デヌタベヌスおよび/たたは蚭定に必芁な修正を加えたす...しかし、最初のオプションはより矎しい...しかし、私はあえおしたせんでした。



これらは私の「自転車の建物」の最も蚘憶に残るマむルストヌンです。 これを読んでいる間、私は仕事の初めにこのようなこずをしなかったこず、そしお私自身が「正しい」質問をするのに十分な経隓ずコヌンを持っおいなかったこずを非垞に残念に思いたす。 私が結果ずしお埗たものは、 ここで芋るこずができ、質問があれば、それらに答える準備ができおいたす。



ちなみに、未回答の質問に察する回答があれば、喜んで聞きたす。 結局のずころ、経隓-それは誰の息子であり、すべおの間違いを犯すこずはほずんど䞍可胜です;



All Articles