2012-03-21 2 views

ответ

1

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

loadDir.php:

<?php 
    if(isset($_GET['dir'])) { 
     //Get array of valid extensions 
     if(isset($_GET['ext'])) { 
      if($_GET['ext'] == 'pdf') $validext = array("pdf"); 
      else $validext = array("jpg", "jpeg", "png", "gif"); 
     } else { 
      $validext = array("pdf", "jpg", "jpeg", "png", "gif"); 
     } 
     $root = dirname(dirname(dirname(getcwd()))) . "/"; 
     $directory = $root . $_GET['dir']; 
     $files = scandir($directory); 
     $thumb_count = 1; 
     //make sure we haven't gone too high (should never be called) 
     if(strpos($directory, 'images') == false) $directory = $root . "images"; 

     //TODO: sort array with dirs in front 

     foreach($files as $file) { 
      if ($file == '.') continue; //Remove current directory from loop 
      //If in the images folder, don't let them go higher 
      if ($file == '..' & $_GET['dir'] == 'images') continue; 
      $path = $_GET['dir']; 
      if($file == '..') { 
       $path = dirname($path); 
      } else { 
       $path .= "/".$file; 
      } 
      if(is_dir($directory."/".$file)) { 
       echo "<a href=\"#\" onClick=\"loadDir('".$_GET['div']."', '".$path."', '".$_GET['ext']."'); return false;\">[DIR]".$file."</a>".PHP_EOL; 
      } else { 
       //Check to see it's a valid extension 
       $ext = pathinfo($file, PATHINFO_EXTENSION); 
       $num = rand(0,100); 
       if(in_array($ext, $validext)) echo "<a href=\"#\" id=\"".$num."\" onClick=\"select(".$num.", '".$path."'); return false;\">[FILE]".$file."</a>".PHP_EOL; 
      } 
      if(($thumb_count % 5) == 0) echo "<br/>"; 
      $thumb_count++; 
     } 
    } else { 
     echo "Error loading: Directory not available"; 
    } 
?> 

администратор/компоненты/com_XXX/просмотров/XXX/TMPL/form.php:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
     <script type="text/javascript"> 
      selected_file = ""; 

      function select(id, file) { 
       $('#' + id).css('background-color', 'red'); 
       selected_file = file; 
      } 

      function loadDir(div, path, ext) { 
       $('#'+div+'Window').load('<?php echo JURI::root();?>administrator/components/com_lot/loadDir.php?div='+div+'&ext='+ext+'&dir='+path); 
      } 

      $(document).ready(function() { 
       $('#floorOpen').on("click", function(){ 
        loadDir('floor', 'images', 'pdf'); 
        $('#floorDialog').show(); 
       }); 

       $('#floorClose').on("click", function(){ 
        $('#floorDialog').hide(); 
        if(selected_file != "") $('#floor_plan').val(selected_file); 
        selected_file = ""; 
       }); 

       $('#floorCancel').on("click", function(){ 
        $('#floorDialog').hide(); 
        selected_file = ""; 
       }); 

       $('#mainOpen').on("click", function(){ 
        loadDir('main', 'images', 'img'); 
        $('#mainDialog').show(); 
       }); 

       $('#mainClose').on("click", function(){ 
        $('#mainDialog').hide(); 
        if(selected_file != "") $('#main_image').val(selected_file); 
        selected_file = ""; 
       }); 

       $('#mainCancel').on("click", function(){ 
        $('#mainDialog').hide(); 
        selected_file = ""; 
       }); 
      }); 
     </script> 

...... 

<div id="floorDialog" style="position:absolute;display:none;width:400px;height:300px;border:1px solid #c0c0c0;background-color:#f0f0f0;top:800px;left:400px;"> 
     <div id="floorWindow" style="position:relative;width: 390px;height: 250px;margin: 4px;border: 1px solid #c0c0c0;"> 
     </div> 
     <a href="#" onClick="return false;" id="floorCancel">Cancel</a><a href="#" onClick="return false;" id="floorClose">OK</a> 
    </div> 
    <div id="mainDialog" style="position:absolute;display:none;width:400px;height:300px;border:1px solid #c0c0c0;background-color:#f0f0f0;top:800px;left:400px;"> 
     <div id="mainWindow" style="position:relative;width: 390px;height: 250px;margin: 4px;border: 1px solid #c0c0c0;"> 
     </div> 
     <a href="#" onClick="return false;" id="mainCancel">Cancel</a><a href="#" onClick="return false;" id="mainClose">OK</a> 
    </div> 

