Пользовательский компонент Joomla, добавляющий кнопку обзора - PullRequest
2 голосов
/ 21 марта 2012

Я разрабатываю компонент в J! 2.5 и хотите добавить кнопку обзора на бэкэнд, чтобы пользователь мог выбрать файл, который он ранее загрузил. Как бы я пошел по этому поводу?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

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

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 голосов
/ 18 июня 2017

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

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

Полные параметры:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...