サイトの作成例に関するeZ Publishの概要

オープンソースのコンテンツ管理システムeZ Publishで簡単なサイトを作成する小さな例を挙げたいと思います。 キャンペーンに長所、短所、そしてもちろんそれがなぜ必要なのかを伝えようと思います。

はじめに


eZ Publish-エンタープライズオープンソースCMSとして位置付けられています。 GNU General Public Licenseの下で、eZ Systemsによって開発されました。
PHPで書かれています。
eZ Publishの主な機能は、オープン性、高いスケーラビリティ、および使用の柔軟性です。この場合、通常、企業の顧客を引き付け、他の人を怖がらせます。

システムの利点


欠点


まだ興味がありますか? 次に説明に進みます。 しかし、極端な初心者は、実際のタスクに直接行くことをお勧めします。

非常に短い説明


一般に、eZ Publishは、組み込みライブラリに基づくサイト開発環境であり、その上に相互接続された多数の機能が編成されています。
技術的な詳細なしで、システムの主要な要素について話してみましょう。

コンテンツモデル

このようなシステムを使用する基礎は、サイト要素が何らかのタイプまたはクラスのオブジェクトであるオブジェクト指向コンテンツモデルの理解に基づいています。
クラスは、一連のフィールドまたは属性から形成されます。 各属性は、そのデータ型に責任があります。 たとえば、線、画像、または単なるファイル。

各変更は、オブジェクトのバージョンにコミットされます。 必要に応じて、公開および変更したデータをより早く返すことができます。 将来の公開のために下書きを保存することもできます。

クラスのようなオブジェクトは、異なる言語への翻訳を持つことができます。

テンプレートエンジン

データを表すために、自己記述型テンプレートエンジンeZ Templateが使用されます。
テンプレートは、ほとんどの場合、ユーザーにデータを表示するときに使用されます。 たとえば、メールレターを送信するフォームや、クラスの属性の編集がどのように見えるかなどです。

eZテンプレートは、単なるデータを提示する手段というよりも、コーディング言語です。 Smartyに似た独自のそれほど単純ではない構文を持っているか、Smartyがそれに似ています(eZテンプレートは前世紀から開発されたため)。
テンプレート言語には、独自の制御構造、演算子または関数、コメント機能、変数の操作などがあります。 この機能のほとんどは、独自の演算子、関数を追加することで拡張でき、サイトでの作業が大幅に簡素化されます。

テンプレートのオーバーライド

データに独自のテンプレートがない場合、それに応じてデータは表示されません。
基本的な配信では、eZ Publishには表示するデータに必要なすべてのテンプレートがあります。
データの独自のプレゼンテーションを作成し、ugい標準テンプレートを使用しないようにするには、独自のテンプレートでオーバーライドする必要があります。
テンプレートはすべてのデータに使用されるため、これにより、基本的なインストールファイルを編集しなくても、好みに合わせてすべてのデザインを作成できます。

キャッシング

テンプレートをこのように密に使用するには、キャッシュツールを使用することが不可欠です。そうしないと、サイトは単に非常に遅くなります。
キャッシングにはいくつかのタイプがあります。

キャッシュの操作は、手動のキャッシュクリーニングができるだけ少なくなるように設計されています。 それでも、多くの場合、手動でクリーニングする必要があります。

ウェブサイト

このシステムにより、一度に1つのインストールで複数のサイトをホストできます。
このために、サイトへのアクセスが考案されました。
サイトアクセスは、次のような特定のサイトの設定を示します。

設定

システム設定はiniファイルに保存されます。 構成可能なほとんどすべてが設定ファイルに取り出されます。
したがって、それらを上書きするシステムも実装されました。
つまり、設定を上書きしたり、独自の設定を作成したりできます。

一般に、設定にはいくつかのレベルがあります。

拡張機能

拡張機能では、既存の機能を再定義するか、独自の機能を追加できます。 サイトのコードを保存する必要があるのは拡張機能です。
eZ Publishは、多くの標準的な便利な拡張機能も使用します。

モジュールと「良い」* URL

モジュールと(*)素敵なURLについても言及する価値があります。
各ノードには独自の一意のURLがあります。 2種類あります
1.コンテンツツリー内のノードの名前と位置に基づいて形成されるnice url。 たとえば、Folderオブジェクトの下にArticleオブジェクトがある場合、支払いURLは/ Folder / Articleになります
2.オブジェクトにアクセスするための基本モジュール-/ content / view / full / [NodeId]
どこで


実用的なタスク


目的:非常に単純化されたhabrahabr.ruホームページを作成して、Easy Publishingでの作業を実演します。
つまり、正の評価を持つメインへの投稿の結論。

