Здравствуй, уважаемый друг!

Кажется, ты используешь AdBlock. Этот проект развивается и существует за счет доходов от рекламы.
Добавь, пожалуйста, нас в исключения.

Спасибо за понимание.

Теперь мы команда!

Установка OCMOD модулей на Opencart 2.x на localhost (denwer) без FTP

22 июня 2015 в 11:40 Автор: Nikita_Sp в категории Статьи о php 8 комментариев

Работая с интернет магазином на Opencart 2 на локальном хосте (я использую, например, Denwer), вы можете столкнутся со сложностью установки OCMOD модулей, т.к. установщик требует настроенного FTP доступа, а в пакете Denwer’a отсутствует FTP server.

Opencart extension installer ошибка ftp

Таким образом, разработчик не может установить модификации на Opencart 2 используя стандартный Extension Installer. Но для решения этой проблемы существует решение, достаточно простое и красивое. Достаточно лишь модифицировать несколько строк кода!

Итак, для изменения алгоритма работы установщика дополнений в Opencart 2.x необходимо модифицировать файл admin/controller/extension/installer.php

Далее необходимо найти строку, где указан шаг с использование FTP соединения для копирования файлов дополнения на сервер (~133 line):

'url'  => str_replace('&', '&', $this->url->link('extension/installer/ftp', 'token=' . $this->session->data['token'], 'SSL')),

Как видим в троке идет обращение к функции FTP, соответственно, для обхода данного шага нам необходимо изменить имя вызываемой функции на имя нашей функции, которую мы добавим в файл далее. Для этого заменим вышеупомянутую строку на следующую:

'url'  => str_replace('&', '&', $this->url->link('extension/installer/localcopy', 'token=' . $this->session->data['token'], 'SSL')),

После этого нам необходимо добавить собственно саму функцию localcopy(), код которой расположен ниже, в любое удобное место, например, перед строкой (~535 line):

public function clear() {

Размещаем код функции localcopy() и установщик расширений OpenCart 2.x будет работать без настроек FTP!

public function localcopy() {
	$this->load->language('extension/installer');
	$json = array();

	if (!$this->user->hasPermission('modify', 'extension/installer')) {
		$json['error'] = $this->language->get('error_permission');
	}

	$directory = DIR_UPLOAD . str_replace(array('../', '..\', '..'), '', $this->request->post['path']) . '/upload/';
	if (!is_dir($directory)) {
		$json['error'] = $this->language->get('error_directory');
	}

	if (!$json) {
	// Get a list of files ready to upload
	$files = array();
	$path = array($directory . '*');

		while (count($path) != 0) {
			$next = array_shift($path);
			foreach (glob($next) as $file) {
				if (is_dir($file)) {
					$path[] = $file . '/*';
				}
				$files[] = $file;
			}
		}

	$root = dirname(DIR_APPLICATION).'/';

		foreach ($files as $file) {
		// Upload everything in the upload directory
		$destination = $root.substr($file, strlen($directory));

			if (is_dir($file)) {
			$list = glob(rtrim($destination, '/').'/*');

				if (!file_exists($destination)) {
					if (!mkdir($destination)) {
						$json['error'] = sprintf($this->language->get('error_ftp_directory'), $destination);
					}
				}
			}

			if (is_file($file)) {
				if (!copy($file, $destination)) {
					$json['error'] = sprintf($this->language->get('error_ftp_file'), $file);
				}
			}
		}
	}

	$this->response->addHeader('Content-Type: application/json');
	$this->response->setOutput(json_encode($json));
}

Надеюсь данная статья была полезной и вы нашли ответ, который искали. Ставте like, подписывайтесь, впереди еще много интересного!

Вверх!

Меню блога

Категории блога

Облако тегов