javascript — Opencart — изображения, вставленные в описание продукта, являются http, а не https

Мы используем 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’s image.js плагин, который затем создает всю ссылку, которую я предполагаю (но я не уверен на 100% в этом). К сожалению, я не очень хорош с Javascript, и image.js минимизируется. Я пытался найти его в Google, прежде чем спрашивать, и нашел пару сообщений на форуме об этой проблеме, но ни один из них не упомянул об этом (или я мог пропустить это).

Кто-нибудь из гуру Opencart, который сталкивался с тем же и может указать мне правильное направление, пожалуйста?

Заранее большое спасибо.

Редактировать: у меня включен SSL в Admin / System / Settings, и мой файл .htaccess перезаписывает все http-запросы к https.

1

Решение

Мне удалось это исправить. Если у кого-то еще есть такая же проблема, сделайте следующее:

открыто 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, так что это может быть актуальным исправлением для всех остальных.

2

Другие решения

У меня была точно такая же проблема с https: // URL и селектором изображений CKEditor. И я тоже на Opencart 1.5.5.1 🙂 Нужно изменить конфигурацию CKE, чтобы он вставлял картинки с относительными URL, которые не включают протокол, имя домена / IP-адрес и т. Д.

Я пытался найти фрагмент кода, отвечающий за создание полного URL, но не смог его найти. Спасибо за указание на это, это очень помогло.

Мое решение основано на вашем. Однако оригинальный код у меня выглядел немного иначе. Во всяком случае, я взял следующую часть из моего admin/controller/common/filemanager.php:

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

… и заменил его на:

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

Это не проверяет, включен ли HTTPS, потому что это на самом деле не имеет значения — путь к выбранному файлу указывается относительно корня независимо от протокола.

Вот полный 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. Спасибо, что поделились своим решением. Это очень помогло

1