Diem CMSでのWebサむト開発利点、哲孊、䟋、萜ずし穎

Diem CMSず呌ばれるフランスのWeb開発者グルヌプの玠晎らしいむニシアチブに関するストヌリヌの続き。



この蚘事はあなたを埅っおいたす



-Diemがりェブマスタヌの生掻を楜にする方法のいく぀かの䟋

-あなたが遭遇するかもしれない萜ずし穎、および可胜な解決策

-Diemが同僚ず根本的に異なるより良い方法に぀いおのいく぀かの哲孊的議論

-トピックに関連する興味深い事実

-スクリヌンショットずコヌド䟋ずずもに

それはボリュヌムがあり、実質的であるこずが刀明したした。



緎習する



たえがき

過去2か月で、このCMSに5ペヌゞから2,000ペヌゞたでの6぀のサむトを䜜成したした。2぀のサむトは共有ホスティングに、2぀はVPSサヌバヌにありたす。 どこでも128 MBのメモリ。

タヌル

ああ、この慣行は、珟時点での埓来の共有ホスティングでのDiemの䜿甚はうたくいきたせん...

第䞀に、48 MB未満のメモリ制限はFatal error: Allowed memory size of X bytes exhausted



を匕き起こす可胜性がありFatal error: Allowed memory size of X bytes exhausted



、玄8 MBがペヌゞメンテナンスに䜿甚されたすが、システムコヌル蚭定の曎新、怜玢スキャンZend_Search_Luceneなどはより倚くのメモリを䜿甚したす可胜性がありたす䞀郚の堎所では、開発者は長いサむクル䞭にメモリの充填を制埡するのを忘れおいたした

第二に、暙準の./configure



蚭定でAPCキャッシングが存圚しない堎合、Diemは玄2秒間ペヌゞを凊理したすこれは同様の構成で200msですが、APCで 。 これは私の掚枬です、実際には、スクリプトは2000msの仮想ホスティングで実行され、VPS 200msではAPCがあちこちにむンストヌルされおいたすが、共有ホスティングのPOSIX共有メモリのシステムサポヌトはありたせん。 これは事実だず思いたすが、他のオプションは陀倖されおいたせん。

異なる構成でAPCを構成する過皋で、このドキュメントは䜕が起こっおいるかを理解するのに圹立ちたした。

画像 facebook APCキャッシングに関するfacebookの詳现なレビュヌず研究

はちみ぀

快適からシステムの明らかな重さにもかかわらず、reg.ruから最も安いVPSで、私は静かに5぀のサむトず仲良くなり、すべおの人に十分なメモリがあり、ペヌゞはリク゚ストの200ms埌に返されたす。 Diemには䞍利な点よりも倚くの利点があるこずを考えるず、この事実に非垞に満足しおいたす。これに぀いおは、これではなく、以䞋の投皿で説明したす。

小さくおも反応の良いコミュニティも楜しいです。 応答の速さから刀断するず、デベロッパヌは毎日コミュニティにアクセスし、Googleに送信されるのではなく、応答する意思がありたす。 Provlinki 1、2 



Symfonyの最高の䌝統では、Diemは以䞋を含む高品質で明確なドキュメントに支えられおいたす。

-週ディ゚ム

7日間で開発に没頭し、実際には2時間で毎週のコヌスのすべおのステップを行うこずができたす

-䞀般的なタスクの䜿い方のヒント

-およびCMSのすべおの機胜の詳现なステップバむステップの説明



さらに、コミュニティにアドバむスを求めるこずができるフォヌラムずGoogleグルヌプがありたす。

これはすべおoff.site diem-project.orgにありたす



そうそう。 diem-project.ruが英語が苊手な人にずっお有甚であるこずを完党に忘れおいたした-diem-project.orgの郚分的に翻蚳されたクロヌン、その䜜成者Vladislav Lezhnevは最埌の投皿の埌に連絡を取り、Diemに぀いお少し話し、基本的に同意したしたこのCMSは泚目に倀するものであり、䜿甚すべきであるずの意芋。



画像 興味深い事実プロゞェクトの倧郚分は、2009幎8月23日から2010幎1月31日たでの期間に1人によっお䜜成され、その埌、さらに5人の開発者がプロ​​ゞェクトに登堎したした。



哲孊



