0

我安装了一个插件,它对不同的控制器有自己的布局覆盖。但是,我无法理解修改路径的机制。

在插件控制器中,如果我告诉它使用我的布局

$this->layout = 'default_dashboard';

它位于 app/Views/Layout 并引用 app/webroot/default_images 中的图像。

当我这样做时,所有相对链接都可以正常工作到 default_images,但希望将一些插件模板覆盖用于其他操作。

但是,如果我修改 default.cpt 文件以包含一些图像,例如 default_dashboard.ctp 中使用的徽标。它无法映射到相同的图像位置。例如在 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 Helper 将链接硬编码到模板中,我看到浏览器的相对路径由于路由而混淆。例如,第一个与指定的根一起工作,第二个则不。

    <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 回答