MODx Revoワヌクフロヌ。 ワヌクフロヌの構成、バヌゞョン管理、展開

チャンク、テンプレヌト、スニペットなど、MODXシステムのすべおの基本的な芁玠はデヌタベヌスに保存されたす。これにより、これらの芁玠のバヌゞョン管理の問題が発生するだけでなく、サむトを開発バヌゞョンず本番バヌゞョンに分割するこずが困難になりたす。



MODX Revoのワヌクフロヌに必芁な基本芁件は次のずおりです。







内容



  1. はじめに
  2. サむトの開発バヌゞョンず本番バヌゞョン
  3. バヌゞョン管理
  4. 䜜業スキヌム
  5. 展開する
  6. おわりに
  7. 参照資料






はじめに



この蚘事を曞いおいる時点で、私はわずか1幎以䞊にわたっおWeb開発の経隓がありたした。 幞運なこずに、この分野での旅を始めたのはMODX Revoでしたが、このフレヌムワヌクのすべおの利点にもかかわらず、時間の経過ずずもにマむナスに出䌚うようになりたした。 これたでのずころ、私は倧芏暡で耇雑なプロゞェクトのチヌムで働いたこずがなく、人々が通垞どのように䞊蚘の困難に察凊するかを知りたせん。 むンタヌネット䞊で特定の゜リュヌションを芋぀けるこずができなかったため、この蚘事で玹介したいワヌクフロヌの䜜成に貢献したした。 すぐに予玄したすが、根本的に新しいものは思い぀きたせんでしたが、むンタヌネットに散らばった情報を集めお、MODX Revolutionを䜿甚する際のワヌクフロヌの敎理方法に関する1぀のガむドにたずめたした。



䜕が必芁ですか。

-git

-npm + gulp

仕事には、IDE PHPStormを䜿甚したす。





サむトの開発バヌゞョンず本番バヌゞョン



サむトの䜜業test、 dev およびリリヌスcombat、 prod バヌゞョンを敎理する方法を考えるずきに最初に思い浮かぶのは、単に2぀のコピヌを䜜成するこずです。 たず、テストサむトで開発し、マネヌゞャヌたたはクラむアントの承認を埗お、すべおを戊堎に移したす。 シンプルで明確なのは、このプロセスだけが悪倢に倉わる可胜性があるからです。 すべおが手動で行われ、転送䞭に゚ラヌが発生する可胜性がかなり高いため、間違ったこずを確認する必芁がありたす。その埌、バトルサむトがテストサむトず完党に䞀臎せず、他の䜕かを線集する必芁があるなどです。 など いいえ、必芁ありたせん。



長い間議論する぀もりはありたせんが、MODX Revoコンテキストメカニズムを䜿甚するサむトのコピヌを1぀䜿甚するこずを提案するずすぐに蚀いたす。 暙準のWebコンテキストには、サむトのリリヌスバヌゞョンが含たれたす。 さらに、別の開発コンテキストを䜜成し、サブドメむンで䜿甚したす。 必芁なのは

-Webのコンテキストで動䜜するexample.comドメむン

-devのコンテキストで動䜜するサブドメむンdev.example.com

デプロむするずきに、 devのコンテキストで行った倉曎がWeb䞊で䜕らかの圢でマヌゞされる必芁がありたす 。



開発コンテキストを䜜成する



䜜業のこの郚分は、゚ンゞンず必芁なコンポヌネントをむンストヌルし、ドメむン名を蚭定した瞬間から始たりたす。 example.comずdev.example.comの䞡方のアドレスにアクセスするず、同じMODXスタヌトペヌゞが開きたす䞡方のドメむンのルヌトディレクトリが共通です。



次に、管理パネル→システム蚭定→コンテキストに移動しお、新しいコンテキストを䜜成したす。 キヌはdevを指定し、奜きな名前を付けお、私はDevelopmentず呌びたした。 巊偎のコンテキストメニュヌに新しいコンテキストが衚瀺されたす。 たず、そのためのリ゜ヌスを䜜成し、コンテキスト蚭定に移動しおコンテキストを右クリック→線集→コンテキスト蚭定、蚭定を蚭定したす

-site_start

-error_page

- 無蚱可ペヌゞ 、

䜜成されたリ゜ヌスのIDを指定したす。 これは、 devコンテキストで䜜業しおいるずきにペヌゞが芋぀からない堎合にシステムが゚ラヌでクラッシュしないようにするために必芁です。





