MODxでサブドメインを操作する

それから友人から質問が来ました:

良い一日!



ModXとLSの友情についての記事を読み、自分でModXで解決できない質問をすることにしました。メインサイトの現在のサブドメインに応じてRevoの動作のロジックを実装する方法は?



pro-cent.ruでは、都市の名前がサブドメイン(http://kaliningrad.pro-cent.ru/)に配置されていることがわかります。 ModXはこれを何らかの形で処理するのに役立ちますか、それともすべてをあなたの手とコードで行いますか?




私は大衆に答えることにした。おそらく誰かが役に立つかもしれない。



一般的に、彼らはすでにいくつかのドメイン(より正確には、ドメインを切り替える)で動作するには、ハブ上で$ modx-> switchContext($ ctx)メソッドを使用する必要があると書いています。 これは確かに非常に便利なことですが、私たちの場合、別のコンテキストに切り替える場合、基本的なコンテキスト(この場合はWeb)のドキュメントや微妙な設定を参照する機会がないため、私たちを救うことはできませんあります。 一般に、ターゲットコンテキストが完全に独立している場合、独自のドキュメントがある場合など、$ modx-> switchContext()が必要です。



私の場合、基本的なコンテキストがあり、既に必要なすべてのドキュメントがあり、都市ごとのコンテキストは一部の設定をオーバーロードするためにのみ必要です(各コンテキストにはベースドメイン、都市、コードIなどの独自の設定があります.Metricsなど)、一般的には、どの株を撤回するかなどを簡単に決定できます。



だから、プラグインにもっと注意を払うことをみんなに勧めます。 彼らはあまり焦点を当てていませんが、エンジン自体のコードに完全に触れることなく、MODx操作のロジックになんらかの形でくっつくことができるのはプラグインです。



一般に、問題を解決するために、次のことを行います。



1.必要なコンテキストを作成し、必要な設定を規定します。



2.プラグインを作成し、OnHandleRequestイベントによる実行を示します



3.プラグインで次のように記述します(またはそのようなもの)



<?php //         switch($modx->context->key){ case 'web': break; default: return; } //    3-   ,     if(preg_match('/([^\.]+)\.[^\.]+\.[^\.]+$/',$_SERVER['HTTP_HOST'], $match)){ if($ctx = $modx->getObject('modContext', $match[1])){ //    if($ctx->prepare()) { //   MODx- //   ,         API $modx->getOption(); //   ,         [[++site_name]],       //   $modx->config = array_merge($modx->config, $ctx->config); } } } //      // -   ,         , //  -    //    if(!$host && (!$host = $modx->config['mainHost'])) { // print "      ".$modx->context->key; return; } // print $host; $redir_host = ''; $redir_url = ''; //         switch($modx->event->name){ case 'OnPageNotFound': break; case 'OnHandleRequest': break; default: ; } //      if(!preg_match('/^'.$host.'$/i', $_SERVER['HTTP_HOST'])){ $redir_host = $host; $redir_url = $_SERVER['REQUEST_URI']; } //       ,   301-  (  ) if($redir_host || $redir_url){ $params = array(); $redir_url ? $params['url'] = $redir_url : ""; $redir_host ? $params['hostl'] = $redir_host : ""; $modx->runSnippet('redirect', $params); }
      
      







実際にはすべて。



All Articles