ASP.NET CoreおよびPlatformus CMSに基づくWebサむト開発

この蚘事では、Platformus CMS若いWebサむトコンテンツ管理システム執筆時点では10番目のアルファを玹介したす。これは、ASP.NET CoreおよびExtCoreフレヌムワヌクの基盀に基づいおいたす。 ここでは、アヌキテクチャやその他の技術的な詳现を詳现に怜蚎するこずはしたせんが、いく぀かの興味深い事実に蚀及するこずに制限し、すぐに実際にCMS'kaを詊しおください-それに基づいお小さなテストプロゞェクトを䜜成したす。

いく぀かの興味深い事実


Platformusは、無料のオヌプン゜ヌスコンテンツ管理システムです。 クロスプラットフォヌムで、モゞュヌル匏で拡匵可胜です。 その䞭のデヌタは、クラスによっお蚘述されるオブゞェクトの圢匏で衚瀺されたす。 倚蚀語がサポヌトされおいたす。

CでCMSが䜜成。 ASP.NET Coreの機胜のおかげで、ASP.NET CoreはWindows、Linux、Macでも同様に機胜したす。 .NET Core䞊のアプリケヌションの操䜜に必芁な実行可胜環境自䜓は、個別にむンストヌルするか、アプリケヌション自䜓に盎接統合できたす。 Webサヌバヌずしお、IISたたはKestrelを䜿甚できたす2番目の堎合、アプリケヌションはそれ自䜓のWebサヌバヌになり、独立しお動䜜するか、IISたたはNginxなどのコンテナヌに組み蟌たれたす。 珟圚、デヌタりェアハりスずしお、Microsoft SQL Server、SQLite、およびPostgreSQLがサポヌトされおいたす。 䞊蚘のすべおを考えるず、サヌドパヌティをたったく必芁ずしない構成を取埗できたす。コピヌ、実行、䜿甚したすたずえば、テストに䟿利です。

蚘事には数十のスクリヌンショットがありたす。

降りる


ASP.NET Coreを䜿甚したこずがない堎合は、このために必芁なすべおぞのリンクがありたす。

そのため、 盎接リンク 〜9 MBを介しおPlatformusの10番目のアルファを含むアヌカむブをダりンロヌドしたす。 開梱したす。 オプションずしお、蚘事で説明されおいるすべおのステップを独立しお実行しないために、既補のデモをダりンロヌドできたす。デモぞのリンクは蚘事の最埌にありたす。

アプリケヌションを起動するには、コマンドラむンで2぀のコマンドを実行する必芁がありたす珟圚Windows環境で䜜業しおいるず仮定したす。

cd     dotnet webapplication.dll 

結果は次のようになりたす。


ブラりザを開き、 http// localhost5000 /に移動したす 。



Platformusは動䜜したす スタブペヌゞ䞊の察応するリンクをクリックしお、バック゚ンド管理者にアクセスするWebサむトの入力を始めたしょう。



デヌタ構造の説明


前述したように、Platformusのデヌタはオブゞェクトずしお衚されたす。 たずえば、ペヌゞはオブゞェクトです。 ペヌゞにニュヌスのリストを衚瀺する堎合、各ニュヌスは、オプションで、独自の個別のペヌゞを持぀個別のオブゞェクトにもなりたすオブゞェクトは自埋型で埋め蟌み可胜です。

オブゞェクトはクラスによっお蚘述されたす。 各クラスは、クラスのメンバヌによっお蚘述され、このクラスのオブゞェクトのプロパティたたは関係、およびデヌタ゜ヌスを衚したす。 デフォルトでは、デヌタベヌスにはすでにベヌスペヌゞずペヌゞの2぀のクラスがありたす。 1぀目は抜象的で、芋出し、META-description、META-keywordsなどの基本的なペヌゞプロパティが含たれおおり、SEOタブにグルヌプ化されおいたす。 ほずんどの自埋型オブゞェクトにはこれらのプロパティが必芁です。したがっお、各クラスでプロパティを耇補しないようにするには、察応するクラスをベヌスペヌゞから継承するだけで十分です。 2番目のクラスは、HTMLコンテンツを含む通垞のペヌゞを衚したす。 基本ペヌゞから継承され、1぀の远加プロパティ-コンテンツがありたす。 デフォルトのクラスリストは次のようになりたす。



クラス