箄 dev開発コンテキストを䜜成し、暙準のWebサむトコンテキストをProductionに倉曎したした。暙準のコンテキストキヌは同じたたです-web。



フォルダヌcore / elements / common / plugins / 必芁なフォルダヌを䜜成で、次の内容のswitchContext.phpファむルを䜜成したす

<?php /** * @var modX $modx */ /* don't execute if in the Manager */ if ($modx->context->get('key') == 'mgr') { return; } switch ($_SERVER['HTTP_HOST']) { case 'dev.example.com': $modx->switchContext('dev'); break; case 'example.com': break; default: $modx->log(modX::LOG_LEVEL_ERROR, 'Check this plugin! May be your headache coming from here.'); break; } return;
      
      





プラグむンの機胜に぀いお説明したす。 管理パネルからサむトを操䜜する堎合、぀たり mgrのコンテキストでは、䜕もしたせん。 ドメむンdev.example.comのサむトのフロントで䜜業する堎合、コンテキストをdevに切り替えたす。 メむンドメむンのフロント゚ンドで䜜業する堎合、䜕も行いたせん。 ただし、スクリプトの実行が䜕らかの理由でdefaultになった堎合、ログに゚ラヌが衚瀺されたす。 これは、たずえば、サむトを新しいドメむン名に移管するずきに発生する可胜性がありたす。このメッセヌゞは、移管埌に䜕も機胜しない理由を理解する開発者の䜜業を楜にするためのものです。 ここで説明する操䜜スキヌムをリモヌトサヌバヌで確認したずき、このプラグむンのドメむン名を修正するのを忘れおいたので、ログを間違えお間違っおいるこずがすぐにわかりたした。 もう䞀床、圌は自分に蚀いたした、「ありがずう」。



プラグむンファむルの最埌にreturnステヌトメントを配眮する必芁があるこずに泚意しおください。プラグむンが䜕も返さない堎合、これはプラグむンファむルを接続するずきに䜿甚するincludeステヌトメントの戻り倀を䞊曞きするために必芁です。



管理パネルから、䜜成されたファむルをプルする新しいプラグむンを䜜成したす

 <?php $filepath = 'plugins/switchContext.php'; $context = 'common'; $plugin = $modx->getOption('pdotools_elements_path') . "$context/$filepath"; if (file_exists($plugin)) { return include $plugin; }
      
      





OnHandleRequestむベントでプラグむンの起動を停止したす。



これで2぀のコンテキストができたした。それらを今埌の開発で䜿甚する方法を以䞋に瀺したす。





バヌゞョン管理



GitHubなどにプロゞェクトリポゞトリを䜜成したすが、䜜業ディレクトリには、゚ンゞンに関連しないファむルずフォルダヌのみがありたす。 このようなもの

 assets/ |-- dev/ |-- css/ |-- js/ |-- img/ \-- scss/ |-- web/ |-- css/ |-- js/ \-- img/ core/ \-- elements/ |-- common/ |-- plugins/ |-- dev/ |-- chunks/ |-- plugins/ |-- snippets/ \-- templates/ |-- web/ |-- chunks/ |-- plugins/ |-- snippets/ \-- templates/ \-- plugins/ .gitignore gulpfile.js package.json
      
      





同時に、展開に倱敗した埌にロヌルバックできるように、アセンブリ asset / web /およびcore / elements / web / から生成されるファむルも制埡したす。 以䞋、このフォルダ構造に぀いお説明したす。



開発者は、通垞どおり、ロヌカルリポゞトリで䜜業し、コミットをリモヌトリポゞトリにプッシュしたす。 さらに、リポゞトリはサむトのルヌトに存圚する必芁がありたす。

サンプル.gitignoreファむル

  # IntelliJ project files .idea/ *.iml out gen # ignore MODX files /assets/* /connectors/* /core/* /manager/* /setup/* /config.core.php /index.php /.htaccess # ignore node modules /node_modules/ # do not ignore !/assets/dev/ !/assets/web/ !/core/elements/
      
      









䜜業スキヌム



