0

さまざまなコントローラーに対して独自のレイアウトオーバーライドを持つプラグインがインストールされています。ただし、パスを変更するメカニズムを理解するのに苦労しています。

レイアウトを使用するように指示した場合、プラグインコントローラーで

$this->layout = 'default_dashboard';

app/Views/Layout にあり、app/webroot/default_images の画像を参照します。

これを行うと、すべての相対リンクは default_images に対して正常に機能しますが、プラグイン テンプレートのオーバーライドの一部を他のアクションに使用したいと考えています。

ただし、default_dashboard.ctp で使用されるロゴなど、いくつかの画像を含めるように default.cpt ファイルを変更するとします。同じ画像の場所にマップすることはできません。たとえば、default.ctp では次のようになります。

echo $this->Html->image('default_images/logo.png',array('alt' =>
 'Logo','width'=>'284','height'=>'82'));

/img/default_images/logo.png へのパスを生成します。プラグインは /img の場所を使用するように構成されていますが、この場合は /default_images にリダイレクトしたいと考えています。これを ../default_images/logo.png にすることもできますが、あまりきれいではありません。

さらに、同様の問題を抱えているjsとcssがあります。継承されたプラグイン テンプレートで動作するように、サイト全体の default.ctp を使用するメカニズムを説明してもらえますか?

Html ヘルパーを使用せずにテンプレートにリンクをハード コーディングすると、ルーティングが原因でブラウザーの相対パスが混乱することがわかります。たとえば、最初のものは指定されたルートで機能しますが、2 番目のものは機能しません。

    <img src="/default_images/logo.png" alt="works" width='284' height='82'>
    <img src="default_images/logo.png" alt="lost" width='284' height='82'>

プラグイン レイアウトと非プラグイン レイアウトのすべてが /default_images への正しいパスを見つけられるようにする最善の方法は何ですか?

4

1 に答える 1

0

相対パスの問題を解決するために従うことができる手順は次のとおりです。

  1. フォルダにファイルabc_constants.phpを作成しapp\Configます。

  2. ファイルを含めるapp\Config\bootstrap.php

    require_once(abc_constants.php);

  3. abc_constants.php には以下が含まれている必要があります。

    define('HTTP_HOST', "http://" . $_SERVER['HTTP_HOST'].'/');
    define('SITE_URL', HTTP_HOST.'your_app_name/');
    define('IMAGE_HTTP_PATH', SITE_URL.'app/webroot/default_images/');
    
  4. これらの定数をビュー ファイルで適切に使用してください。

    <?php echo $this->Html->image(IMAGE_HTTP_PATH.'logo.png',array('alt' => 'Logo','width'=>'284','height'=>'82'));
    

最初は少し長いプロセスに見えますが、実装すると、これらの定数をビュー ファイルやコントローラーのコードなどの Ajax 呼び出しで使用できます。

于 2013-07-18T03:52:57.247 に答える