Загрузка по ссылке

Автор kak2z, 12 января 2015, 10:49:13

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kak2z

В общем у меня все продолжение этой темы http://www.simplemachines.ru/index.php?topic=17760.0
Я хочу полностью избавиться от изображений хранящихся вне форума. Но форумчане упорно используют тег IMG.
В связи с этим я решил вот что сделать:
1. Кнопка меняется свою функцию. При ее нажатии появляется модальное окно внутри с iframe (если не правильно, подскажите как правильно, но я просто такой пример нашел в интернетах).
2. В этом модальном окне есть поле для ввода ссылки и кнопка "Загрузить". (по идее планирую еще сделать проверку - если вставляют ссылку на картинку которая расположена на моем форуме (проверка УРЛа), то повторная загрузка не требуется, просто вставляется ссылка в форму для редактирования текста).
3. При нажатии "Загрузить" скрипт в iframe загружает картинку и обновляет iframe. Теперь там превью картинки и кнопка "Вставить". (Кнопка "Вставить" у меня еще не работает)))

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

Есть три  вопроса:
1. Сейчас модальное окно вызывается нажатием на ссылку. Как писал выше я хочу сделать что бы при нажатии на эту кнопку оно загружалось. Для добавления картинки в базу мне нужно ИД сообщения в которое мы вставляем эту картинку. Как его передать в модальное окно из родительского окна?
2. После загрузки нужно что бы кнопка "Вставить" отсылала новую ссылку в textarea родительского окна  (форма для редактирования сообщения).
3. Как сделать так что бы при открытии модального окна ссылки на родительском были недоступны до закрытия модального окна.

Весь скриптик лежит в архиве)) что бы его запустить просто распакуйте архив в корень движка СМФ и запустите index.php

Спасибо))

П.С. Если кратко основная проблема JS

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

Yworld_garry

А если подсмотреть в скрипте загрузчика от postimage.org, в смысле моде.. Там вроде реализована и передача и вставка.

// MOD Title: Simple Image Upload
// MOD Author: Sium < admin[at]postimage.org > (N/A) http://postimage.org/
// MOD Version: 1.5.0

if(typeof postimage_lang==='undefined')
{
var postimage_lang="russian";
var postimage_add_text="Добавить картинку в сообщение";

function postimage_query_string(postimage_search_name){if(window.location.hash){postimage_query=window.location.hash.substring(1).split("&");for(postimage_i=0;postimage_i<postimage_query.length;postimage_i++){postimage_string_data=postimage_query[postimage_i].split("=");if(postimage_string_data[0]==postimage_search_name){postimage_string_data.shift();return unescape(postimage_string_data.join("="));}}}return void(0);}if(opener){var postimage_text=postimage_query_string("postimage_text");if(postimage_text){var postimage_id=postimage_query_string("postimage_id");var postimage_area=opener.document.getElementsByTagName('textarea');for(var postimage_i=0;postimage_i<postimage_area.length;postimage_i++){if(postimage_i==postimage_id){break;}}if(opener.editorHandlemessage && opener.editorHandlemessage.bRichTextEnabled){opener.editorHandlemessage.insertText(postimage_text+"<br /><br />",false);}else{postimage_area[postimage_i].value=postimage_area[postimage_i].value+postimage_text;}opener.focus();window.close();}}function postimage_insert(){var postimage_area=document.getElementsByTagName('textarea');for(var postimage_i=0;postimage_i<postimage_area.length;postimage_i++){if(!postimage_area[postimage_i].name.match(/username_list|search|recipients/i)){postimage_div=document.createElement('div');postimage_open=document.createElement('a');postimage_open.innerHTML=postimage_add_text;postimage_open.href="javascript:postimage_upload("+postimage_i+");";postimage_open.setAttribute('style',"font-weight:bold");postimage_span=document.createElement('span');postimage_span.innerHTML=" • ";postimage_div.appendChild(document.createElement('br'));postimage_div.appendChild(postimage_span);postimage_div.appendChild(postimage_open);postimage_div.appendChild(document.createElement('br'));postimage_div.appendChild(document.createElement('br'));postimage_area[postimage_i].parentNode.insertBefore(postimage_div,postimage_area[postimage_i]);}}}function postimage_upload(areaid){window.open("http://postimage.org/index.php?mode=smf&areaid="+areaid+"&hash=1&lang="+postimage_lang+"&code=hotlink&content=&forumurl="+escape(document.location.href),"postimage","resizable=yes,width=500,height=400");return void(0);}if(typeof postimage_text==='undefined'){if(window.addEventListener){window.addEventListener('DOMContentLoaded',postimage_insert,false);}else if(window.attachEvent){window.attachEvent('onload',postimage_insert);}}}

kak2z

Цитата: Yworld_garry от 12 января 2015, 11:20:00
А если подсмотреть в скрипте загрузчика от postimage.org, в смысле моде.. Там вроде реализована и передача и вставка.

Я вчера весь день подсматривал)) вообще нифига не понял)) надо брать мануал и учить js с самого начала)
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

GeorG

Т.е., получается зная ссылку на загрузку, гости тоже смогут загружать файлы или предусматривается какое то распределение в правах?
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

kak2z

#4
Цитата: GeorG от 12 января 2015, 15:07:00
Т.е., получается зная ссылку на загрузку, гости тоже смогут загружать файлы или предусматривается какое то распределение в правах?
теоретически я не думал давать эту возможность гостям))

upd1
а кто что скажет по поводу того что iframe в модальное окно встроен? Есть какой то вариант без iframe - я так понял это затрудняет передачу данных в обе стороны. .
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

kak2z

#5
Немного разобрался с наследованием в JS. А потом вспомнил что когда то покупал мод SimpleImageSnack а там была как раз такая фича как мне нужна была))
в общем уже вставляется в при клике на ссылку загруженного файла в форму редактирования..

Кто то уже смотрел на мое "художество"?))

UPD чуть чуть переделал...  и обновил скрипт в первом посте...
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

kak2z

#6
Камрады)) у меня вот такой вопрос.
В скрипте у меня несколько файлов, но на сейчас интересуют upload.php (в нем находится диалоговая форма) и action.php (в нем обрабатывается POST запрос в котором передаю ссылку на файл, и происходит непосредственно проверка файла на доступность, сжимается файл, создается миниатюра и т.п.)
В планах у меня что бы загрузкой пользовались только авторизированые пользователи.
Но вопрос вот такой, по сути если кто то захочет, то сможет авторизироваться удалено, подключить скрипт и роботом отправлять в файл action.php запросы. Что бы сделать что то вроде удаленной загрузки.
Получается дыра в безопасности.. как сделать так что бы скрипт в файле action.php принимал только запросы от файла upload.php ?


П.С. В аттаче обновленный скрипт..

П.П.С. Я вижу только один вариант сделать таблицу и при запуске файла upload.php создавать в нем какой то ключ с указанием ид пользователя и текушего времени, а при запуске action.php проверять сколько прошло время с момента создания ключа и если не прошло больше чем ХХХ времени то разрешать загрузку. Если нет то сообщать что сессия истекла. После успешной загрузки файла запись эту удалять.

П.П.С. Написал в предыдущем ПСе слово "сессия" и решил попробовать сессиями сделать.. вот что получилось.. обновил аттач.
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)