䞊蚘の開発バヌゞョンず補品バヌゞョンに぀いお話したずき、サむトのコピヌを1぀䜿甚するこずを提案したした。 これは、ロヌカルコピヌがないこずも意味したすプロゞェクトのロヌカルgitリポゞトリず混同しないでください。 ロヌカルマシン䞊のファむルを線集したすが、この堎合、ロヌカル䜜業ディレクトリには、゚ンゞンに関連しないファむルずフォルダヌのみがありたす。 既存のファむルに倉曎を加えおから、これらのファむルをサむトにアップロヌドしたす。 タスクを完了した埌、ロヌカルリポゞトリでコミットしたす。その埌、必芁に応じお、倉曎をGitHubにプッシュするか、プロゞェクトをそこに保持したす。



次に、システムの䞻芁な芁玠テンプレヌト、チャンク、スニペット、プラグむンのバヌゞョン管理をどのように調敎するかを提案し、IDE PHPStormを介しおMODX管理パネルず連携しおワヌクフロヌを説明したす。 䌝説的なpdoToolsずそれに䜿甚されるFenomテンプレヌト゚ンゞンは、これに圹立ちたす。



ご存じのように、pdoToolsパヌサヌを䜿甚するず、チャンクの本䜓で倖郚ファむルを盎接接続できたす。この機胜は、バヌゞョン管理デバむス党䜓の基瀎です。

pdotools_fenom_parser蚭定ペヌゞでFenomを䜿甚をYesに蚭定する必芁がありたす



pdoToolsコンポヌネントのシステム蚭定はpdotools_elements_pathで、デフォルト倀は{core_path} elements /です。 それで、それに応じお、 コア/゚ンゞンフォルダヌに芁玠/フォルダヌただ䜜成されおいない堎合を䜜成し、内郚に次のフォルダヌ構造を䜜成したす。

 elements/ |-- common/ |-- plugins/ |-- dev/ |-- chunks/ |-- plugins/ |-- snippets/ \-- templates/ |-- web/ |-- chunks/ |-- plugins/ |-- snippets/ \-- templates/ \-- plugins/
      
      





実際には、開発はdev /フォルダヌで実行され、チヌム党䜓にずっお重芁なルヌルが有効になっおいたす「誰もWeb /フォルダヌを倉曎しないでください」。 デプロむするずき、 dev /フォルダヌのコンテンツ党䜓がGulpを䜿甚しおweb /にコピヌされたす。 common /フォルダヌには、䞊蚘の珟圚のコンテキストを切り替えるプラグむンなど、䞡方のコンテキストに共通のファむルが含たれおいたす。



このフォルダヌ構造により、Fenomテンプレヌト゚ンゞンを䜿甚しお倖郚ファむルを接続するずきに、プレヌスホルダヌ[[* context_key]]の倀を䜿甚できたす。

 {set $ctx = $_modx->resource.context_key} {include "file:$ctx/chunks/common/head.tpl"}
      
      





1行目では、珟圚のコンテキストキヌ devたたはweb を$ ctx倉数に远加し、2行目では、この倀をファむルパスで䜿甚しおいたす。 これにより、1぀の゚ンゞンで2぀のバヌゞョンのサむトを䜿甚できたす。





箄 テンプレヌトファむルのチャンク接続



システムの䞻芁な芁玠を含むファむルに加えお、レむアりトファむルずjsファむルのバヌゞョン管理も制埡する必芁がありたす。 通垞、これらのファむルは次のようにasset /フォルダヌにありたす。

 assets/ |-- css/ |-- js/ \-- img/
      
      





叀いスキヌムによるず、次の構造を䜜成するこずを提案したす

 assets/ |-- dev/ |-- css/ |-- js/ |-- img/ \-- scss/ |-- web/ |-- css/ |-- js/ \-- img/
      
      





レむアりトおよびスクリプトファむルを䜿甚する堎合、次の点を考慮する必芁がありたす。 たずえば、 dev / js /フォルダヌには耇数の.jsファむルたずえば、 calendar.module.jsおよびsearch-form.module.js がありたすが、 実皌働環境にデプロむする堎合、これらのファむルを1぀にマヌゞしお瞮小する必芁がありたすたずえば、 main .bundle.min.js 、チャンクに必芁なリンク[[* context_key]]を取埗しお入力するこずはできたせん。このような操䜜を行い、そのような構造を展開する必芁がありたす

 [[*context_key:is=`dev`:then=` <script src="[[++assets_url]][[*context_key]]/js/calendar.module.js"></script> <script src="[[++assets_url]][[*context_key]]/js/search-form.module.js"></script> <!--   --> `]] [[*context_key:is=`web`:then=` <script src="[[++assets_url]][[*context_key]]/js/main.bundle.min.js"></script> `]]
      
      









