Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
DevilDriver

IPS Downloads ссылки на внешние файлы

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

Приветствую! Прошу помощи в решении одной проблемы.

В данный момент занимаюсь "обкаткой" форума на локалхосте после обновления с 3.4 на 4.4. В целом все устраивает, но возникла весьма неприятная ситуация, а конкретно она связана с приложением IPS Downloads.

В версии 3.4 ссылки на внешние файлы были реализованы с помощью задания названия источника в настройках приложения, и потом уже соответственно при добавлении файла можно было сделать выбор, с какого источника будет вставлена ссылка: Source 1, Source 2 и т.д. Плюс ко всему название источника было видно на кнопке.

В версии 4.4 же система кардинально поменялась - больше нельзя задать источники в настройках. При добавлении файла и выборе ссылок на внешние источники форма теперь имеет такой вид:

Скрытый текст

Links.png.89ed451f255459e8563b64bab387d82b.png

Допустим, я добавил три ссылки вида  http://localhost/testlink,1,2. При скачивании файлов форма выглядит так:

Скрытый текст

download.thumb.png.da8bba87492d4f9536d6125bc860b930.png

Но так как в основном у меня все ссылки ведут на обменники, например, Яндекс диск, то они имеют вид вроде /FGR-HDntJgeo. Мало того, что они выглядят некрасиво, так еще и благодаря этому можно обойти счетчик ожидания для тех групп, у которых он активен, простым копированием этой части ссылки и подстановкой ее к домену обменника, что я вообще считаю серьезной недоработкой, которая тянется еще со времен 3.4, там это тоже присутствует.

Скажу сразу что проблема лично для меня довольно серьезная, Downloads  у меня является основным компонентом на сайте, и в архиве более 10.000 файлов, и у больше половины внешние ссылки.

Код, который отвечает за вывод ссылок находится по пути download -> view -> multiple files:

<h4 class='ipsDataItem_title ipsContained_container'><span class='ipsType_break ipsContained'>{{if $data['record_realname']}}{$data['record_realname']}{{else}}{{$pathBits = explode( '/', \IPS\Http\Url::external( $data['record_location'] )->data[ \IPS\Http\Url::COMPONENT_PATH ] );}}{expression="\count( $pathBits ) ? array_pop( $pathBits ) : $data['record_location']"}{{endif}}</span></h4>

У меня получилось сделать костыль, чтобы часть ссылки скрывалась, и более того, даже удалось вывести название источника:

<h4 class='ipsDataItem_title ipsContained_container'><span class='ipsType_break ipsContained'><strong>{{if $data['record_link_type']}}{$data['record_link_type']}{{else}}Your download{{endif}}</strong></span></h4>

Но в этом варианте все равно не решается проблема выбора источника при добавлении файла, и что еще интереснее, на старых файлах начинает отображаться название источника, но стоит изменить файл, то названия заменяются на Your download, а на новых файлах Your download отображается сразу.

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

Очень расстраивает, что разработчики откровенно забили на это приложение, что подтверждают посты на форуме компании, помимо этого там еще куча мелких недоработок наберется, но они устраняемы тем или иным способом. Зачем было выпиливать заведомо нормально работающую функцию, мне не понятно.

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


Ссылка на сообщение

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

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


Ссылка на сообщение
01/22/20 15:12 (изменено)

@newbie, постараюсь на картинках объяснить наглядно.

В общем, в версии 3.4 в настройках IP.Downloads есть следующий пункт:

1.png.3b329ac5fac82209627381e65a6a3561.png

Здесь перечисляются сайты-источники файлов. В моем случае это обменники типа яндекс диск и прочие.

При добавлении файла при нажатии Link to a file появляются поля для ссылок, а справа в выпадающем списке можно выбрать конкретный источник, где расположен файл:

2.png.79f9d27ee5ec98f5043a3e392e97539c.png

Заполнили необходимое, нажимаем ОК, и при скачивании файла видим вот такую страницу:

3.png.f9c542d05a50ce68a41a92b6fa29e33f.png

Видим что указывается конкретный источник, где расположен файл, а справа часть ссылки после http://source№.ru/ о чем я упоминал в первом посте об обходе счетчика ожидания скачивания. На своем шаблоне я удалил эту часть, оставив только кнопку с названием источника.

А теперь что имеем в 4.4

1. Настройки списка источников в приложении Downloads НЕТ

2. Добавление ссылок на файлы:

4.png.5dc43c46fc03b6a73ed7b12942582524.png

Как видно, кроме поля для ссылки тут ничего нет

3. Добавили файл, нажимаем на скачать:

5.thumb.png.ea33705198d80bd35a15c522fa3cf4b8.png

