2012-03-21 59 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 2012-03-21 23:06:44

+0

试图生成缩略图,但该死的Joomla!的结构正在使它很难做... – BeaverusIV 2012-03-22 03:52:29

0

我想你可以使用内置的Joomla!表单字段文件清单:

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

充分的选择是:

文件列表表单字段类型提供一个下拉从指定目录中的文件列表。如果该字段具有保存的值,则在首次加载页面时选择该字段。如果不是,则选择默认值(如果有的话)。

Params.filelist.jpg 默认情况下,列表中的第一项是' - 不要使用 - '(可翻译的)并且给定值'-1',然后是' - 使用默认值 - '(也可翻译)给定值'0'。

  • 类型(必选)必须是filelist。
  • 名称(必填)是该字段的唯一名称。
  • 标签(必选)(可翻译)是 描述性字段的标题。目录(可选)是包含要列出文件的目录的 文件系统路径。 如果省略,则假定JPATH_ROOT给出的目录。
  • 默认(可选)是默认文件名。
  • 说明(可选) (可翻译)是当用户将鼠标移到下拉框上时将显示为工具提示的文本。
  • 过滤器(可选)是一个 正则表达式字符串,用于过滤选中包含在下拉列表中的文件列表 。如果省略,则包括目录中的所有文件 。在排除参数表达式之前应用的过滤器参数表达式为 。有关构建正则表达式的 的信息,请参阅参数 参数中的正则表达式。
  • exclude(可选)是一个正则表达式字符串,它是用于从列表中排除文件的 。在过滤器参数表达式之后应用排除参数表达式 。有关构建正则表达式的 的信息,请参阅参数 参数中的正则表达式。
  • stripext(可选)是一个布尔参数。如果为true,则将从列出的文件名中去除 文件扩展名。 另请注意,文件名将被保存,但不包含扩展名。
  • hide_none(可选)是一个布尔参数。如果为true,则从下拉列表中省略' - 不要 使用 - '项目。
  • hide_default (可选)是一个布尔参数。如果为true,则从下拉列表中省略' - Use default - '项目 。

这里是我得到清单的地方,我知道我不应该只是链接,所以我复制/粘贴,但我会提供原始链接,以防文档更新。 https://docs.joomla.org/Filelist_form_field_type