Joomla自定义组件添加浏览按钮

时间:2012-03-21 01:43:23

标签: joomla

我正在用J开发一个组件! 2.5并希望在后端添加浏览按钮,以便用户可以选择他们之前上传的文件。我该怎么做呢?

2 个答案:

答案 0 :(得分: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我们选择我们想要的文件并在关闭对话框中输出路径。

答案 1 :(得分:0)

我认为你可以使用内置的Joomla!此

的表单字段文件列表

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

完整选项包括:

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

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

  • 类型(必填)必须是文件列表。
  • name(必填)是该字段的唯一名称。
  • 标签(强制性)(可翻译)是 该领域的描述性标题。目录(可选)是 包含要列出的文件的目录的文件系统路径。 如果省略,则假定JPATH_ROOT给出的目录。
  • default(可选)是默认文件名。
  • 描述(可选) (可翻译的)是在用户时将显示为工具提示的文本 将鼠标移到下拉框上。
  • 过滤器(可选)是一个 正则表达式字符串,用于过滤文件列表 选择包含在下拉列表中。如果省略,则为所有文件 在目录中包括在内。过滤器参数表达式是 在排除参数表达式之前应用。有关的信息 构造正则表达式参见参数中的正则表达式 参数。
  • exclude(可选)是一个正则表达式字符串 用于从列表中排除文件。排除参数表达式 在filter参数表达式后应用。有关的信息 构造正则表达式参见参数中的正则表达式 参数。
  • stripext(可选)是一个布尔参数。如果是真的话 文件扩展名将从列出的文件名中删除。 另请注意,文件名也将在没有扩展名的情况下保存。
  • hide_none(可选)是一个布尔参数。如果是真的,那就是 - 不要 使用 - &#39;项目从下拉列表中省略。
  • hide_default (可选)是一个布尔参数。如果为true,则表示使用默认值 - &#39;项目 从下拉列表中省略。

我在这里获得了列表,我知道我不应该只是链接所以我复制/粘贴但是我会提供原始链接,以防文档获得更新。 https://docs.joomla.org/Filelist_form_field_type