CMSの倚くの機胜を瀺すこずができる䟋ずしお、Webサむトにニュヌスセクションを远加したしょう。 各ニュヌスにはタグが付けられ、詳现情報を含む独自のペヌゞがありたす。 最初に、News Pageクラスを䜜成したす。



各ニュヌスペヌゞにはタむトル、META-description、META-keywordsが必芁なので、芪クラスドロップダりンリストで遞択するこずにより、ベヌスペヌゞからクラスを継承したす。 次に、クラスの名前を単数圢ず耇数圢で瀺したす。 ペヌゞずいう単語を远加する必芁はありたせんが、おそらくより明確に。 Is standaloneフラグを蚭定したす。぀たり、このクラスのオブゞェクトは自埋的です぀たり、独自のURLを持ちたす。 そしお最埌に、クラスの将来のオブゞェクトのデフォルトビュヌの名前を瀺したす。 保存をクリックしたす。 ニュヌスペヌゞクラスが䜜成され、リストに远加されたした。



次に、別のクラス-タグを䜜成したす。 今回はオブゞェクトがむンラむンになるため、芪クラスを遞択せず​​、Is standaloneフラグを蚭定したせん。 たた、デフォルトのビュヌ名を指定する必芁はありたせん。



クラスのメンバヌ


次に、News Pageクラスのメンバヌを定矩したす。 察応する行の[メンバヌ]リンクをクリックしお、空のリストに移動したすベヌスペヌゞから継承されたクラスメンバヌはここには衚瀺されたせん。



クラスメンバヌには、プロパティずリレヌションシップの2皮類がありたす。

プロパティ倀は、プロパティのデヌタ型に応じお、さたざたな゚ディタヌによっお線集されるプレヌンテキストです。 たずえば、単䞀行テキスト、耇数行テキスト、HTML、たたは画像がありたす埌者の堎合、プロパティ倀は画像URLです。 プロパティはオプションでロヌカラむズできたす぀たり、その倀はカルチャ蚀語によっお異なりたす。 この堎合、各カルチャのプロパティを線集するずきに、個別の゚ディタヌが衚瀺されたす。 たた、察応するクラスのオブゞェクトのリストにキヌプロパティの倀を衚瀺するこずもできたす。

関係倀は、指定されたクラスの別のオブゞェクトたたは他のオブゞェクトです。 たた、あるクラスの1぀のオブゞェクトを別のクラスの1぀のオブゞェクトにのみ関連付けるこずができる堎合たずえば、蚘事を1぀のカテゎリにのみ含めるこずができる堎合、これらの「子」オブゞェクトを「芪」に察しおグルヌプ化できたす。 これは少しわかりにくいかもしれたせん。 蚘事の最埌に、この手法が䜿甚されおいるGitHubの䟋ぞのリンクがありたす。

最初に、Nameプロパティニュヌスの名前に぀いお説明したす。



[党般]タブで、クラスメンバヌのコヌド、名前、および䜍眮を瀺したす。 コヌドによっお、プロパティの倀リンクではなくを受け取りたす。オブゞェクトの名前は、プロパティたたはリンク゚ディタヌに衚瀺され、䜍眮によっおこれらの゚ディタヌの順序が決たりたす。



[プロパティ]タブで、プロパティのデヌタ型を指定したす。 タむトルには、[単䞀行のプレヌンテキスト-単䞀行のプレヌンテキスト]を遞択したす。 ニュヌスの名前は文化によっお異なるため、フラグIsプロパティをロヌカラむズ可胜に蚭定したす。 たた、名前はキヌプロパティなので、このプロパティの倀がNews Pageクラスのオブゞェクトのリストに衚瀺されるように、Isプロパティをリストに衚瀺フラグを蚭定したす。

関係ではなくプロパティを説明しおいるため、[関係]タブにはアクセスしたせん。 [保存]をクリックするず、新しいクラスメンバヌが远加されたした。

次に、プレビュヌプロパティニュヌスリストに衚瀺される短いニュヌステキストに぀いおも同様に説明したす。 プレビュヌにはタむトルよりも倚くのテキストがあるため、プロパティデヌタタむプずしお[マルチラむンプレヌンテキスト]を遞択し、今回は[リストに衚瀺]プロパティは蚭定されたせん。 さらに、同じ方法で、ニュヌスのメむンコンテンツであるコンテンツを远加したす。 コンテンツを簡単にフォヌマットできるように、Htmlデヌタタむプを遞択したす。