私たちは単純な人ではないため、標準のインストーラーは使用しませんが、Easy Publishの喜びの全体的な負担をよりよく感じるために、すべてを手動で実行しようとします。

  1. ここで、 ez.no / eZPublish / Requirementsシステム要件を見つけることができます 。 一般的に、> = PHP 5.2、Apache 2、MySQL 5です。
  2. eZ Publish 4.4.0をダウンロード
    $ wget share.ez.no/content/download/103518/477729/version/1/file/ezpublishcommunity-4.4.0-with_ezc-gpl.tar.gz
  3. ファイルを解凍します
    $ tar xfz ezpublishcommunity-4.4.0-with_ezc-gpl.tar.gz
  4. 新しいデータベースを作成する
    mysql> create database habr default character set utf8;
  5. ベースを初期化する
    $ cd ezpublishcommunity-4.4.0-with_ezc-gpl
    mysql -uroot habr < kernel/sql/mysql/kernel_schema.sql
    mysql -uroot habr < kernel/sql/common/cleandata.sql
  6. ダウンロード拡張機能 narod.ru/disk/5898167001/habr-example-ezpublish.tar.gz.html
    Easy Publishのルートフォルダーにインストールします
    $ tar xfz habr-example-ezpublish.tar.gz
  7. VirtualHostを初期化する
     <VirtualHost habr:80>
         ServerName habr:80
         ServerAdmin root @ localhost
         DocumentRoot PATH
         <ディレクトリパス>
           オプションFollowSymLinksインデックスExecCGI
            AllowOverrideなし
           注文許可、拒否
           すべてから許可
         </ Directory>
         Rewriteengine on
         RewriteRule ^ / var / [^ /] + / cache / public /.*-[L]
         #既知のすべてのデータディレクトリについて、Apacheに直接提供させます
         RewriteRule ^ / var / storage /.*-[L]
         RewriteRule ^ / var / [^ /] + /ストレージ/.*-[L]
         RewriteRule ^ / var / cache / texttoimage /.*-[L]
         RewriteRule ^ / var / [^ /] + / cache / texttoimage /.*-[L]
         RewriteRule ^ /デザイン/ [^ /] + /(スタイルシート|画像| javascript)/.*-[L]
         RewriteRule ^ / share /アイコン/.*-[L]
         RewriteRule ^ /拡張子/.*-[L]
         RewriteRule。* /Index.php
     </ VirtualHost> 

  8. 管理パネルに入り、ロシア語を追加します
    habr / habr_admin / content / translationsに移動して追加します。
    User: admin
    Password: publish
  9. クラスを作成する
    レーティングが0を超える投稿のメインリストに作成します。
    便宜上、Habrクラスのグループを作成します。
    ここにhabr / habr_admin / class / grouplistを追加します
    • Frontpage識別子と1つのテキストフィールドを使用して、 Frontpageクラスを作成する必要があります。
      - Name [ ]
      このクラスのオブジェクトは、 habrメインページで利用できます
      このオブジェクトでは、必要な投稿が選択されます。
      これを行うには、作成されたHabrグループに移動し、「新しいクラス」をクリックします。
      属性を追加します。
    • また、ブログのリストをどこかに保存する必要があります。そのために、次のフィールドを持つブログ識別子とBlogsクラスを作成します。
      - Name [ ]
      - Description [ ]
      - [ ]
    • 同じフィールドに加えて、それぞれにブログのBlogクラス(id:blog)を作成します。
      - Index [. ] —
      - [ ]
    • 各ブログには投稿があります。そのために、クラスPost (id:post)を作成します
      マージンあり
      - Name [ ]
      - Content [ ]
      - Tags [ ]
      - Raiting [ ]
    これにより、クラスのリストが表示されます。


    すべてのクラスの準備ができました。コンテンツツリーの整理を開始できます。
  10. メインオブジェクトを作成する
    • 「サイト構造」に移動habr / habr_admin / content / view / full / 2
      クラスFrontpageのオブジェクトを作成します
    • ロシア語を選択してください。
    • 次に、「名前」フィールドにテキスト「投稿」を入力して公開します。
  11. カスタマイズ
    そのため、新しく作成されたオブジェクトはメインページに表示され、デフォルト(ノード2)では表示されません
    ファイルextension/habr/settings/siteaccess/rus/site.ini.append.phpを編集する必要がありますextension/habr/settings/siteaccess/rus/site.ini.append.php
    [SiteSettings]
    IndexPage=/content/view/full/62
    DefaultPage=/content/view/full/62
    62は、このオブジェクトのノード(ノードコード)です。
    このyadiが作成したオブジェクトと一致することを確認してください。
  12. ブログのリポジトリを作成する
    したがって、同じページでBlogsクラスのオブジェクトも作成します。
  13. ブログを作成します
    Blogsに移動して、 Blogタイプのオブジェクトを作成します。
  14. テスト投稿を作成する
    これらのブログでは、タイプPostのオブジェクトを作成します。
    お客様の裁量でコンテンツを記入します。
    ただし、投稿の一部は負の評価を持たなければならず、一部はメインの評価でフィルタリングする必要があります。
  15. さて、 habrのメインページに移動すると 、以下が表示されます。