.... 

<tr> 
      <td width="100" align="right" class="key"> 
       <label for="main_image"> 
        <?php echo JText::_('Main Image'); ?>: 
       </label> 
      </td> 
      <td> 
       <input class="text_area" type="text" name="main_image" id="main_image" size="32" maxlength="250" value="<?php echo $this->lotdata->main_image;?>" /><a href="#" onClick="return false;" id="mainOpen">Browse</a> 
      </td> 
     </tr> 
     <tr> 
      <td width="100" align="right" class="key"> 
       <label for="floor_plan"> 
        <?php echo JText::_('Floor Plan'); ?>: 
       </label> 
      </td> 
      <td> 
       <input class="text_area" type="text" name="floor_plan" id="floor_plan" size="32" maxlength="250" value="<?php echo $this->lotdata->floor_plan;?>" /><a href="#" onClick="return false;" id="floorOpen">Browse</a> 
      </td> 
     </tr> 

В основном я использую AJAX, чтобы получить форматированный список файлов/каталоги. Затем, используя javascript, мы выбираем нужный файл и выводим путь по закрытию диалогового окна.

+0

Как отформатировать блоки кода как php? – BeaverusIV

+0

Попытка создания эскизов, но черт возьми, структура Joomla! Делает это трудно сделать ... – BeaverusIV

0

Я думаю, вы можете использовать встроенный Joomla! поле формы Filelist для этих

<field name="myfile" type="filelist" default="" label="Select a file" description="" directory="administrator" filter="" exclude="" stripext="" />

Полных опций:

В списке файлы типа поле формы обеспечивает выпадающий список файлов из указанного каталога. Если поле имеет сохраненное значение, оно выбирается при первой загрузке страницы. Если нет, выбрано значение по умолчанию (если оно есть).

Params.filelist.jpg По умолчанию первый элемент в списке - «Не использовать -» (который является переводимым) и ему присваивается значение «-1», а за ним следует «Использовать по умолчанию» - '(также можно перевести) с учетом значения' 0 '.

  • тип (обязательный) должен быть filelist.
  • имя (обязательное) - это уникальное имя поля.
  • ярлык (обязательно) (переводимый) является описательным названием поля. directory (необязательно) - это путь файловой системы к каталогу, содержащему перечисленные файлы. Если опущен каталог, указанный JPATH_ROOT.
  • default (необязательно) - это имя файла по умолчанию.
  • описание (необязательно) (перевод) - это текст, который будет отображаться в виде подсказки, когда пользователь перемещает мышь над раскрывающимся списком.
  • фильтр (необязательно) - строка регулярных выражений , которая используется для фильтрации списка файлов , выбранного для включения в раскрывающийся список. Если опущено, все файлы в каталоге включены. Выражение аргумента фильтра: , применяемое перед выражением аргумента exclude. Для получения информации о построения регулярных выражений см. Регулярные выражения в параметрах аргументов.
  • exclude (необязательно) является строкой регулярного выражения, которая является , используемой для исключения файлов из списка. Выражение аргумента exclude применяется после выражения аргумента фильтра. Для получения информации о построения регулярных выражений см. Регулярные выражения в параметрах аргументов.
  • stripext (необязательно) является логическим аргументом. Если true, то расширения имен файлов будут удалены из перечисленных имен файлов. Также обратите внимание, что имя файла будет сохранено без расширения.
  • hide_none (необязательно) является логическим аргументом. Если true, в раскрывающемся списке отсутствует элемент «- Do not use -».
  • hide_default (необязательно) является логическим аргументом. Если true, параметр «Использовать по умолчанию» - исключен из раскрывающегося списка.

Здесь я получил список, я знаю, что я не должен просто ссылаться, поэтому я скопировал/вставил, но я поставлю исходную ссылку, если документы будут обновлены. https://docs.joomla.org/Filelist_form_field_type

Смежные вопросы