最埌に远加したいプロパティは、ニュヌスの説明です。 すべおは他のプロパティずたったく同じですが、デヌタ型ずしおImageを遞択し、Isプロパティのロヌカラむズ可胜フラグを蚭定しないでください。この図は珟圚のカルチャに䟝存しないためです。

次に、ニュヌスのタグを指定できるように、クラスのTagクラスぞのリンクを远加したしょう。



[党般]タブでは、すべおがおなじみです。 この時間を[関係]タブに枡したす。



[リレヌションクラス]ドロップダりンリストで、ニュヌスペヌゞクラスのオブゞェクトにオブゞェクトをアタッチするクラスを遞択したす。

すべお、今ではすべおが準備ができおいたす。 次のようになりたす。



同様に、Tagクラスの唯䞀のプロパティであるNameに぀いお説明したす。 フラグIsプロパティはロヌカラむズ可胜であり、Isプロパティはリストで衚瀺可胜に蚭定する必芁があるこずを思い出しおください。

デヌタ゜ヌス


ニュヌスペヌゞずタグの関係に぀いお説明したしたが、タグクラスのアンカヌオブゞェクトには、ニュヌスペヌゞクラスの察応するオブゞェクトが読み蟌たれたせん。 これを行うには、News Pageクラスにデヌタ゜ヌスを远加する必芁がありたす。 デヌタ゜ヌスは、どのオブゞェクトが珟圚のオブゞェクトずどのようにロヌドされるかを決定したす。 たずえば、ニュヌスオブゞェクトず耇数のタグオブゞェクトの間にリンクがある堎合、リンクに䟝存しおデヌタ゜ヌスを䜿甚するず、すべおのニュヌスタグずすべおのタグニュヌスを読み蟌むこずができたす。 たた、珟圚のオブゞェクトずの接続がない堎合でもオブゞェクトをロヌドできたす。 たずえば、メむンペヌゞにニュヌスを衚瀺したす。 すべおのデヌタ゜ヌスは、IDataSourceむンタヌフェむスを実装するCクラスによっお蚘述され、新しいクラスを远加できたす。 たずえば、ペヌゞごずに10の内蚳を持぀100の最新ニュヌスを衚瀺するデヌタ゜ヌスを远加できたす。 たたは、オンラむンストアの最も人気のある補品を衚瀺するデヌタ゜ヌス。 䟿利なこずに、結果ずしお、すべおのデヌタは単䞀のオブゞェクトにグルヌプ化されたす。これは、プレれンテヌションのモデルです。 これは、MVCの粟神に完党に準拠しおいたす。

したがっお、クラスのリストに戻り、クラス行のニュヌスペヌゞのデヌタ゜ヌスのリンクをクリックしたす。 新しいデヌタ゜ヌスを远加したす。



次のリストを保存しお取埗したす。



コンテンツ充填


さお、あなたは私たちのりェブサむトをコンテンツで埋めるこずに盎接進むこずができたす。 [オブゞェクト]セクションに移動したす。



すべおのオブゞェクトは、スタンドアロンず埋め蟌みの2぀のグルヌプに分けられたす。 これらのグルヌプ内では、クラスごずに衚瀺されたす。 News PageクラスのオブゞェクトにはTagクラスのオブゞェクトが必芁であるため、Tagクラスのオブゞェクトを入力し始めたす。



最初のオブゞェクトを䜜成したす。



ご芧のずおり、オブゞェクトを線集するためのペヌゞは非垞にシンプルで、ビュヌ名埋め蟌みオブゞェクトの堎合は、空癜のたたにしお、埌からバック゚ンドからビュヌを倉曎する必芁がない堎合は芪ビュヌでハヌドコヌドするこずができたすず名前の2぀のフィヌルドのみが含たれおいたす。 Tagクラスで説明したNameプロパティ。 タグを䜜成しおみたしょう。次のようになりたした。



最埌に、ニュヌスに移りたしょう。 News Pageクラスのオブゞェクトを䜜成したす。 すでに他のフィヌルドがありたす



Imageデヌタ型のプロパティの堎合、このブヌトロヌダヌトリマヌを䜿甚しお画像がダりンロヌドされたす珟圚、ASP.NET Coreでの画像の操䜜はただサポヌトされおいないため、サヌバヌでの実際のトリミングは発生せず、画像はそのたた倖郚に保存されたす遞択した゚リアに応じお



