За последние 24 часа нас посетили 22737 программистов и 1217 роботов. Сейчас ищут 750 программистов ...

Как организовать скрытие списка файлов в спойлер кроме первых двадцати?

Тема в разделе "Сделайте за меня", создана пользователем dydaevskiy, 16 июн 2016.

  1. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    Здравствуйте друзья, имеется сайт на WordPress на сайте установлен плагин WP-RECALL - плагин личного кабинета пользователя. Для данного плагина был написан скрипт который в корне сайта заходит в каталог www/_doc/(в данном каталоге находятся файлы отчетов пользователей в основном это pdf, jpg, doc), открывает каталог имя которого идентично имени пользователя и выводит содержимое каталога в виде списка (list).
    Содержимое скрипта для WP-RECALL:
    PHP:
    1. <?php
    2. add_action('init','add_tab_my_report_files');
    3. add_action('init','add_tab_my_report_files');
    4. function add_tab_my_report_files(){
    5.     rcl_tab('myform','my_report_files_recall_block','Мои отчеты',array('public'=>0,'class'=>'fa-file-text-o','order'=>20));
    6. }
    7. function my_report_files_recall_block($user_lk){
    8.  
    9. global $current_user;
    10.       get_currentuserinfo();
    11.       $user_login =  '' . $current_user->user_login;
    12. $dir = '_doc/'.$user_login.'/';
    13. $type_files = substr("$filename", -4); // возвращает "дату"
    14. $list = glob($dir.$user_login.'_*.*');
    15. $links = array ();
    16. foreach( $list as $file_path){
    17.   $filename = basename($file_path);
    18.   $rest = substr("$filename", -14, 14); // Начало отображения имени с 14 символа от конца, и отображать 14 символов
    19.   //$links[] = "<a href=\"http://www.sto.sumy.ua/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."<a>";
    20.   $links[] = "<a href=\"http://testgoldauto.com/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."</a> <a href=\"testgoldauto.com/_doc/$user_login/".$filename."\" download><i class=\"fa fa-download fa-2x\" aria-hidden=\"true\" ></i></a>";
    21. }
    22. $preserved = array_reverse($links, true);
    23. return implode ('<br>',$preserved);
    24. }
    Визуально итоги работы скрипта выглядят вот так:
    [​IMG]

    Теперь самое интересное, как отобразить в списке файлов только первые 10 штук, а остальные скрыть в спойлер и разбить на 4 колонки?

    Я это вижу так:
    В обычном режиме отображается 10 файлов а в низу отображается спойлер с надписью "Показать старые отчеты"
    Как-то так:
    [​IMG]
    Когда пользователь нажимает на спойлер отображается четыре колонки с старыми файлами отчетов общее колличество которых поделено на 4 колонки.
    Как-то так:
    [​IMG]
     
    #1 dydaevskiy, 16 июн 2016
    Последнее редактирование: 16 июн 2016
  2. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    dydaevskiy нравится это.
  3. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    Хм... у меня не получается не то что разбить на четыре колонки а даже настроить вывод диологового окна для загрузки файлов.
    Вот нашел скрипт php отвечающий за диалоговое окно загрузки файлов:
    https://php.ru/manual/function.readfile.html
    Пример #1 Форсирование скачки с помощью readfile()
    PHP:
    1. <?php
    2. $file = 'monkey.gif';
    3.  
    4. if (file_exists($file)) {
    5.     header('Content-Description: File Transfer');
    6.     header('Content-Type: application/octet-stream');
    7.     header('Content-Disposition: attachment; filename='.basename($file));
    8.     header('Expires: 0');
    9.     header('Cache-Control: must-revalidate');
    10.     header('Pragma: public');
    11.     header('Content-Length: ' . filesize($file));
    12.     readfile($file);
    13.     exit;
    14. }
    15. ?>
    Вот мой код:
    PHP:
    1. <?php
    2.  
    3. add_action('init','add_tab_my_report_files');
    4. add_action('init','add_tab_my_report_files');
    5. function add_tab_my_report_files(){
    6.     rcl_tab('myform','my_report_files_recall_block','Мои отчеты',array('public'=>0,'class'=>'fa-file-text-o','order'=>20));
    7. }
    8. function my_report_files_recall_block($user_lk){
    9.  
    10. global $current_user;
    11.       get_currentuserinfo();
    12.  
    13.       $user_login =  '' . $current_user->user_login;
    14.  
    15. $dir = '_doc/'.$user_login.'/';
    16. $type_files = substr("$filename", -4); // возвращает "дату"
    17. $list = glob($dir.$user_login.'_*.*');
    18. $links = array ();
    19.  
    20. foreach( $list as $file_path){
    21.   $filename = basename($file_path);
    22.  
    23.  
    24.   $rest = substr("$filename", -14, 14); // Начало отображения имени с 14 символа от конца, и отображать 14 символов
    25.   //$links[] = "<a href=\"http://www.sto.sumy.ua/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."<a>";
    26.   $links[] = "<a href=\"http://testgoldauto.com/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."</a> <a href=\"testgoldauto.com/_doc/$user_login/".$filename."\" download><i class=\"fa fa-download fa-2x\" aria-hidden=\"true\" ></i></a>";
    27. }
    28.  
    29. //$file = ($dir.$user_login.'_*.*');
    30. if (file_exists($filename)) {
    31.     header('Content-Description: File Transfer');
    32.     header('Content-Type: application/octet-stream');
    33.     header('Content-Disposition: attachment; filename='.basename($filename));
    34.     header('Expires: 0');
    35.     header('Cache-Control: must-revalidate');
    36.     header('Pragma: public');
    37.     header('Content-Length: ' . filesize($filename));
    38.     readfile($filename);
    39.     exit;
    40. }
    41.  
    42. $preserved = array_reverse($links, true);
    43. return implode ('<br>',$preserved);
    44.  
    45.  
    46. }

    Я что-то явно делаю не так, подскажите пожалуйста что именно.
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
  5. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @dydaevskiy чтобы в коде разобраться там сильно знаний не нужно, просто много времени уходит на нудное проектирование и тестирование, мало кто этим хочет заниматься. По этому всё в твоих руках. Главное точно знать что хочешь реализовать. Без этого сложно что-то сделать. Ну а код написать уже просто, вот ты сам и readfile нашёл, таким образом тут подскажут и функции и принципы реализации, главное очень просто описать что хочешь получить в итоге, какой результат.
     
    dydaevskiy нравится это.
  7. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    Денис спасибо, я только начинаю учить PHP более менее сносно знаю css и html, но PHP для меня это новая совершенно не изведанная вселенная. Вот у меня на самом деле в масштабе php программирования достаточно не большие проектировки но блин уходит столько время что б найти вставить проверить запустить оттестить. Ужас. Я понимаю что программирование само по себе далеко не быстрое ремесло. Но не ужели так будет все время на пути программированая?
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Будет быстро если ты будешь решать однотипные задачи.
    Ну и уникальные тоже быстро будут получаться.
    Главное основы понять, как всё работает и взаимодействует, по этому с 7 класса в школе преподают информатику обычно.
    Читай книги для начинающих, зная теорию и имея практику с книг, будешь быстрее понимать.
     
    dydaevskiy нравится это.
  9. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    Не получается реализовать загрузку файлов в диалоговом окне браузера, дайте хотя б намек где мой косяк.
    Функция которую не получается организовать заключена в блоке /*РЕАЛИЗАЦИЯ ДИАЛОГОВОГО ОКНА ЗАГРУЗКИ ФАЙЛА В БРАУЗЕРЕ*/
    Вот мой HELL:
    PHP:
    1. <?php
    2. /*Вывод ошибок для отладки на экран*/
    3. ini_set('display_errors',1);
    4.   /*Конц вывода ошибок для отладки на экран*/
    5.  
    6. /*Добавление новой вкладки в WP-RECALL*/
    7. add_action('init','add_tab_my_report_files');
    8.   /*Функция добавления*/
    9. function add_tab_my_report_files(){
    10.     /*Внешний вид новой вкладки иконка, тайтл*/
    11.     rcl_tab('myform','my_report_files_recall_block','Мои отчеты',array('public'=>0,'class'=>'fa-file-text-o','order'=>20));
    12. }
    13. /*Содержимое вкладки и место отображения контента - $user_lk*/
    14. function my_report_files_recall_block($user_lk){
    15.   /*WordPress захват логина пользователя*/  
    16. global $current_user;
    17.       get_currentuserinfo();
    18.  
    19.       $user_login =  '' . $current_user->user_login;
    20.   /* END WordPress захват логина пользователя*/  
    21.  
    22. /*Входим в каталог _doc за тем в подкаталог имя которого соответствует логину пользователя*/
    23. $dir = '_doc/'.$user_login.'/';
    24. /*Загоняем в переменную $list весь список файлов который находится в каталоге и подкаталоге*/
    25. $list = glob($dir.$user_login.'_*.*');
    26. /*Создаем пустой массив в который далее будет добавлен весь список файлов*/
    27. $links = array ();
    28. /*Добавлем список файлов из подкаталога с логином пользователя в пустой массив*/
    29. foreach( $list as $file_path){
    30.   $filename = basename($file_path);
    31. /*Начало отображения имени файла с 14 символа от конца, и отображать 14 символов*/
    32.   $rest = substr("$filename", -14, 14);
    33.   //$links[] = "<a href=\"http://www.sto.sumy.ua/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."<a>";
    34.   /*Создаем маску для кнопки загрузки файлов*/
    35.   $download = "<a href=\"testgoldauto.com/_doc/$user_login/".$filename."\" download><i class=\"fa fa-download fa-2x\" aria-hidden=\"true\" ></i></a>";
    36.  
    37. /*РЕАЛИЗАЦИЯ ДИАЛОГОВОГО ОКНА ЗАГРУЗКИ ФАЙЛА В БРАУЗЕРЕ*/
    38. $file = ($dir.$user_login.'_*.*');
    39.  
    40. if (file_exists($file)) {
    41.     header('Content-Description: File Transfer');
    42.     header('Content-Type: application/octet-stream');
    43.     header('Content-Disposition: attachment; filename='.basename($file));
    44.     header('Expires: 0');
    45.     header('Cache-Control: must-revalidate');
    46.     header('Pragma: public');
    47.     header('Content-Length: ' . filesize($file));
    48.     readfile($file);
    49.     exit;
    50. }
    51. /* END РЕАЛИЗАЦИЯ ДИАЛОГОВОГО ОКНА ЗАГРУЗКИ ФАЙЛА В БРАУЗЕРЕ*/
    52.  
    53.   /*Добавляем в пустой массив список файлов по указанной в переменной маске*/
    54.   $links[] = "<a href=\"http://testgoldauto.com/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."</a> ".$download." ";
    55.  
    56. }
    57. /*Реверсируем список файлов в обратном порядке*/
    58. $preserved = array_reverse($links, true);
    59. /*Отображаем в основное содержимое полученый список файлов в обратном порядке*/
    60. return implode ('<br>',$preserved);
    61.  
    62.  
    63. }
    Что нужно осуществить:

    При нажатии на данную кнопку
    [​IMG]
    Должно появится диалоговое окно браузера загрузки файлов и оно появляется
    [​IMG]
    Но при сохранении файлов происходит ошибка, то есть файлы тупо не сохраняются
    [​IMG]

     
    #9 dydaevskiy, 17 июн 2016
    Последнее редактирование: 17 июн 2016
  10. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    посмотри через fiddler или wireshark что ты отправляешь в браузер, это и есть отладка, откуда мы знаем в чём проблема, а вот у тебя всё есть чтобы самому выяснить
     
    dydaevskiy нравится это.
  11. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    Логи OpenServer:
    Код (Text):
    1. [17-Jun-2016 08:11:48 UTC] PHP Warning:  Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\testgoldauto.com\wp-content\themes\ds-orao\header.php:2) in D:\OpenServer\domains\testgoldauto.com\wp-content\plugins\wp-recall\add-on\files\index.php on line 44
    2. [17-Jun-2016 08:11:48 UTC] PHP Warning:  Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\testgoldauto.com\wp-content\themes\ds-orao\header.php:2) in D:\OpenServer\domains\testgoldauto.com\wp-content\plugins\wp-recall\add-on\files\index.php on line 45
    3. [17-Jun-2016 08:11:48 UTC] PHP Warning:  Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\testgoldauto.com\wp-content\themes\ds-orao\header.php:2) in D:\OpenServer\domains\testgoldauto.com\wp-content\plugins\wp-recall\add-on\files\index.php on line 48
    4. [17-Jun-2016 08:11:48 UTC] PHP Warning:  Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\testgoldauto.com\wp-content\themes\ds-orao\header.php:2) in D:\OpenServer\domains\testgoldauto.com\wp-content\plugins\wp-recall\add-on\files\index.php on line 72
    5. [17-Jun-2016 08:11:48 UTC] PHP Warning:  Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\testgoldauto.com\wp-content\themes\ds-orao\header.php:2) in D:\OpenServer\domains\testgoldauto.com\wp-content\plugins\wp-recall\add-on\files\index.php on line 73
    6. [17-Jun-2016 08:11:48 UTC] PHP Warning:  readfile(_doc/admin/): failed to open stream: No such file or directory in D:\OpenServer\domains\testgoldauto.com\wp-content\plugins\wp-recall\add-on\files\index.php on line 76
    На сколько я понял скрипт не может изменить хедер так как информация о хедере уже добавлена. Я может что- то не понял но мне казалось что хедер имелся ввиду в мета данных сохраняемого документа.
     
  12. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    Нашел интересное решение по данной ссылке

    Привожу текст из статьи:
    СПОСОБ №2. PHP СКРИПТ!
    Бывает хостер загоняет нас в условия, когда мы особо не можем управлять настройками сервера используя .htaccess (увы и ах, это бывает очень часто) приходится выкручиваться скриптовыми решениями, а именно:

    PHP:
    1. $filename = $_GET['filename'];
    2.  // нужен для Internet Explorer, иначе Content-Disposition игнорируется
    3. if(ini_get('zlib.output_compression'))
    4.  ini_set('zlib.output_compression', 'Off');
    5. $file_extension = strtolower(substr(strrchr($filename,"."),1));
    6. if( $filename == "" )
    7. {
    8.  echo "ОШИБКА: не указано имя файла.";
    9.  exit;
    10. } elseif ( ! file_exists( $filename ) ) // проверяем существует ли указанный файл
    11. {
    12.  echo "ОШИБКА: данного файла не существует.";
    13.  exit;
    14. };
    15. switch( $file_extension )
    16. {
    17.  case "pdf": $ctype="application/pdf"; break;
    18.  case "exe": $ctype="application/octet-stream"; break;
    19.  case "zip": $ctype="application/zip"; break;
    20.  case "doc": $ctype="application/msword"; break;
    21.  case "xls": $ctype="application/vnd.ms-excel"; break;
    22.  case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
    23.  case "mp3": $ctype="audio/mp3"; break;
    24.  case "gif": $ctype="image/gif"; break;
    25.  case "png": $ctype="image/png"; break;
    26.  case "jpeg":
    27.  case "jpg": $ctype="image/jpg"; break;
    28.  default: $ctype="application/force-download";
    29. }
    30. header("Pragma: public");
    31. header("Expires: 0");
    32. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    33. header("Cache-Control: private",false); // нужен для некоторых браузеров
    34. header("Content-Type: $ctype");
    35. header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
    36. header("Content-Transfer-Encoding: binary");
    37. header("Content-Length: ".filesize($filename)); // необходимо доделать подсчет размера файла по абсолютному пути
    38. readfile("$filename");
    39. exit();
    Все что вам нужно это создать на сервере пхп файл, к примеру, с именем: filesave.php и вставить туда данный скрипт. А ссылка на загружаемый файл должна выглядеть следующим образом:

    1
    <a href="filesave.php?filename=file.pdf">Скачать</a>
    Надеюсь данная строка не требует от меня пояснений. После этого все ваши файлы будут напрямую загружаться на компьютер. Что касается скрипта, то понятное дело, желательно его использовать если вы хоть немного понимаете, что там написано, иначе без кучи косяков и вопросов «Ну почему оно не работает!» не обойтись. Поэтому сами решайте использовать данный способ или тот, который описан ниже.
    ========================================================================
    Я создал файл filesave.php
    И изменил свой код
    PHP:
    1. <?php
    2. /*Вывод ошибок для отладки на экран*/
    3. ini_set('display_errors',1);
    4.   /*Конц вывода ошибок для отладки на экран*/
    5. /*Добавление новой вкладки в WP-RECALL*/
    6. add_action('init','add_tab_my_report_files');
    7.   /*Функция добавления*/
    8. function add_tab_my_report_files(){
    9.     /*Внешний вид новой вкладки иконка, тайтл*/
    10.     rcl_tab('myform','my_report_files_recall_block','Мои отчеты',array('public'=>0,'class'=>'fa-file-text-o','order'=>20));
    11. }
    12. /*Содержимое вкладки и место отображения контента - $user_lk*/
    13. function my_report_files_recall_block($user_lk){
    14.   /*WordPress захват логина пользователя*/
    15. global $current_user;
    16.       get_currentuserinfo();
    17.       $user_login =  '' . $current_user->user_login;
    18.   /* END WordPress захват логина пользователя*/
    19. /*Входим в каталог _doc за тем в подкаталог имя которого соответствует логину пользователя*/
    20. $dir = '_doc/'.$user_login.'/';
    21. /*Загоняем в переменную $list весь список файлов который находится в каталоге и подкаталоге*/
    22. $list = glob($dir.$user_login.'_*.*');
    23. /*Создаем пустой массив в который далее будет добавлен весь список файлов*/
    24. $links = array ();
    25. /*Добавлем список файлов из подкаталога с логином пользователя в пустой массив*/
    26. foreach( $list as $file_path){
    27.   $filename = basename($file_path);
    28. /*Начало отображения имени файла с 14 символа от конца, и отображать 14 символов*/
    29.   $rest = substr("$filename", -14, 14);
    30.   //$links[] = "<a href=\"http://www.sto.sumy.ua/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."<a>";
    31.   /*Создаем маску для кнопки загрузки файлов*/
    32.   //$download = "<a href='filesave.php?'\"testgoldauto.com/_doc/$user_login/".$filename."\" download><i class=\"fa fa-download fa-2x\" aria-hidden=\"true\" ></i></a>";
    33.   include "\filesave.php";
    34.   $download = "<a href="filesave.php?$filename">Скачать</a>";
    35. /*РЕАЛИЗАЦИЯ ДИАЛОГОВОГО ОКНА ЗАГРУЗКИ ФАЙЛА В БРАУЗЕРЕ*/
    36. //<a href="filesave.php?filename=file.pdf">Скачать</a>
    37. /* END РЕАЛИЗАЦИЯ ДИАЛОГОВОГО ОКНА ЗАГРУЗКИ ФАЙЛА В БРАУЗЕРЕ*/
    38.   /*Добавляем в пустой массив список файлов по указанной в переменной маске*/
    39.   $links[] = "<a href=\"http://testgoldauto.com/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."</a> ".$download." ";
    40. }
    41. /*Реверсируем список файлов в обратном порядке*/
    42. $preserved = array_reverse($links, true);
    43. /*Отображаем в основное содержимое полученый список файлов в обратном порядке*/
    44. return implode ('<br>',$preserved);
    45. }

    Я упорно чего-то не понимаю, не загружается файл и все.
     
  13. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Как это перевести на русский?
     
  14. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    функцию readfile(_doc/администратора/): не удалось открыть поток: нет такого файла или каталога

    Но такой каталог есть
     
  15. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Иcпользуй FileReader для отправки на сервер, а на сервере функцию move_uploaded_file
    Сейчас уже не то, что раньше... ;) - не стоит возвращаться к старым механизмам, уже вовсех поддержка последних версий и без обнов никуда :)
     
  16. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    что значит каталог? ты должен указать путь к файлу! и могут быть проблемы с русскими символами в пути
     
  17. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    Денис вот эта строка моего ответа:

    функцию readfile(_doc/администратора/): не удалось открыть поток: нет такого файла или каталога

    Это просто итог перевода логов из яндекс переводчика. Естественно не каких русских каталогов и подкаталогов не использую
    Продолжаю рыть в поисках траблы.
    --- Добавлено ---
    Ухты... Спасибо! РОЮ дальше.

    Ребята всем огромное спасибо что тратите на меня Ваше время.
     
  18. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    почему ты пытаешься открыт папку, когда эта функция для файлов?
     
  19. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    Разобрался (правда в IE не срабатывает диалоговое окно, просто открывается файл)
    Вот рабочий код:
    Код (Text):
    1. <?php
    2. //Вывод ошибок для отладки на экран
    3. //ini_set('display_errors',1);
    4. //error_reporting(E_ALL);
    5.   //Конц вывода ошибок для отладки на экран
    6. //Добавление новой вкладки в WP-RECALL
    7. add_action('init','add_tab_my_report_files');
    8.  
    9.   //Функция добавления
    10. function add_tab_my_report_files(){
    11.     //Внешний вид новой вкладки иконка, тайтл
    12.     rcl_tab('myform','my_report_files_recall_block','Мои отчеты',array('public'=>0,'class'=>'fa-file-text-o','order'=>20));
    13. }
    14. //Содержимое вкладки и место отображения контента - $user_lk
    15. function my_report_files_recall_block($user_lk){
    16.   //WordPress захват логина пользователя
    17. global $current_user;
    18.       get_currentuserinfo();
    19.       $user_login =  '' . $current_user->user_login;
    20.   // END WordPress захват логина пользователя
    21.  
    22.   //Входим в каталог _doc за тем в подкаталог имя которого соответствует логину пользователя
    23. $dir = '_doc/'.$user_login.'/';
    24.  
    25. //Загоняем в переменную $list весь список файлов который находится в каталоге и подкаталоге
    26. $list = glob($dir.$user_login.'_*.*');
    27. //Создаем пустой массив в который далее будет добавлен весь список файлов
    28. $links = array ();
    29. //Добавлем список файлов из подкаталога с логином пользователя в пустой массив
    30. foreach( $list as $file_path){
    31.   $filename = basename($file_path);
    32. //Начало отображения имени файла с 14 символа от конца, и отображать 14 символов
    33.   $rest = substr("$filename", -14, 14);
    34.   //$links[] = "<a href=\"http://www.sto.sumy.ua/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."<a>";
    35.   //Создаем маску для кнопки загрузки файлов
    36.  
    37.   $download = "<a href=\"http://testgoldauto.com/_doc/$user_login/".$filename."\" download><i class=\"fa fa-download fa-2x\" aria-hidden=\"true\" ></i></a>";
    38. //$download = "<a href=\"testgoldauto.com/_doc/$user_login/".$filename."\" download><i class=\"fa fa-download fa-2x\" aria-hidden=\"true\" ></i></a>";
    39.  
    40.   //Добавляем в пустой массив список файлов по указанной в переменной маске
    41.   $links[] = "<a href=\"http://testgoldauto.com/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."</a> ".$download." ";
    42. }
    43.  
    44.  
    45. //РЕАЛИЗАЦИЯ ДИАЛОГОВОГО ОКНА ЗАГРУЗКИ ФАЙЛА В БРАУЗЕРЕ
    46.  
    47. $file = ($filename);
    48. if (file_exists($file)) {
    49.     header('Content-Description: File Transfer');
    50.     header('Content-Type: application/octet-stream');
    51.     header('Content-Disposition: attachment; filename='.basename($file));
    52.     header('Expires: 0');
    53.     header('Cache-Control: must-revalidate');
    54.     header('Pragma: public');
    55.     header('Content-Length: ' . filesize($file));
    56.     readfile($file);
    57.     exit;
    58. }
    59.  
    60. // END РЕАЛИЗАЦИЯ ДИАЛОГОВОГО ОКНА ЗАГРУЗКИ ФАЙЛА В БРАУЗЕРЕ
    61.  
    62.  
    63. //Реверсируем список файлов в обратном порядке
    64. $preserved = array_reverse($links, true);
    65. //Отображаем в основное содержимое полученый список файлов в обратном порядке
    66. return implode ('<br>',$preserved);
    67. }

    Все дело было в пропущенных http:// в переменной $download

    ОТДЕЛЬНОЕ СПАСИБО ВАМ ДЕНИС.
     
  20. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    поищи в поиске решение, php ie force file download
    может нужно ещё заголовков добавить для IE, и сейчас же вроде уже EDGE браузер.

    @dydaevskiy вот помучаемся так несколько дней, пока не поймёшь, что проще всего заняться отладкой и перепроверить каждую строчку кода в интерактивном или с помощью var_dump() способом, так самостоятельно можно найти почти любую ошибку.
     
  21. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    Как сделать отладку с помощью var_dump() мне кажется я понял, а интерактивный получается просто тестирование скрипта после каждой новой строчки?
     
  22. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    ну с опытом сможешь тестировать только спорные моменты или идти от ошибки вверх.
    ты почитай статью, там пишут что можно только конкретные строчки смотреть и ещё больше возможностей, на это нужно время потратить, читать теорию, практиковаться.
    сможешь и ракеты в космос отправлять.
     
  23. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    В общем День у меня новый затык (.
    Выдачу списка файлов и организацию кнопки для загрузки файлов я сделал (IE пусть подохнет). Теперь мне необходмо организовать такой алгоритм отображения.
    if Если файлов в каталоге пользователя менее 10 то отобразить уже реализованный вид отображения файлов.
    else Но если в каталоге пользователя файлов более 10 мне необходимо отобразить только первых десять а остальные спрятать в спойлер.
    И общий список файлов в спойлере разделить на 4 столбика. То есть как-то так:
    [​IMG]

    Естественно мне на помощь приходит конструкция ifelse:
    Код (Text):
    1. <?php
    2. if ($a > $b) {
    3.      echo "a больше, чем b";
    4. } else {
    5.      echo "a НЕ больше, чем b";
    6. }
    7. ?>

    И так как мне необходимо вырвать из массива первые десять строк, на помощь приходит
    Извлечение элементов из массива с помощью array_slice()

    Сейчас мой код выглядет так:
    Код (Text):
    1. <?php
    2. //Вывод ошибок для отладки на экран
    3. //ini_set('display_errors',1);
    4. //error_reporting(E_ALL);
    5.   //Конц вывода ошибок для отладки на экран
    6. //Добавление новой вкладки в WP-RECALL
    7. add_action('init','add_tab_my_report_files');
    8.  
    9.   //Функция добавления
    10. function add_tab_my_report_files(){
    11.     //Внешний вид новой вкладки иконка, тайтл
    12.     rcl_tab('myform','my_report_files_recall_block','Мои отчеты',array('public'=>0,'class'=>'fa-file-text-o','order'=>20));
    13. }
    14. //Содержимое вкладки и место отображения контента - $user_lk
    15. function my_report_files_recall_block($user_lk){
    16.   //WordPress захват логина пользователя
    17. global $current_user;
    18.       get_currentuserinfo();
    19.       $user_login =  '' . $current_user->user_login;
    20.   // END WordPress захват логина пользователя
    21.  
    22.   //Входим в каталог _doc за тем в подкаталог имя которого соответствует логину пользователя
    23. $dir = '_doc/'.$user_login.'/';
    24.  
    25. //Загоняем в переменную $list весь список файлов который находится в каталоге и подкаталоге
    26. $list = glob($dir.$user_login.'_*.*');
    27. //Создаем пустой массив в который далее будет добавлен весь список файлов
    28. $links = array ();
    29.  
    30. //Добавлем список файлов из подкаталога с логином пользователя в пустой массив
    31. foreach( $list as $file_path){
    32.   $filename = basename($file_path);
    33. //Начало отображения имени файла с 14 символа от конца, и отображать 14 символов
    34.   $rest = substr("$filename", -14, 14);
    35.   //$links[] = "<a href=\"http://www.sto.sumy.ua/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."<a>";
    36.   //Создаем маску для кнопки загрузки файлов
    37.  
    38.   $download = "<a href=\"http://testgoldauto.com/_doc/$user_login/".$filename."\" download><i class=\"fa fa-download fa-2x\" aria-hidden=\"true\" ></i></a>";
    39. //$download = "<a href=\"testgoldauto.com/_doc/$user_login/".$filename."\" download><i class=\"fa fa-download fa-2x\" aria-hidden=\"true\" ></i></a>";
    40.  
    41.   //Добавляем в пустой массив список файлов по указанной в переменной маске
    42.   $links[] = "<a href=\"http://testgoldauto.com/_doc/$user_login/".$filename."\" target=\"_blank\">".$rest."</a> ".$download." ";
    43. }
    44.  
    45. if ($filename < 10) {
    46.     print_r( array_slice( $links, 0 - 10 ) );
    47.    
    48.  
    49. } else {
    50. //РЕАЛИЗАЦИЯ ДИАЛОГОВОГО ОКНА ЗАГРУЗКИ ФАЙЛА В БРАУЗЕРЕ
    51.  
    52. $file = ($filename);
    53. if (file_exists($file)) {
    54.     header('Content-Description: File Transfer');
    55.     header('Content-Type: application/octet-stream');
    56.     header('Content-Disposition: attachment; filename='.basename($file));
    57.     header('Expires: 0');
    58.     header('Cache-Control: must-revalidate');
    59.     header('Pragma: public');
    60.     header('Content-Length: ' . filesize($file));
    61.     readfile($file);
    62.     exit;
    63. }
    64.  
    65. // END РЕАЛИЗАЦИЯ ДИАЛОГОВОГО ОКНА ЗАГРУЗКИ ФАЙЛА В БРАУЗЕРЕ
    66.  
    67.  
    68. //Реверсируем список файлов в обратном порядке
    69. $preserved = array_reverse($links, true);
    70. //Отображаем в основное содержимое полученый список файлов в обратном порядке
    71. return implode ('<br>',$preserved);
    72. }
    73. }
    И итог его работы получается таким:
    [​IMG]

    Как мне вытянуть из print_r( array_slice( $links, 0 - 10 ) ); первые 10 строк массива в переменную так что б они отображались адекватно, то есть так:
    [​IMG]
     
  24. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    что значит адекватно? просто нужный html код формируй
     
  25. dydaevskiy

    dydaevskiy Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    21
    Симпатии:
    0
    Разобрался, а как указать в $_poslednie_posle_10 = array_slice($links, 11 - );
    Прописать правильно что б происходил захват всех строк массива которые идут после 11 строки?

    То есть допустм у меня отображение первых десяти строк организовано захватом в переменную первых десяти строк массива, то есть вот так:
    Код (Text):
    1. //Захват первых десяти файлов массива
    2.     $_pervue_10 = array_slice($links, 0 - 10);
    Ну е могу понять как захватить не определенный диапазон строк а все строки которые имеются в массиве но только после первых десяти строк массива.