コンテンツ管理の䞻なアむデアはブロッキングです。 埓来のCMSでアトミックコンテンツナニットがペヌゞテキストでもフォトギャラリヌでもであり、ペヌゞ䞊のブロックの䜿甚が远加で実装され、倚くの堎合非垞に䞍䟿な堎合、Diemではアトミックコンテンツはブロックですりィゞェットでもありたす。



その結果、コンテンツ構造は次のようになりたす。テンプレヌト->ゟヌン->ペヌゞ->りィゞェット



たずえば、2列ず3列の2぀のテンプレヌトを䜜成し、りィゞェットを配眮できるペヌゞゟヌンを決定したした。 これでコヌディングが終了し、サむトの管理が開始されたす。 ペヌゞを䜜成し、必芁なブロックをゟヌンにドラッグアンドドロップし、ブロックを個別に線集できたす。 特別な機胜が必芁な堎合は、モゞュヌル以䞋のモゞュヌル開発の䟋を䜜成したす。モゞュヌルは、ブロックずこのブロックのコンテンツの特定の凊理を行いたす。 そしお、新しい特定のブロックを必芁な堎所に、必芁なずきに远加したす。 クラむアント顧客はこれを行うこずができたす。



たずえば、以前はサむドバヌでいく぀かのブロックを亀換する必芁がしばしばありたしたブロックの堎所はテンプレヌトでハヌドコヌディングされおいたした。もちろん、これは迅速か぀簡単に行われたしたが、ハンドルずコヌドで行われたした。 そしお、ここに短所がありたす顧客のための長い倉化、線集䞭に゚ラヌを起こす可胜性。 これで、クラむアント自身が必芁に応じおブロックを所定の堎所に再配眮できたす。



ペヌゞコンテンツの管理の䟋を瀺したす。





この図では、ペヌゞがゟヌンずりィゞェットブロックに分割されおおり、それらをドラッグできるこずがわかりたす。





この図では、開いおいるメディアギャラリヌ、パンくずリストりィゞェット線集りィンドり、およびペヌゞに远加できるりィゞェットパネルが衚瀺されおいたす。



独自のモゞュヌルを䜜成しようずしおいたす



最埌のプロゞェクトの生涯から䟋を挙げたす。囜ごずの郚門ず、圓然のこずながら管理の可胜性を備えたホテルのデヌタベヌスを䜜成する必芁がありたす。 これにはどれくらい時間がかかるず思いたすか 芋おみたしょう...



ステップ1

たず最初に、デヌタベヌスを蚭蚈したすDoctrineずYAMLファむルを䜿甚しお、これを行うのは楜しいです

Hotel :<br/> actAs : [ DmSortable, DmGallery ] <br/> columns :<br/> name : { type : string( 255 ), notnull : true } <br/> country_id : { type : integer } <br/> url : { type : string( 255 ) } <br/> text : { type : clob, extra : ckeditor } <br/> is_active : { type : boolean, notnull : true , default : true } <br/> rating : { type : float } <br/> status : { type : integer( 4 ), default : 0 } <br/> votes : { type : integer } <br/> relations :<br/> Products : { foreignAlias : Hotels, class : Product, refClass : ProductHotel } <br/> Country : { foreignAlias : Hotels } <br/> <br/> Country :<br/> columns :<br/> name : { type : string( 255 ), notnull : true } <br/> slug : { type : string( 255 ), notnull : true } <br/>







ホテルのテヌブル、囜のテヌブル、それらの間の関係など、必芁なものはすべお瀺されたようです。 このコヌドには、 is_active, DmSortable, DmGallery extra: ckeditor.



プロゞェクト党䜓のテヌブルの動䜜をグロヌバルに定矩するいく぀かのDiem衚蚘が含たれおいたすis_active, DmSortable, DmGallery extra: ckeditor.





is_active



の意味は、ホテルのリストには「アクティブ」オブゞェクトず「非アクティブ」オブゞェクトがあるこずを今やdiemが知っおいるずいう事実にありたす。 管理䞋で、ajaxアクティビティを介しお管理するこずができ、ペヌゞで衚瀺するず、アクティブなレコヌドのみが衚瀺されたす。

extra: ckeditor



は線集時にextra: ckeditor



远加したす。

DmSortable



ホテルのリストを手動で゜ヌトできたす

DmGallery



無制限の数の写真を各ホテルに添付できたす。 すべおのファむルは、Mediaコンポヌネントを䜿甚しおDiemに保存および管理されたす。 画像をロヌドしたり、さたざたな方法を䜿甚しおサむズにトリミングしたりするために独自のハンドラヌを蚘述する必芁はありたせん。さらに、テンプレヌトでは任意のサむズの画像を指定できたす。



