Перейти к содержанию
AndreyYakovlev

Как сгенерировать ссылку на прямое скачивание файла

Рекомендуемые сообщения

Добрый день.

Мне нужно, чтобы в виджете Категории висел пруфлинк на прайс-лист. Нашёл в админке Категории-Загрузки, загрузил туда файл. Но как мне сгенерировать линк на этот файл, чтобы он был доступен для общего скачивания?

Аналогичный вопрос и про модуль статей. Как следует дописать админку, чтобы сгенерировать ссылку на написанную статью?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

1. залить файл на хостинг, например в папку public_download или около того.

2. собственно прописать путь к файлу в теге <a href='.. >

или я Вас неправильно понял?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. залить файл на хостинг, например в папку public_download или около того.

2. собственно прописать путь к файлу в теге <a href='.. >

или я Вас неправильно понял?

неправильно) так можно конечно, но не юзабельно это.

схема должна быть такой: зашёл в админку - перезалил файл прайс-листа - ссылка обновилась на главной странице магазина.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

возможно это то, что Вам нужно https://opencartforum.com/files/file/49-w-pricelist/

Да это мне пригодится тоже, но в будущем. Добавил в закладки пока)

Но у меня немного другая задача. Файл прайс листа уже есть готовый. Синхронизации с магазином делать НЕ нужно. Нужен просто статичный файл, который можно редактировать из админки.

Хотелось бы узнать как происходит скачка файлов из админ-категории-загрузки и попробовать адаптировать это под мои нужды...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извиняюсь за ап.. но задачу я так и не смог решить... помогите пожалуйста

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужен просто статичный файл, который можно редактировать из админки.

если "прайс" редактировать - вам в платные услуги.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если "прайс" редактировать - вам в платные услуги.

да ну нет же)) я выше же описал, что я хочу. забудьте про слово прайс, это просто для примера я привёл.

попробую ещё раз объяснить, подоходчивей.

представьте есть блок на сайте, а в нём ссылка на файл, к примеру, www.myshop.com/some_file.doc. Кликаем по ссылке и скачиваем файл без лишних вопросов к себе на компьютер.

теперь я захотел обновить этот файл. Для этого захожу в админку, загружаю с компьютера новый файл. И в том блоке на сайте ссылка становится www.myshop.com/some_other_file.xls

вот такой мне нужен модуль. не думаю, что это тянет на платные услуги

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ставите html-модуль, в нем прописываете свою ссылку, заливаете some_file.doc на фтп.

А когда захотите изменить содержимое файла, то изменяете у себя на компьютере и заливаете с заменой на фтп.

Или вам так принципиально, чтобы были разные названия?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В итоге копаний справился сам. Немного модифицировал стандартный Каталог-Загрузки и его применил к своим целям

Кому интересно может будет читайте что я сделал:

1. Сначала отредактировал admin/controller/catalog/download.php. Убираем в двух местах md5(rand())

Теперь к имени загружаемого файла не будет приписываться длинный хэш

2. catalog/model/catalog/category.php

Мне надо было добавить ссылку на файл в блоке категории, поэтому именно эту модель я и отредактировал.

public function getFileName($id = 1) {
		$result = $this->db->query("SELECT * FROM " . DB_PREFIX . "download WHERE `download_id` = '" . $id . "'")->rows;
		return $result[0]['filename'];
	}
функция вернёт имя файла.

3. Теперь отредактируем контроллер catalog/controller/module/category.php и сформируем путь к этому файлу:

вставить это в тело функции protected function index()

$this->data['price']    = HTTP_SERVER . 'download/' . $this->model_catalog_category->getFileName(1);

4. Ну и наконец вставим ссылку в представление catalog/view/theme/ваша_тема/template/module/category.tpl

<a href="<?php echo $price; ?>">Скачать прайс-лист</a>
  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, Андрей!

Мне тоже такой продукт пригодится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Бьюсь как печенег над простой проблемой, не открываются ссылки на файл с прайсом в xls уже и в архив его пихал ни чего не помогает, даже кидал его на другой свой сайт с другим движком интер-магазина ни чего не помогает все время выпадает вот такая ошибка:

Ошибка доступа 404 к указанной странице

Данная страница не имеет отношения к запрашиваемому сайту.

Страница, которую Вы запрашиваете, отсутствует:

- Возможно Вы опечатались в наборе адреса