Видим кусок ссылки после домена источника, как и 3.4, но никакого указания источника.

В общем, как-то так, надеюсь чуть понятнее объяснил 🙂

Изменено пользователем DevilDriver

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


Ссылка на сообщение

Насколько я понял, это по сути только приписка.

Я могу выбрать ЯДиск, а ссылку указать на Мэйл облако.

15 часов назад, DevilDriver сказал:

но никакого указания источника.

А зачем, если Вы решили удалить упоминания, чтобы юзеры не обходили ограничения.

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


Ссылка на сообщение
01/23/20 08:44 (изменено)
2 часа назад, newbie сказал:

Я могу выбрать ЯДиск, а ссылку указать на Мэйл облако.

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

 

2 часа назад, newbie сказал:

А зачем, если Вы решили удалить упоминания, чтобы юзеры не обходили ограничения.

Есть несколько причин, но самая основная в том, что сайт у меня в равной степени посещают как русскоговорящие пользователи, так и зарубежные. У большинства по той или иной причине иногда нет возможности скачивать файлы с наших обменников. Для них файлы заливаются на обменники типа MEGA и прочих.

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

Я пока обдумывал все это, пришла идея, которая хотя бы отчасти могла бы решить эту проблему. Стандартными средствами ссылка обрезает домен, оставляя вторую часть. Можно ли сделать наоборот,  как-то переписать код, чтобы домен оставался, а вторая часть ссылки обрезалась? Мне бы даже этого хватило по сути.

Изменено пользователем DevilDriver

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


Ссылка на сообщение
4 минуты назад, DevilDriver сказал:

Я пока обдумывал все это, пришла идея, которая хотя бы отчасти могла бы решить эту проблему. Стандартными средствами ссылка обрезает домен, оставляя вторую часть. Можно ли сделать наоборот,  как-то переписать код, чтобы домен оставался, а вторая часть ссылки обрезалась? Мне бы даже этого хватило по сути.

{{if $data['record_type'] == 'link' and $data['record_location']}}
	{{$host = parse_url($data['record_location'], PHP_URL_HOST);}}
{{endif}}


Я тут подумал, можно сделать маппинг хост/название.

 

  • Like 1

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


Ссылка на сообщение
01/23/20 09:00 (изменено)

Спасибо, можно поэксперементировать. Я в PHP правда вообще почти не понимаю, только поверхностно, но попробую.

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

<h4 class='ipsDataItem_title ipsContained_container'><span class='ipsType_break ipsContained'>{{if $data['record_realname']}}{$data['record_realname']}{{else}}{{$pathBits = explode( '/', \IPS\Http\Url::external( $data['record_location'] )->data[ \IPS\Http\Url::COMPONENT_PATH ] );}}{expression="\count( $pathBits ) ? array_pop( $pathBits ) : $data['record_location']"}{{endif}}</span></h4>

Если я правильно понимаю, вот этот нужный кусок:

{$pathBits = explode( '/', \IPS\Http\Url::external( $data['record_location'] )->data[ \IPS\Http\Url::COMPONENT_PATH ] );}

 

Изменено пользователем DevilDriver

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


Ссылка на сообщение
6 минут назад, DevilDriver сказал:

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

Я же дал код для получения хоста.

{{if $data['record_realname']}}{$data['record_realname']}{{else}}{{$pathBits = explode( '/', \IPS\Http\Url::external( $data['record_location'] )->data[ \IPS\Http\Url::COMPONENT_PATH ] );}}{expression="\count( $pathBits ) ? array_pop( $pathBits ) : $data['record_location']"}{{endif}}

замените на 

{{if $data['record_type'] == 'link' and $data['record_location']}}{{$host = parse_url($data['record_location'], PHP_URL_HOST);}}{$host}{{else}}Your download{{endif}}

 

  • Like 1

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


Ссылка на сообщение

Огромное спасибо, прямо что что нужно! Теперь по сути и не нужны доп.поля с источниками. Мое мнение, вот так оно должно работать из коробки, а не как сейчас.

1.png.b440d995728e6511f89ee03e23b51612.png

  • Like 1

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


Ссылка на сообщение
08/01/23 05:51 (изменено)

UPD.

Зря апнул тему, предыдущий код работает и на версии 4.7.12, просьба модераторов удалить сообщение.

Изменено пользователем DevilDriver

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


Ссылка на сообщение
01.08.2023 в 08:51, DevilDriver сказал:

UPD.

Зря апнул тему, предыдущий код работает и на версии 4.7.12, просьба модераторов удалить сообщение.

Зачем же удалять? Протестировали и отписались что работает, мало ли IPS изменили ключи или иные объекты и код не работал, поэтому пусть будет.

  • Like 1

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


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...