仕組みの説明

  1. 設定では、デフォルトでロシアのデフォルトサイトが設定されています
    settings/override/site.ini.append[SiteSettings]:DefaultAccess=rus
  2. 私たちは、habrデザインがsaitaxas rusに使用されることを決定しました
    extension/habr/settings/siteaccess/rus/site.ini.append.php[DesignSettings]:SiteDesign=habr
    extension/habr/designフォルダーには、 extension/habr/designフォルダーがあります。この場合、 habrデザインが使用されます。
    ここでは、使用される言語、つまり rus-RU
     [RegionalSettings]
    ロケール= rus-RU
     ContentObjectLocale = rus-RU
     ShowUntranslatedObjects =無効
     SiteLanguageList [] = rus-RU
     SiteLanguageList [] = eng-GB
     TextTranslation =有効
    
  3. 最初に解析される最も重要なテンプレートを作成しました。
    extension/habr/design/habr/templates/pagelayout.tpl
  4. サイトのロシア語部分と英語部分については、 frontpageおよびpostクラスのオブジェクトのデフォルトテンプレートを再定義しました。
    extension/habr/settings/siteaccess/rus/override.ini.append.php:
     [full_blog_section]
    ソース=ノード/ビュー/ full.tpl
     #オーバーライドされたテンプレート
     MatchFile = full / frontpage.tpl
    サブディレクトリ=テンプレート
     #フロントページクラスの場合
    一致[class_identifier] = frontpage
    
     [full_post]
    ソース=ノード/ビュー/ full.tpl
     MatchFile = full / post.tpl
    サブディレクトリ=テンプレート
    一致[class_identifier] = post
    
     [line_post]
    ソース=ノード/ビュー/ line.tpl
     MatchFile = line / post.tpl
    サブディレクトリ=テンプレート
    一致[class_identifier] = post 
  5. さらに、 フロントページ extension/habr/design/habr/override/templates/full/frontpage.tplの再定義されたテンプレートでは、次のように記述できます。
     {def $ node_array = fetch(content、list、 
                              ハッシュ(parent_node_id、2、
                                    深さ3、 
                                    オフセット、$ view_parameters.offset、
                                    制限、10
                                     sort_by、配列( 'published'、false())、
                                     class_filter_type、 'include'、
                                     class_filter_array、配列( 'post')、
                                     attribute_filter、 
                                     array(array( 'post / raiting'、 '>'、 '0')))}
     {for node $ node_array as $ node_item}
         {node_view_gui view = line content_node = $ node_item}
     {/ foreach}
    

    $ node_arrayには、評価が0を超える最初の10件の投稿が含まれます。
    {node_view_gui view=line content_node=$node_item} -ビュー(ビュー)行のノードのテンプレートを表示することを決定します。
    この場合、テンプレートが表示されます。
    extension/habr/design/habr/override/templates/line/post.tpl
    新しい投稿のみを表示するには、filter属性を使用できます。
     attribute_filter、配列(「および」、
                             配列( 'published'、 '> ='、sub(currentdate()、86400))、
                             配列( 'post / raiting'、 '>'、 '0')) 

    評価が0を超える新しい投稿のみが登録されます。
  6. メインから投稿のリンクをクリックすると、テンプレートが使用されます:
    extension/habr/design/habr/override/templates/full/post.tpl

    そして、次のようになります。


  7. 小さな追加:テンプレートは文字列を翻訳する機能を使用します
    {"New"|i18n( "habr" )}
    ロシア語への翻訳はこちらです:
    extension/habr/translations/rus-RU/translation.ts
    つまり、サイトを別の言語に切り替える場合、ファイルに翻訳を追加するだけで済みます。


まとめ


もちろん、このサイトは劣悪なものであることが判明しました。コンテンツを追加するためのテンプレートの追加、その他多くの変更が必要になります。 この例の意味は、どこから始めればよいかを示すことです。そして、マニュアルを吸う、バグレポートを読む、壁に頭を叩く、一般に、私たちがやりたいことすべてをしなければなりません。

ez.no -eZ Publishを開発している会社のウェブサイト
doc.ez.no-オンラインドキュメント
issues.ez.no-バグトラッカー
projects.ez.no-コミュニティの既成ソリューション
share.ez.no-コミュニティサイト

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


All Articles