2012-03-21 60 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