ステップ2

次に、 モゞュヌルずコンポヌネントの゚ントリを敎理する方法をシステムに指瀺する必芁がありたす 。これは、察応する蚭定ファむルでYAMLを䜿甚しお再床行われたす。



"" :<br/> <br/> hotel :<br/> model : Hotel<br/> page : true <br/> name : '|' <br/> admin : true <br/> components :<br/> searchForm :<br/> name : ' ' <br/> searchResults :<br/> name : ' ' <br/> show :<br/> <br/> country :<br/> model : Country<br/> name : '|' <br/> admin : true <br/>







私たちがやったこずホテルの゚ントリはペヌゞであり、ホテルず囜には管理むンタヌフェヌスが必芁であり、フロント゚ンドにはホテルビュヌ、ホテル怜玢フォヌム、怜玢フォヌム結果のブロックが必芁だず圌らは蚀いたした。 さらに、キヌワヌドlist show



フロント゚ンドのコンポヌネント名でのlist show



により、リストたたは単䞀オブゞェクトの遞択を自動的に生成できたすデヌタベヌスク゚リを蚘述する必芁はありたせん。



デヌタベヌススキヌマずモゞュヌルスキヌマの説明の埌、コン゜ヌルで実行したす。

symfony doctrine:generate-migrations-diff

symfony doctrine:migrate

symfony dm:setup








生成されたORMモデル、フィルタヌ、Doctrineフォヌム、ホテルおよび囜を管理するための管理モゞュヌルを、必芁なアクションずテンプレヌトのすべおのセットずずもに取埗したす。









20分間の時間ず玄200文字の印刷で悪くありたせん。 私は怠laな人ずしお、暙準機胜を生成する可胜性を喜んでおり、匷力で高品質の機胜を愛する人ずしお、私はショックを受けたした、たずえば、特定のフィヌルドによるフィルタリング、すべおのコンテンツでのフルテキスト怜玢も可胜ですモゞュヌル。



「そしおこれだけではありたせん」C

ギフトずしお、フロント゚ンド甚に生成されたテンプレヌトを取埗し、ペヌゞの任意の領域にドラッグアンドドロップできるようになりたす。 残念ながら、Diemは心の読み方、タむプセット、およびデザむンの䜜成方法を知りたせん。したがっお、この䜜業は自分で行う必芁がありたすが、ここでは嬉しい驚きがありたす。 なぜなら この蚘事は既に肥倧化しおいたす。「ホテルリスト」ブロックの䟋を挙げたす。



<?php <br/> <br/> echo _open( 'div.product_list' );<br/> <br/> echo _open( 'ul.smartcolumns' );<br/> <br/> foreach ( $hotels as $hotel )<br/>{<br/> $url = _link( $hotel )->getHref();<br/> $data = 'infotext' ;<br/> <br/> ?> <br/> <li style= "cursor:pointer;" onclick= "window.location = '<?php echo $url ?>';" ><div class = "block hotel" ><br/> <a href= "<?php echo $url ?>" ><br/> <?php if ( $hotel ->getNbMedias()) echo _media( $hotel ->getFirstMedia())->width( 100 ) ?> <br/> </a><br/> <div class = "txt" ><br/> <a href= "<?php echo $url ?>" ><b class = "name" > <?php echo $hotel ->name ?> </b></a><br /><br/> <div class = "txt2" > <?php echo $hotel ->rating ?> </div><br/> <?php echo $data ?> <br /><br/> </div><br/> </div></li><br/> <?php <br/>}<br/> <br/> echo _close( 'ul' );<br/> <br/> echo _close( 'div' );<br/> <br/>use_javascript( '/js/smartcolumns.js' ); <br/>







そしお、怜玢フォヌムをオヌトコンプリヌトするアクションの䟋

<php



/ **

*ホテルアクション

* /

クラス hotelActions は myFrontModuleActionsを拡匵したす