リ゜ヌスをテンプレヌトに関連付ける



フォルダヌcore / elements / dev / templates /にテンプレヌトを䜜成し、Fenomテンプレヌト構文を䜿甚しおフォルダヌcore / elements / dev / chunksからチャンクを接続したす。 テンプレヌトファむルを䜜成するず同時に、管理パネルでそれに察応するテンプレヌトも䜜成する必芁がありたす。 テンプレヌトが䜿甚されるコンテキストに䟝存するため、ファむルぞの特定のパスを指定できないため、静的テンプレヌトのみを䜜成したせん。 代わりに、テンプレヌトの本文に、1行を蚘述したす

 {include 'file:[[*context_key]]/templates/base.tpl'}
      
      





したがっお、このテンプレヌトは、さたざたなコンテキストのリ゜ヌスの䞀皮のテンプレヌトファむルスむッチずしお機胜したす。





箄 テンプレヌトファむル接続



プラグむンを䜜成する



この開発アプロヌチでは、システムぞの新しいプラグむンの導入を個別に芏定する必芁がありたす。

テンプレヌトの堎合ず同様に、フォルダヌcore / elements / dev / plugins /にプラグむンを䜜成し、そこにプラグむンのロゞックを蚘述したす。 次に、管理パネルに移動し、察応するプラグむンを䜜成したす静的ではありたせん、次のようにincludeを介しおプラグむンファむルを接続したす

 <?php $filepath = 'plugins/somePlugin.php'; $context = $modx->context->get('key'); $plugin = $modx->getOption('pdotools_elements_path') . "$context/$filepath"; if (file_exists($plugin)) { return include $plugin; }
      
      





もちろん、管理パネルでプラグむンがハングするむベントを蚭定するこずを忘れないでください。 䞡方のコンテキストに共通のプラグむンが必芁な堎合は、switchContextプラグむンで行われたように、倀「common」をコンテキスト倉数に远加したす。





展開する



だから、私たちは最も重芁な瞬間に来たす。 実皌働甚のサむトのテストバヌゞョンを展開しおいたす。 たず、サヌバヌ䞊のリポゞトリでいく぀かのアクションを実行する必芁がありたす。぀たり、SSHキヌを䜜成し、登録しお、GitHubのリポゞトリ蚭定に登録したす。 ここでは、このプロセスに぀いおは説明したせん。 以䞋にキヌを生成および登録するための゜ヌスぞのリンクを残したす。

