Opencart - 产品说明中插入的图像是http而不是https

时间:2014-11-13 11:50:14

标签: javascript php ssl ckeditor opencart

我们正在使用Opencart 1.5.5.1(我知道它是一个过时的版本,但此前的开发人员几乎将所有内容编码到核心文件中,因此无法升级到目前为止的最新版本。)

我最近浏览了整个网站,将所有http://更改为https://,并修复了一些Opencart核心错误。例如,结帐页面上的一个众所周知的问题(catalog / controller / checkout / cart.php,第170行):

改变了这个:

$this->data['action'] = $this->url->link('checkout/cart');

对此:

$this->data['action'] = $this->url->link('checkout/cart', '', 'SSL');

如上所述,我能够轻松解决大部分问题。

但是......我的问题在于文件管理器。每当我想在产品描述中链接图像时,使用WYSIWYG编辑器中的插入图像功能,它会自动创建http://链接,而不是https://。当然,这会打破该页面上的SSL,我到目前为止找到的唯一解决方案是手动将插入的图像链接从http更改为https

我尝试了什么...我已经浏览了文件管理器的控制器文件(admin / controller / common / filemanager.php),试图找到图片链接的地方生成了,似乎Opencart正在传递ckEditor的image.js插件的相对路径,然后创建我认为的整个链接(但我不是100%确定这一点)。不幸的是,我使用Javascript并不是那么好,image.js缩小了。我在询问之前尝试过谷歌,并且我发现了几个关于这个问题的论坛帖子,但是他们都没有提到过这方面的解决方案(或者我可能已经错过了)。

周围的任何一个Opencart大师,遇到过同样的事情,并且能够指出我正确的方向吗?

非常感谢你。

编辑:我在管理员/系统/设置中启用了SSL,我的.htaccess文件将每个http页面请求重写为https。

2 个答案:

答案 0 :(得分:2)

我设法解决了这个问题。如果其他人遇到同样的问题,请执行以下操作:

打开admin/controller/common/filemanager.php。转到第35行:

$this->data['directory'] = HTTP_CATALOG . 'image/data/';

将其更改为:

if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
    $this->data['directory'] = HTTPS_CATALOG . 'image/data/';
} else {
    $this->data['directory'] = HTTP_CATALOG . 'image/data/';
}

我希望它有所帮助。

编辑:我刚检查过,这个问题仍然存在于1.5.6.4中,所以它也可能是其他人的实际修复。

答案 1 :(得分:1)

我在使用https:// URL和CKEditor的图像选择器时遇到了同样的问题。我也在使用Opencart 1.5.5.1 :)需要更改CKE配置,以便插入包含不包含协议,域名/ IP地址等的相对URL的图片。

我试图搜索负责构建完整网址但无法找到它的代码。谢谢你指出它,这有很大的帮助。

我的解决方案基于您的。但是,原始代码我看起来有点不同。无论如何,我从我的admin/controller/common/filemanager.php

中选取了以下部分
$this->data['directory'] = HTTP_IMAGE . 'data/';

...并将其替换为:

$this->data['directory'] = str_replace(HTTP_CATALOG, '/', HTTP_IMAGE) . 'data/';

这不会检查HTTPS是否已启用,因为这无关紧要 - 无论协议如何,所选文件的路径都是相对于root的。

这是我制作的完整vQmod:

<modification>
    <id>forcing ckeditor to use relative paths for images</id>
    <version>1.5.5.x</version>
    <vqmver></vqmver>
    <author>Stackoverflow Comunity</author>
    <file name="admin/controller/common/filemanager.php">
        <operation>
            <search position="replace"><![CDATA[
                $this->data['directory'] = HTTP_IMAGE . 'data/';
            ]]></search>
            <add><![CDATA[
                // make sure HTTP_CATALOG has a trailing slash
                // check admin/config.php
                $this->data['directory'] = str_replace(HTTP_CATALOG, '/', HTTP_IMAGE) . 'data/';
            ]]></add>
        </operation>
    </file>
</modification>

再次,@ Tibor B.感谢您分享您的解决方案。它有很多帮助