
こんにちは、habrahabrの読者と著者です! 今日は、FFCMSサイト用の別の小さなボックスコンテンツ管理システムについてお話ししたいと思います。その開発は(以前-私自身のプロジェクトのために、そして今ではコミュニティ全体のために)私が1年ちょっとやっています。 この記事では、このシステムの機能について簡単に説明し、メインシステムインターフェイスの機能の範囲について簡単に触れ、技術的な詳細について少し説明します。
免責事項:「革新的なシステム」の開発者のふりをするつもりはなく、何も販売していません。開発者とウェブマスターの生活を簡素化するオープンコンテンツ管理システムを導入したいだけです。 このシステムは、一般的なフレームワークに基づいていません-拡張機能、ルーティング、テンプレートビュー間の相互作用のための最小限のメソッドのみが実装されています。
1.このシステムは何ですか?
多くの人はすぐに「まあ、別の自転車...」と結論を下すでしょうし、おそらく正しいかもしれませんが、FFCMSサイトのコンテンツ管理システムについてお話ししましょう。
FFCMS (英語の「高速柔軟性コンテンツ管理システム」)は、mysqlサーバーデータベースを使用してphpで記述された高速で拡張可能なサイトコンテンツ管理システムです。 このシステムを開発するとき、いくつかの条件を設定しました。
- 速度と低リソース消費-この問題は多くの場合最も困難です。開発の利便性、コードの冗長性、最終アプリケーションの速度のいずれかを選択する必要があります。 私は何度も自分自身に質問をしました-シンフォニーを取り、作業ロジックと補助メソッドを実装する必要性を放棄できますか? その結果、シングルトンパターンを使用した最も単純な実装のモデルに着手しました(これはもちろん適切であるとは限りませんが、常に単純です)。
- インターフェイスをすばやくプロトタイプ化する機能-ここでの解決策は、ほとんどのブートストラップに馴染みのあるTwigテンプレートエンジンとCSSフレームワークを使用することでした。
- 機能を迅速に拡張する機能-インタラクションロジックを、コンポーネント、モジュール、フックの3つの主要な拡張機能に分割することを決定しました。これについては、以下で簡単に説明します。
- サイトの多言語バージョンを維持する機能(拡張された多言語対応)-この問題は、複数の言語でサイトから情報を配信する必要がある場合に特に関連しています。 。
データベースを操作するために、SQLクエリのセキュリティを確保するために、EMULATE_PREPARESを無効にした標準のPHP機能-PHP :: PDOが選択されました。 CKeditor(html)およびwysibb(bbcode)は、システムの標準的なビジュアルエディターとして使用されます。 開発の特定の段階でのシステム更新の検証SemVer(major.minor.path)の仕様に従って分類することにしました。
2.システムインターフェイス
ユーザーとサイトの相互作用のさまざまなモデルを実装する際、相互作用のソースと実行される操作の目的に応じて、すべてのシステムインターフェイスを4つの主要なタイプに分けることが決定されました。 そこで登場したのは、ユーザーインターフェイス、システムインストーラーインターフェイス、管理者インターフェイス、およびアプリケーションAPIです。
ユーザーインターフェース
このインターフェイスは、ユーザーと実際のサイトアルゴリズムとの相互作用の実装を提供します。 サイトへのすべてのユーザーリクエストは、ユーザーインターフェイスのフレームワーク内で正確に処理されます(AJAXインタラクションを除く-この場合、apiインターフェイスが使用されます)。
標準インストール後、このインターフェースは次のようになります。
管理インターフェース
次に、このインターフェイスは、サイトのコンテンツと管理者(管理機能)との間の対話の可能性を提供します。
サイトでの承認と管理パネルへの移行後、このインターフェイスは次のようになります。
インストーラーインターフェイスとAPI
インストーラーインターフェースは、機器へのシステムの簡単なインストールを提供します。 また、このインターフェイスでは、システムの古いバージョンから新しいバージョンにシステムを更新する機能が実装されました。
同様に、APIにはテンプレート実装がありません-そのタスクは、REST APIと何らかの類似性を実装することです。 このインターフェースの主な目標は、要求を処理し、必要に応じて処理結果を返すことです-AJAX相互作用は良い例です。
3.システム拡張
前述したように、すべてのシステム拡張機能は3つの主要なタイプで表されますが、実装のタイプの総数は5であり、その中には次のものがあります。
- コンポーネント-内部リクエストURIに応じたサイトコンテンツの生成。
- モジュール-テンプレートの位置を操作します。
- フック-システム拡張、サードパーティのコード、およびサービス間の相互作用の方法を実装します。
- ApiCallbackは、システムAPIを使用してシステムの内外で対話するための単純なREST APIの実装です。
- Cron-スケジュールに従ってタスクを実行できる拡張機能へのアドオンの実装(Cronタスク)。
拡張機能の構造とその実装については、長い間話すことができます。結局、各拡張機能は、そのような実装の目的に応じて、いずれかの実装を対象としています。
システム内の拡張機能に関するデータは、データベースの特別なテーブル(_extensions)に格納されます。これは、拡張機能の種類、実装ディレクトリ、構成、バージョン、互換性、およびこの拡張機能の動作規則に関する情報(モジュールの場合-コンポーネントのルーティングが実行される)実装ディレクトリの名前に応じて)。
コンポーネント、モジュール、およびフックには、2セットの実装を含めることができます。
- front:ユーザーインターフェースの拡張ロジック
- 戻る:管理者インターフェイスの拡張機能のロジック(コンテンツ管理、設定など)
*私は注意したい-プログラマにとって、「フロント」と「バック」の概念はアプリケーション実行領域(クライアントまたはサーバー)に関連付けられることが多いことを理解しますが、この場合、これらの値はシステム内の相互作用のターゲットインターフェイスを分類します。
拡張機能については、作業と相互作用のロジックから完成したサンプルの実装まで、別の記事で説明する予定です。
4.小さなプレゼンテーション
システムデバイスとその機能に関する簡単な紹介プレゼンテーションを準備しました。 プレゼンテーションでは、場所によっては、上記で提示した資料が少し広く取り上げられています。
5.参照とあとがき
まず、1人の開発者のこのような取るに足らない(規模に関して)プロジェクトを支援し、スタートアップアシスタンスプログラムへの参加を承認して
くれたhabrahabrチームに
感謝します。
プロジェクトの公式サイト:
ffcms.ru (このサイトの英語版の品質についてはごめんなさい)。
githubのプロジェクト:
git@github.com:zenn1989 / ffcms.git 。
拡張機能
ディレクトリ :
ffcmsディレクトリ (ご参加
いただきありがとうございます)。
私自身と「自分から」について少し:私の名前はPyatinsky Mikhailです。私は控えめな都市ケルチ(クリミア)の住民です。 残念ながら、プログラミングに関する高等教育を受けていません。 私たちの都市では、ユニットがプログラミングに真剣に関与しており、さらにWeb開発に関与しています(私たちの都市にWebスタジオはありません)。したがって、仮想環境(リモート開発)で開発経験(チームを含む)のほとんどを得ました。 私のコードとその品質は理想からはほど遠いことを理解しており、yii、シンフォニー、またはその他のすばらしいCMFフレームワークと同等の方法ではありませんが、プロジェクトの開発と改善、およびそのコードの品質に参加できます。 私は常に対話を受け入れています。