{



パブリック 関数 executeAutocomplete  dmWebRequest $ request 

{

$ query = $ request- > getParameter  'query' 、 0  ;

if  $ query 

{

$制限 = 10 ;

$ q = RequestFilter :: sanitizeString  $ query  ;



$ query = Doctrine_Query :: create  

-> 遞択  'h.id、h.name' 

->  'Hotel h' から

-> where  "LOWERnameREGEXP '^ {$ q} 。* | [^-] [-] {$ q} [^] * $'" 

-> orderBy  'h.rating DESC、h.name ASC' 

-> limit  $ limit  ;



$ res = $ query- > execute   ;



if  count  $ res  

{

$ json = array 

'提案' => 配列   、

'data' => 配列   、

 ;



foreach  $ res as $ key => $ val 

{

$ json [ 'suggestions' ] [ ] = $ val- > name ;

$ json [ 'data' ] [ ] = $ val- > id ;

}



$ this- > getResponse   -> setContentType  'application / json'  ;

return $ this- > renderText  json_encode  $ json   ;

}

}



return sfView :: NONE ;

}



}




説明したすべおの機胜のレむアりトずアクションには玄2時間かかりたした。



萜ずし穎



䞀蚀で蚀えば、開発䞭にどんな困難が埅ち受けおいるかを瀺したすシステムは未加工でオヌプン゜ヌスのたたです



1.ロヌド時に、ロシア語のファむルの名前は倉曎されたせん。URLの生成時に、もちろんurl-valid文字ぞの倉換が発生したすが、䞀郚のファむルがロヌド埌に単玔に消えるずいう問題がありたした。 より正確には、ファむルシステムずデヌタベヌスに残っおいたしたが、Diemはそれらを認識したせんでした。 ここでの理由は、mb_string_functionsの代わりに非掚奚の関数を䜿甚しおいるためだず思いたす。 フランス人はUTF-8の行に出䌚うはずでしたが...䞀般に、私はあたり掘り䞋げなかったので、ファむル名をurlの有効な文字に倉換するこずで扱われたしたa-z0-9_-



2.メディアギャラリヌにアクセスするたびのメモリ消費量は、ファむルの増加ずずもに増加したす。これは、倧芏暡なプロゞェクトでは受け入れられたせん。 500MBの画像を含むホテルのデヌタベヌスの堎合、メディアラむブラリは開くこずを拒吊したした。

コヌドを詳しく調べおみるず、ラむブラリオブゞェクトにアクセスするたびに同期呌び出しが芋぀かりたした。これにより、デヌタベヌス内のストレヌゞのフォルダヌずファむルの構造に関する情報が最新になりたす突然FTP経由でファむルをアップロヌドしたす。

ものはリ゜ヌス集玄型であり、それほど必芁ではありたせん。 ファむルは管理むンタヌフェむスからのみダりンロヌドされるこずになっおいたす。同期のために行をコメントアりトしお萜ち着かせおください。



3. Diemは、すべおのCSSおよびJavaScriptファむルを瞮小および結合しお、ペヌゞのレンダリングを高速化したす。 たた、Yahooのオタクから教えられたように、ペヌゞの最埌にjavascriptが含たれおいたす。 テンプレヌトでjavascriptを䜿甚し、jQueryを䜿甚する堎合は、ペヌゞヘッダヌでjqueryラむブラリを接続する必芁がありたす。 これを行うには、config / dm / config.ymlで、ヘッダヌに含めるJavaScriptファむルを指定する必芁がありたす。 Google CDNの䜿甚を指定しお、jqueryラむブラリをそこにダりンロヌドするこずもできたす。



たずめ



1.これで、Diem CMSずは䜕か、このCMSを䜿甚しお埗られる開発䞊の利点、およびコンテンツ管理パラダむムが他のCMSずどのように異なるかがわかりたした。

2. VPSたたは専甚サヌバヌでDiemを䜿甚できるこずはわかっおいたすが、共有ホスティングでは詊さない方が良いでしょう。 ただし、実隓のために、ホスティングでペヌゞを生成するのにかかる時間をミリ秒で知るこずは誰もが興味を持っおいるず思いたす

3.あなたはあなた自身のモゞュヌルを開発する䟋に粟通したした、そしお私は、Diemであなたがこれをあなたの完党な手で簡単か぀迅速にできるこずを確認したこずを望みたす。

4.あなたは、どのような困難が生じる可胜性があり、それらを克服するかを孊びたした。



私が䌝えたいこずのすべおがこの蚘事に圓おはたるわけではありたせん。 SEOの最適化、ナヌザヌアクセス制埡の蚭定、およびレむアりトのバグを解消するための小さなCSSの倉曎に関する質問は、説明されおいたせんでした。 これらのトピックを次の蚘事に収める予定です。



PS゚ラヌを芋た人は誰でも黙っお個人的な手玙を曞くこずはできたせん-私は感謝し、すぐにそれを修正したす。



All Articles