如何在CakePHP中使用插件javascript脚本加载插件图像?

时间:2012-04-27 15:08:11

标签: javascript html image url cakephp

我的CakePHP插件中有一个( javascript )脚本,它在当前查看的文档中创建了一个img标记。问题是,到目前为止,每次尝试提供有效的图像源都失败了。该插件位于 CakePHP库(不是CakePHP应用程序)的插件目录中,因为我们将它用于几个具有大量共享的独立应用程序。

图片位于/cake/plugins/Corporate/webroot/img

javascript )脚本位于/cake/plugins/Corporate/webroot/js

从脚本到图像的相对路径不起作用(../img/image.png)。 CakePHP路由路径(/Corporate/img/image.png)也不起作用,如果我在前面添加插件名称则是独立的。

3 个答案:

答案 0 :(得分:2)

使用正确的路径

在PluginName插件中访问webroot资产的正确途径是以下形式:

  

/ PLUGIN_NAME /路径

即:

  • 文件路径:App/Plugin/Corporate/webroot/img/image.png
  • 网址:/corporate/img/image.png

在CakePHP的早期版本中,资产调度是自动的,而在2.2 + asset dispatching must be explicitly enabled中。

处理插件资产的常规方法是使用资产调度过滤器并将文件复制(或符号链接)到与应用程序webroot相对应的路径,即:

cd App
cp -R Plugin/Corporate/webroot webroot/corporate

这意味着请求的URL直接映射到应用程序webroot文件夹中的文件 - 在提供这些文件时没有调用php逻辑,除了其他好处之外,还提供了提供此类资产significantly faster

处理javascript中的路径

如果应用程序始终是,始终作为域的根目录(http://example.com)安装,那么绝对没有复杂性 - 只需参考图像的相对路径:

var imagePath = '/corporate/img/image.png';

但是,如果应用程序的根是可变的(http://example.com/http://exmaple.com/sub/folder/http://localhost/someproject/) - 告诉 javascript是什么必要的考虑应用程序的根。例如,将以下内容放在布局文件中:

<head>
    ...
    <script>ROOT = '<?= $this->Html->url('/'); ?>';</script>
</head>
<body>
    <?= $this->fetch('content'); ?>
    ...
</body>

通过这种方式,javascript可以在任何地方引用全局ROOT来知道根网址是什么,如下所示:

var imagePath = ROOT . 'corporate/img/image.png';

无论应用程序的安装方式如何,都可以使用相同的javascript。

答案 1 :(得分:1)

您可以使用此代码

<?php echo $this->Html->image("recipes/6.jpg", array(    "alt" => "Brownies",    'url' => array('controller' => 'recipes', 'action' => 'view', 6))); ?>

答案 2 :(得分:0)

尽管如此,这个问题还很老,但我仍然想为其他寻找它的人解答这个问题

您可以使用

<?php 
    echo $this->Html->image( $this->Html->url('/', true).'{plugin_name}/{folder_name}/{asset_name}');
?>

例如,

<?php 
    echo $this->Html->image( $this->Html->url('/', true).'Corporate/img/image.png');
?>

请注意,plugin_name和asset_name区分大小写。