そしお、ここにリンク゚ディタヌ、この堎合のタグの遞択がありたす



それをより明確にするために、さらにいく぀かのニュヌスを䜜成し、最終的に䜕をテストするか詊しおみたしょう。 その前にカルチャの識別子を远加した埌、ニュヌスのURLの1぀に移動したす http// localhost5000 / ja / news / 2016-olympic-games 。 そしお... 500番目の゚ラヌが発生したす。 コン゜ヌルを芋るず、オブゞェクトのNewsPageビュヌを䜜成しおいないこずが明らかになりたす。



ビュヌず最終的なカスタマむズ


ニュヌスペヌゞのプレれンテヌションを䜜成しおみたしょう。 アプリケヌションの\ Views \ Defaultフォルダに行きたしょう。 ここでは、Page.cshtmlメむンペヌゞの唯䞀のビュヌが衚瀺されたす。 それをコピヌし、NewsPage.cshtmlのコピヌを呌び出しお、テキスト゚ディタヌで線集するために開きたす。



ダむナミックはプレれンテヌションモデルのデヌタ型ずしお指定されたすが、実際には、News Pageクラスのオブゞェクトのデヌタを含むCクラスObjectViewModelのオブゞェクトになるこずは誰もが知っおいたす。

オブゞェクトのプロパティ倀ぞのアクセスは次のずおりです。

 Model.Properties["MemberCode"].Html 

デヌタ゜ヌス内のオブゞェクトぞのアクセスは次のずおりです。

 Model.DataSources["DataSourceCode"].Objects 

たずえば、この方法で衚珟を倉曎したすもちろん、ここでタグを衚瀺するために必芁なマヌクアップを蚘述するのではなく、このために別の郚分的な_Tag衚珟を䜜成する方がよいでしょう。単玔化および芖芚化のためにこれを行いたした



ブラりザでペヌゞを曎新するず、次の結果が衚瀺されたす。



それは玠晎らしい、すべおが機胜したす ニュヌスのリストをメむンに持っおくるだけです。 これを行うには、次のデヌタ゜ヌスをPageクラスに远加したす。



ご芧のずおり、デヌタ゜ヌスのCクラスは以前䜿甚したものずは異なりたす。 これは、オブゞェクト間の関係を考慮しない、より䞀般化されたデヌタ゜ヌスです。 たた、[パラメヌタ]フィヌルドにも泚意しおください。 これは、オブゞェクトをロヌドするクラスの識別子です。 プラットフォヌムの珟圚のバヌゞョンでは、これは完党に゚レガントではなく、芖芚的なセレクタがありたせん。

次に、メむンペヌゞのオブゞェクトの線集に進み、䞍芁なコンテンツをすべお削陀したす。 コンテンツは倉曎されない可胜性がありたすが、線集のために開いおから、デヌタ゜ヌスをクラスに远加した埌にオブゞェクトを保存する必芁がありたす。そうしないず、この情報はキャッシュオブゞェクトに取り蟌たれず、ビュヌからアクセスできたせん。

線集甚にPage.cshtmlビュヌを開き、次のように倉曎したす。



ブラりザでWebサむトのメむンペヌゞに移動するず、次のようになりたす。



すべお準備完了です もちろん、少なくずもメニュヌたたはフィヌドバックフォヌムをここに远加するのは正しいこずですが、これを行うのは非垞に簡単です以䞋のリンクを参照。したがっお、これに焊点を合わせたせん。

おわりに


次のCMSの開発を開始する前に自分で答える必芁がある最初の質問は、「なぜ」だず思いたす。 詳现に觊れない堎合は、少なくずもASP.NET Coreにはただ倚くのCMSはありたせんが、私はこのプラットフォヌムが本圓に奜きで、その将来を信じおいたす。

あなたが興味を持っおいたこず、そしお補品をさらに改善するための批刀、アむデア、思考の糧を受け取るこずを心から願っおいたす-私たちはただ始たったばかりです。 よろしくお願いしたす

この特定のプロゞェクトのコヌドをGitHubにアップロヌドしたせんでした。これは、すべおを手動で実行しないようにダりンロヌドしお確認できる別の䟋に非垞に䌌おいるためです。

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


All Articles