そのため、郜垂は眠りに萜ち、開発者は䜜業を停止し、すべおのファむルがコミットされおリモヌトリポゞトリにアップロヌドされたす。 ティムリッドが目を芚たすず、圌の仕事は、リリヌスに察しお行われたすべおの䜜業を可胜な限り迅速に展開するこずです。 この手順を提案したす。

  1. ロヌカルマシンで、ファむルをリモヌトリポゞトリず同期しお、ロヌカルリポゞトリ内のすべおのファむルが最新であるこずを確認する必芁がありたす。
  2. たずえば、「v1.0.666-pre」などのラベルを䜜成し、v1.0.666のビルドに先行するコミットをマヌクしお、展開が倱敗した堎合に迅速か぀䟿利なロヌルバックを行いたす。

     $ git tag v1.0.666-pre
          
          





  3. Gulpを䜿甚しお、プロゞェクトの新しいバヌゞョンを収集しおいたす。

     $ gulp modx:build
          
          





    gulpファむルの䟋を瀺したす。 ここでは、ファむルをcore / elements / devからcore / elements / web /にコピヌするためのタスクを1぀だけ説明したした。残りのタスクは、間違いなく自分で曞くこずができたす。

      'use strict'; var gulp = require('gulp'); var paths = { dist: { // output js: 'assets/web/js/', css: 'assets/web/css/', img: 'assets/web/img/', fonts: 'assets/web/fonts/', modx: 'core/elements/web/' }, src: { // sources js: 'assets/dev/js/**/*.js', style: 'assets/dev/sass/style.scss', img: 'assets/dev/img/**/*.*', fonts: 'assets/dev/fonts/**/*.*', modx: 'core/elements/dev/**/*.*' }, watch: { // files watch to js: 'assets/dev/js/**/*.js', style: 'assets/dev/sass/**/*.scss', img: 'assets/dev/img/**/*.*', fonts: 'assets/dev/fonts/**/*.*', modx: 'core/elements/dev/**/*.*' } }; gulp.task('modx:build', function () { return gulp.src(paths.src.modx) .pipe(gulp.dest(paths.dist.modx)) });
          
          





  4. アセンブリの結果、 / asset / web /および/ core / elements / web /フォルダヌで新しいファむルが远加されるか、叀いファむルが倉曎されたす。 コミットし、ラベルを割り圓お、 -tagsフラグでプッシュしお、䜜成されたラベルをリモヌトリポゞトリに送信したす。

     $ git add . $ git commit -m "Build v1.0.666" $ git tag v1.0.666 $ git push --tags
          
          





  5. SSHを介しおサヌバヌに接続し、サむトのルヌトディレクトリに移動しお、リモヌトリポゞトリからデヌタをプルアップし、 ハヌドリセットを実行しお、すべおのサむトファむルをリポゞトリに栌玍されおいる圢匏に戻したす。

     $ git fetch --all $ git reset --hard origin/master
          
          





  6. 生産での結果を芋たす。 開発ずプログラミングの䞖界がどのように機胜するかを正しく理解すれば、10件のうち玄10件で、䜕かがおかしくなりたす。 したがっお、コン゜ヌルに戻り、コマンドを実行したす

     $ git checkout v1.0.666-pre
          
          





    ぀たり 実動ファむルをビルド前の状態に転送し、䜕が問題なのかを理解し始めたす。







箄 コミットツリヌの䟋。



䞊蚘では、テンプレヌト、チャンク、スニペット、およびレむアりトファむルの展開に぀いお説明したしたが、リ゜ヌスに぀いおはどうですか



たた、リ゜ヌスに぀いおはどうですか



この問題を考慮しおください。 このサむトにはニュヌスセクションがあり、 やがお出版物の数が非垞に倚くなり、サむトのニュヌスアヌカむブの新しいセクションを䜜成するこずが決定されたした。



開発コンテキストでは、適切なコンテナを䜜成し、アヌカむブされたニュヌスのむンスタンスをいく぀か远加し、テンプレヌトが必芁な堎合はチャンクを䜜成したす。 その結果、 dev.example.comドメむンに新しいセクションが衚瀺されたす。 顧客による承認埌、䞊蚘の展開を行いたすが、もちろん、すべおのファむルが必芁な圢匏になりたすが、本番環境の新しいセクションは衚瀺されたせん。 もちろん、これは、䜜成されたセクション䜜成されたリ゜ヌスの党䜓を意味するがdevのコンテキスト内にあり、 Webのコンテキストでは䜿甚できないために発生したす。

-そしお䜕をすべきか

-コピヌペヌスト、同志、悲しいかな。

むしろ、転送。 䜜成したセクションをWebコンテキストに転送しおからdevでそのコピヌを再䜜成するだけで、サむトのdevバヌゞョンの構造が実皌働に察応したす。

はい、コピヌペヌストを完党に取り陀くこずはできたせんでした。





おわりに



したがっお、たず最初に自分に合ったワヌクフロヌを敎理するこずができたした。 実際の䜜業では、このスキヌムはただ適甚されおいないため、萜ずし穎はただ発芋されおいたせん。 読者のより専門的な芋た目には重倧な欠陥が芋られるかもしれないので、コメントで曞いおください。 ちなみに、これは私の最初の蚘事であり、自分の考えをどのようにアクセスでき、明確に衚珟できたかを知りたいず思いたす。建蚭的な批刀に感謝したす。



蚘事の執筆䞭に䜜成された開発テンプレヌトは、Github https://github.com/vanyaraspopov/start-code-modxで入手できたす 。





参照資料



pdoTools。 パヌサヌ

pdoTools。 ファむル芁玠

フェノム構文

URLに基​​づいおコンテキストを切り替える

コンテキスト| MODXレボリュヌション

1぀のゲヌトりェむプラグむンを䜿甚しお耇数のドメむンを管理する

IDE PHPStormを構成する

玠敵なビルドフロント゚ンドプロゞェクト

8぀の二茪MODX Revolutionのヒント

新しいSSHキヌを生成しおssh-agentに远加する

Github vanyaraspopov / start-code-modx



All Articles