- Возможно, что указанная страница была удалена владельцем сайта

- Возможно, что содержимое сайта еще не размещено владельцем

может чем поможете, а то у меня уже мозги кипят почему так

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну так ссылку правильную используйте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а можно по подробнее, как это правильно? я вбивал ссылку уже из Windows commandera что бы не ошибиться и все равно одна и таже ошибка, может дело в атрибутах папки в которую ложу файл? может их нужно изменить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо уже дошел, долгим методом проб и ошибок

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я вбивал ссылку уже из Windows commandera что бы не ошибиться и все равно одна и таже ошибка

ну, что тут сказать...

:huh: :wacko: :lol:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AndreyYakovlev, спасибо, классное решения. А вот никто не подскажет как подправить код, чтоб при загрузке файла имя его менялось. Например, чтоб загружать файл, название которого на русском, а оно менялось на английское.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо уже дошел, долгим методом проб и ошибок

Как у Вас получилось? Расскажите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день, нашел две проблемы:

 

 

$this->data['price'] = HTTP_SERVER . 'download/' . $this->model_catalog_category->getFileName(1);

 

 

1 - GetFileName(1),но при загрузке файла ID каждый раз другой!

2 - При удалении файла из меню "Файлы для скачивания-Загрузки" он физически не удаляется. Как быть, если старый файл надо удалить (простой менеджер не заходит на ФТП) ?
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне нужна была только первая часть от сообщения 

AndreyYakovlev

для версии 1.5.5.1.2

несколько по другому там в файле admin/controller/catalog/download.php, чтобы хеш не писался, а файл грузился в своем расширении удалил лишнее, получилось так:

if (!isset($json['error'])) {
			if (is_uploaded_file($this->request->files['file']['tmp_name']) && file_exists($this->request->files['file']['tmp_name'])) {
				 
				$json['filename'] = $filename;
				$json['mask'] = $filename;
				
				move_uploaded_file($this->request->files['file']['tmp_name'], DIR_DOWNLOAD . $filename);
			}
						
			$json['success'] = $this->language->get('text_upload');
		}	

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

>> ...чтобы хеш не писался, а файл грузился в своем расширении удалил лишнее...

ломай не хочу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
PolarOne, теперь злоумышленникам не надо даже париться - можно тоннами грузить php-shell`ы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PolarOne, теперь злоумышленникам не надо даже париться - можно тоннами грузить php-shell`ы

чего это? они же через админку только могут загрузить, а чтобы туда попасть нужно знать логин и пароль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет. Может кому-то понадобится.

OpenCart 2.3.0.2

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

Что я сделал:

1. Избавимся от злополучного хеша при загрузке. Меняем 2 файла через OCMOD

<?xml version="1.0" encoding="utf-8"?>
<modification>
	<code>deleteDownloadHash</code>
	<name>Delete Download Hash</name>
	<version>1.0</version>
	<author>Aleksey Isaev</author>
	<link></link>
	<file path="admin/controller/catalog/download.php">
		<operation>
			<search><![CDATA[
				$file = $filename . '.' . token(32);
			]]></search>
			<add position="replace"><![CDATA[
				$file = $filename;
			]]></add>
		</operation>
	</file>  
</modification>
<?xml version="1.0" encoding="utf-8"?>
<modification>
	<code>deleteUploadHash</code>
	<name>Delete Upload Hash</name>
	<version>1.0</version>
	<author>Aleksey Isaev</author>
	<link></link>
	<file path="catalog/controller/tool/upload.php">
		<operation>
			<search><![CDATA[
				$file = $filename . '.' . token(32);
			]]></search>
			<add position="replace"><![CDATA[
				$file = $filename;
			]]></add>
		</operation>
	</file>
</modification>

2. При скачке из стандартной папки system/storage/download вылезает 403 страница. Попробовал сменить директорию скачивания.

Для этого создаем в корневой директории папку price, и далее в config.php и в admin/config.php меняем путь.

define('DIR_DOWNLOAD', 'ваш путь/price');

Если вылезет снова 403 - можно поиграться правами этой папки. Заработало.

 

3. Теперь осталось прописать ссылку на скачивание файла в шаблоне страницы типа <a href="price/price.pdf" target="blank">Скачать PDF</a>

 

Минусы - необходимо, чтобы название файла было четким, имело четкое расширение. Это можно прописать в инструкции менеджерам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.