Jump to content
Дизайн и модификация Invision Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
DevilDriver

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

Recommended Posts

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

В данный момент занимаюсь "обкаткой" форума на локалхосте после обновления с 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, но знаний для решения у меня нет.

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

Share this post


Link to post

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

Share this post


Link to post

@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, но никакого указания источника.

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

Edited by DevilDriver

Share this post


Link to post

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

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

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

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

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

Share this post


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

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

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

 

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

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

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

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

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

Edited by DevilDriver

Share this post


Link to post
4 минуты назад, DevilDriver сказал:

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

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


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

 

  • Like 1

Share this post


Link to post

Спасибо, можно поэксперементировать. Я в 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 ] );}

 

Edited by DevilDriver

Share this post


Link to post
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

Share this post


Link to post

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

1.png.b440d995728e6511f89ee03e23b51612.png

  • Like 1

Share this post


Link to post

UPD.

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

Edited by DevilDriver

Share this post


Link to post
01.08.2023 в 08:51, DevilDriver сказал:

UPD.

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

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

  • Like 1

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...