За последние 24 часа нас посетили 18589 программистов и 1626 роботов. Сейчас ищут 1333 программиста ...

Передача параметра download в window.location.search

Тема в разделе "JavaScript и AJAX", создана пользователем Programmed, 23 апр 2024.

  1. Programmed

    Programmed Новичок

    С нами с:
    22 апр 2024
    Сообщения:
    2
    Симпатии:
    0
    Привет всем разработчикам!

    Есть рабочий код на PHP + JavaSript, основной смысл которого показать 10-секундную задержку перед скачиванием файла. При скачивании хочется подставить более-менее семантическое имя, а не 0013, для этого, передаю параметр download в window.location.search, но ничего не происходит... Что сделано не так?

    PHP:
    1. <div class="divblock">
    2. <?php
    3.     $formats[] = ['is_url' => $books[0]->books_is_fb2_url, 'extension' => '.fb2', 'button_label' => 'FB2'];
    4.     $formats[] = ['is_url' => $books[0]->books_is_txt_url, 'extension' => '.txt', 'button_label' => 'TXT'];
    5.     $formats[] = ['is_url' => $books[0]->books_is_pdf_url, 'extension' => '.pdf', 'button_label' => 'PDF'];
    6.     $formats[] = ['is_url' => $books[0]->books_is_epub_url, 'extension' => '.epub', 'button_label' => 'ePub'];
    7.     foreach ($formats as $format) {
    8.         if ($format['is_url']) {
    9. ?>
    10.             <div class="download-container">
    11.                 <div class="download-btn-<?php echo $format['button_label']; ?>" onclick="SubmitForm('download<?php echo $books[0]->books_id; ?>');">Скачать <?php echo $format['button_label']; ?><span></span></div>
    12.                 <div class="countdown-<?php echo $format['button_label']; ?>"></div>
    13.                 <div class="pleaseWait-text-<?php echo $format['button_label']; ?>">Формирование ссылки для скачивания...</div>
    14.                 <div class="manualDownload-text-<?php echo $format['button_label']; ?>">Если загрузка не началась, пожалуйста, <a href="<?php echo $downloads_path, str_pad($books[0]->books_id, 4, '0', STR_PAD_LEFT), $format['extension']; ?>" download="<?php echo $books[0]->books_en_name, $format['extension']; ?>" onclick="SubmitForm('download<?php echo $books[0]->books_id; ?>');">кликните по ссылке</a>.</div>
    15.             </div>
    16.             <style>
    17.                 .download-btn-<?php echo $format['button_label']; ?> { background-color: #ffffe0; cursor: pointer; font-size: 100%; text-align: center; padding-left: 2px; display: block; line-height: 26px; margin-bottom: 2px; text-decoration: none; font-weight: normal; border: 2px solid #8d8d8d; voice-family:"\"}\""; /* Box Model fix */ voice-family: inherit; border-radius: 10px; width: 120px; }
    18.                 .download-btn-<?php echo $format['button_label']; ?>:hover, a.download-btn-<?php echo $format['button_label']; ?>#active_menu { background: #daa520; text-decoration: none; }
    19.                 .pleaseWait-text-<?php echo $format['button_label']; ?> { display: none; }
    20.                 .countdown-<?php echo $format['button_label']; ?> { display: none; width: 70px; height: 70px; background: url('http://img3.depositfiles.com/images/timer.gif') no-repeat; text-align: center; }
    21.                 .manualDownload-text-<?php echo $format['button_label']; ?> { display: none; }
    22.             </style>
    23.             <script type="text/javascript">
    24.                 const downloadBtn<?php echo $format['button_label']; ?> = document.querySelector(".download-btn-<?php echo $format['button_label']; ?>");
    25.                 const countdown<?php echo $format['button_label']; ?> = document.querySelector(".countdown-<?php echo $format['button_label']; ?>");
    26.                 const pleaseWaitText<?php echo $format['button_label']; ?> = document.querySelector(".pleaseWait-text-<?php echo $format['button_label']; ?>");
    27.                 const manualDownloadText<?php echo $format['button_label']; ?> = document.querySelector(".manualDownload-text-<?php echo $format['button_label']; ?>");
    28.                 var timeLeft<?php echo $format['button_label']; ?> = 9;
    29.  
    30.                 downloadBtn<?php echo $format['button_label']; ?>.addEventListener("click", () => {
    31.                     downloadBtn<?php echo $format['button_label']; ?>.style.display = "none";
    32.                     countdown<?php echo $format['button_label']; ?>.style.display = "block";
    33.                     countdown<?php echo $format['button_label']; ?>.innerHTML = '<span class="countdown_span">' + timeLeft<?php echo $format['button_label']; ?> + '</span>';
    34.  
    35.                     var downloadTimer<?php echo $format['button_label']; ?> = setInterval(function timeCount<?php echo $format['button_label']; ?>(){
    36.                         timeLeft<?php echo $format['button_label']; ?> -= 1;
    37.                         countdown<?php echo $format['button_label']; ?>.innerHTML = '<span class="countdown_span">' + timeLeft<?php echo $format['button_label']; ?> + '</span>';
    38.  
    39.                         if(timeLeft<?php echo $format['button_label']; ?> <= 0){
    40.                             clearInterval(downloadTimer<?php echo $format['button_label']; ?>);
    41.                             pleaseWaitText<?php echo $format['button_label']; ?>.style.display = "block";
    42.                             let download_search<?php echo $format['button_label']; ?> = "?download=<?php echo $books[0]->books_en_name, $format['extension']; ?>";
    43.                             let download_href<?php echo $format['button_label']; ?> = "<?php echo $downloads_path, str_pad($books[0]->books_id, 4, '0', STR_PAD_LEFT), $format['extension']; ?>";
    44.                             window.location.search = download_search<?php echo $format['button_label']; ?>;
    45.                             window.location.href = download_href<?php echo $format['button_label']; ?>;
    46.  
    47.                             setTimeout<?php echo $format['button_label']; ?>(() => {
    48.                                 pleaseWaitText<?php echo $format['button_label']; ?>.style.display = "none";
    49.                                 manualDownloadText<?php echo $format['button_label']; ?>.style.display = "block";
    50.                             }, 4000);
    51.                         }
    52.                     }, 1000);
    53.                 });
    54.             </script>
    55. <?php
    56.         }
    57.     }
    58. ?>
    59. </div>
     
    #1 Programmed, 23 апр 2024
    Последнее редактирование модератором: 25 апр 2024
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.105
    Симпатии:
    1.243
    Адрес:
    там-сям
    да практически всё. )))
    от того что ты будешь красивое подставлять в location на фронтенде, бекенд не начнет понимать "красивые" имена. начни с бека - т.е. с пхп.

    спроси так: "у меня файлы хранятся вот так, а я хочу их раздавать вот по таким URL-ам. как такое сделать?"
    кнопки-шнопки и вся магия фронт-энда тут ВООБЩЕ НЕ ПРИ ЧЁМ.
    --- Добавлено ---
    программист может разбивать задачу на подзадачи так, чтобы каждая подзадача была понятна самому. или чтобы вопрос о непонятном был понятным. )))
     
    #2 artoodetoo, 25 апр 2024
    Последнее редактирование: 25 апр 2024