最後に、私たちは回避し、Yiiを別のアプリケーションとしてShopScriptにフックすることにしました。 アプリはトラッカーと呼ばれます。
何が行われたかについて-順番:
1.空のShopScriptアプリケーションを作成します
空のアプリケーションの作成については、 ShopScript Webサイトのマニュアルに詳しく説明されています。
原則として、超自然的なことは何もありません。 アプリケーションは、2つのアクションのみで構成されます。
- BackendAction -DefaultActionを記述します。 ここでは空のままにします。
- FrontendAction-すべてのフロントエンドロジックを実装するexecuteメソッドを記述します。 また、当面は空のままにします。
アプリケーションの場合、構成ファイル、いくつかのアイコン、およびビューも作成する必要があります。 これについては、ShopScript Webサイトのマニュアルで詳細に説明されているため、ここで説明するのは意味がありません。
2. Yiiでアプリケーションを作成する
新しいものはありません。
サイトのルートにあるapptrackersフォルダーのYiiにアプリケーションを配置します。
完成したアプリケーションをフォルダーにドロップするか、新しいアプリケーションをすぐに作成します。 違いはありません。 要するに、Yiiのアプリはapptrackersフォルダーにあります。
アプリケーションのインストール方法は、 公式Webサイトにも記載されています 。
それは準備でした。 その後、楽しみが始まります。
3. ShopScriptを使用してYiiアプリケーションを起動します
ShopScriptアプリケーションでYiiの制御を完全に転送するために、「構造」タブの管理パネルのトラッカー/ *でアプリケーションの呼び出しを設定します。アプリケーションでは、1つのFrontendActionを残します。 。
FrontendAction自体で、プロジェクトロジックを実装するexecuteメソッドで、次の1行を記述します。
require_once($_SERVER["DOCUMENT_ROOT"]."/apptrackers/index.php");
つまり、アドレスバーにyoursite / trackers *というフォームのアドレスを入力すると、ShopScriptはそれをアプリケーションに送信して実行します。 そして以来 アプリケーションにはデフォルトで1つのアクションのみが記述されており、常に呼び出されます。
その結果、Yiiアプリケーションを呼び出しました。 Yiiアプリケーションを設定するために残っています。
4. Yiiの設定
これで、アプリケーションが既に実行されていることがわかったので、必要な構成を登録する必要があります。
- UrlManagerを構成して、アドレスをパスの形式で表示し、実行可能なスクリプトを表示しないようにします。 URLが美しく、同じタイプである必要があります。
- 次に、アプリケーションのURLがトラッカーで始まることを示します。
'request' => array( 'baseUrl' => '/trackers', ),
- なぜなら Yiiアプリケーションは誰も知らないフォルダーにあるため、サイトのルートにある別のフォルダーにあるスタイルとアセットを取り出します。 それをtracksと呼びましょう。 内部では、すぐに資産フォルダーを作成します。 ここで、すべてのスタイルファイル、jsスクリプト、その他の悪霊を追加します。
- 次に、AssetsManagerを構成して、ファイルの保存場所を指定します。
'assetManager' => array( 'basePath' => dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'tracks'.DIRECTORY_SEPARATOR.'assets', 'baseUrl' => '../../tracks/assets', ),
- また、メインレイアウトを少し調整して、プラグインスクリプトでフォルダーだけを示します。
<link rel="stylesheet" type="text/css" href="/tracks/css/screen.css" media="screen, projection" /> <link rel="stylesheet" type="text/css" href="/tracks/css/print.css" media="print" /> <!--[if lt IE 8]> <link rel="stylesheet" type="text/css" href="tracks/css/ie.css" media="screen, projection" /> <![endif]--> <link rel="stylesheet" type="text/css" href="/tracks/css/main.css" /> <link rel="stylesheet" type="text/css" href="/tracks/css/form.css" />
これで、 yoursite / trackersでアプリケーションを呼び出すと、Yiiアプリケーションが表示されます。
いいね! やった! しかし、GIIに入ると1つの警告がありました。
Giiはすべてのリソースをデフォルトでアプリケーションフォルダーのアセットに公開します。 このパスを再定義する必要があります。
これを行うには、gii構成でリソースへのパスを指定します。
'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'******', 'assetsUrl'=>'/tracks/assets/gii', // If removed, Gii defaults to localhost only. Edit carefully to taste. 'ipFilters'=>array('xxx.xxx.xxx.xxx','::1'), ),
モジュール/ apptrackers / framework / gii / asset / *のディレクトリからgiiのすべてのファイルをファイル/ track / asset / gii / *のフォルダにコピーすると、完全に機能するプロジェクトが得られます。
もちろん、すべてを簡単にすることができます。 yiiを呼び出す別のディレクトリにyiiアプリケーションを置くだけです。 追加設定なし。 しかし、上記のソリューションの議論の余地のないプラスは、Yiiアプリケーションでは、既製の承認、ユーザー管理、ショッピングカートなどを備えたすべてのShopScript機能を備えているということです...
ユーザーモジュールの例でこれを示します。
5. Yiiへのユーザーモジュールの追加
実際、ShopScriptには既にユーザーがいます。彼らのバスケットと、私が残したい機能の一部があります。
次のように進めます。
Yiiにモジュールフォルダーを作成し、その中にユーザーモジュールのディレクトリを作成します。
モジュールファイルUserModule.phpを追加します。このモジュールには、初期化のための標準機能を残し、静的メソッドisAdminを追加します。
public static function isAdmin() { wa()->getUser()->isAdmin(); }
このコードは、既存のShopScriptアプリケーションを参照していることを示しており、そこからユーザーと管理者のステータスを取得します。
また、SSUser.phpユーザーの作業を担当するコンポーネントフォルダーにクラスを追加します。このクラスでは、いくつかの標準メソッドについて説明します。
class SSUser extends CWebUser { public function getId() { return wa()->getUser()->getId(); } public function isAdmin() { return wa()->getUser()->isAdmin(); } public function getIsGuest() { if(wa()->getUser()->getId()) { return false; } return true; } public function getName() { return wa()->getUser()->get('name'); } }
このコードは、すでに実行中のShopScriptアプリケーションからユーザーのすべてのデータを取得することを示しています。
構成では、ユーザーを担当するクラスを修正します。
'user'=>array( 'class' => 'SSUser', ),
さて、ユーザーのチェックがあるlayouts / main.phpの標準コード:
$this->widget('zii.widgets.CMenu',array( 'items'=>array( array('label'=>'Home', 'url'=>array('/site/index')), array('label'=>'About', 'url'=>array('/site/page', 'view'=>'about')), array('label'=>'Contact', 'url'=>array('/site/contact')), array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest), array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest) ),
最後の2つの段落では、ユーザーがShopScriptアプリケーションで承認されているかどうかに応じてリンクが表示され、承認されている場合は同じアプリケーションのユーザー名が表示されます。
将来、モジュールは必要な機能に拡張できます。
もちろん、この2つのアプリケーションの共生の方法は理想的とは言えませんが、多くの問題を解決するためには、それが必要だと思います。