ExtJS: Простой просмотрщик файлов
ExtJS содержит много крупных компонентов, которые могут помочь построить мощное веб-приложение, похожее на настольное приложение. В этом уроке, я хочу показать, как создать очень простой просмотрщик файлов на ExtJS и PHP.
С самого начала, я бы хотел сказать о некоторых ограничениях. Первый раз я запустил этот скрипт на XAMPP на моём локальном хосте. Скрипту требуется некоторое количество времени, чтобы просканировать директории и воссоздать соответствующую структуру. В навигаторе появятся папки и файлы, которые присутствуют у вас на локальном хосте.
ExtJS
Контейнер представляет собой окно, разделённое на две части - treePanel и gridPanel, gridPanel загружает информацию динамически, trigerred - только при клике на какую-то папку из предыдущего окна.
Ext.onReady(function() { store_dir = Ext.create('Ext.data.TreeStore', { proxy: { type: 'ajax', url: 'get_dir.php' } }); tree_dir = Ext.create('Ext.tree.Panel', { title: 'Localhost Directory', rootVisible: false, store: store_dir, split: true, region: 'west', collapsible: true, floatable: false, width: 200, useArrows: true, listeners: { itemclick: { fn: function(view, record, item, index, event) { store_file.load({ url: 'get_file.php?dir=' + record.data.id }); nodeId = record.data.id; htmlId = item.id; } } } }); Ext.define('File', { extend: 'Ext.data.Model', fields: ['filename', 'filesize', 'filedate'] }); store_file = Ext.create('Ext.data.Store', { model: 'File', proxy: { type: 'ajax', url: 'get_file.php', reader: { type: 'json', root: 'files' } } }); grid_file = Ext.create('Ext.grid.Panel', { title: 'File List', region: 'center', store: store_file, columns: [ { header: 'Name', width: 170, dataIndex: 'filename' }, { header: 'Size', width: 100, dataIndex: 'filesize' }, { header: 'Last Modified', width: 200, dataIndex: 'filedate' } ], viewConfig: { stripeRows: true } }); win = Ext.create('widget.window', { title: 'ExtJS Simple File Browser', width: 700, height: 400, layout: 'border', bodyStyle: 'padding: 5px;', items: [tree_dir, grid_file] }); win.show(); });
PHP (get_dir.php)
Этот файл служит для того, чтобы просканировать папку htdocs (если у вас XAMPP) , используя $ _SERVER переменную ['DOCUMENT_ROOT']. Если у вас в htdocs много папок, то процесс может затянуться. В этом php файле я использовал рекурсивную функцию, чтобы получить все каталоги и подкаталоги. Результат оформляю как json и отправляю основному файлу.
<?php class MyDirectory { public $json = '['; public function get_children($dir, $child) { $dh = opendir($dir); while (($file = readdir($dh)) !== false) { if ($file != '.' AND $file != '..' ) { if (filetype($dir . $file) == 'dir') { // must be checked if this folder have other subfolder if ($this->count_sub_dir($dir . $file . '/') == 0) { $this->json .= '{text:"'.$file.'", leaf: true, id: "'.$dir . $file.'"},'; } else { $this->json .= '{text:"'.$file.'", id: "'.$dir . $file.'", children: ['; $this->get_children($dir . $file . '/', true); } } } } if ($child) { $this->json .= ']},'; } closedir($dh); } public function count_sub_dir($dir) { $dh = opendir($dir); $countdir = 0; while (($file = readdir($dh)) !== false) { if ($file != '.' AND $file != '..' ) { if (filetype($dir . $file) == 'dir') { $countdir++; } } } closedir($dh); return $countdir; } } $host_dir = $_SERVER['DOCUMENT_ROOT']."/"; $dir = new MyDirectory(); $dir->get_children($host_dir, false); $dir->json .= ']'; $dir->json = str_replace(",]", "]", $dir->json); echo($dir->json); ?>
PHP (get_file.php)
В этом файле происходит сбор данных о файлах.
<?php $dir = $_GET['dir'] . "/"; $dh = opendir($dir); $files = array(); while (($file = readdir($dh)) !== false) { if ($file != '.' AND $file != '..' ) { if (filetype($dir . $file) == 'file') { $files[] = array( 'filename' => $file, 'filesize' => filesize($dir . $file). ' bytes', 'filedate' => date("F d Y H:i:s", filemtime($dir . $file)) ); } } } closedir($dh); echo(json_encode(array('files' => $files))); ?>
Я думаю, что этот урок может вам пригодиться, тем более полигон для работ довольно-таки крупный: к примеру, вы можете расширить функциональность скрипта и добавить возможность создания, редактирования, удаления файлов, и т.д.
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/GnJUyppIwT0/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
- 2024-07-26 » Интеграция с Эквайринг
- 2024-07-26 » Интеграция с СДЕК
- 2024-07-26 » Интеграция с Битрикс-24
- 2024-07-26 » Интеграция с Travelline
- 2024-07-26 » Интеграция с Iiko
- 2024-07-26 » Интеграция с Delivery Club
- 2024-07-26 » Интеграция с CRM
- 2024-07-26 » Интеграция с 1C-Бухгалтерия
- 2024-07-24 » Что такое сторителлинг: техники и примеры
- 2024-07-17 » Ошибка 404: что это такое и как ее использовать для бизнеса
- 2024-07-03 » Размещайте прайс-листы на FarPost.ru и продавайте товары быстро и выгодно
- 2024-07-01 » Профилирование кода в PHP
- 2024-06-28 » Изучаем ABC/XYZ-анализ: что это такое и какие решения с помощью него принимают
- 2024-06-17 » Зачем вам знать потребности клиента
- 2024-06-11 » Что нового в работе Яндекс Метрики: полный обзор обновления
- 2024-06-11 » Поведенческие факторы ранжирования в Яндексе
- 2024-06-11 » Скорость загрузки сайта: почему это важно и как влияет на ранжирование
- 2024-05-27 » Подборка сервисов для расшифровки аудио в текст
- 2024-05-27 » PostgreSQL 16. Изоляция транзакций. Часть 2
- 2024-05-06 » Как настраивать конверсионные стратегии: работа над ошибками
- 2024-04-22 » Комментирование кода и генерация документации в PHP
- 2024-04-22 » SEO в России и на Западе: в чем основные отличия
- 2024-04-22 » SEO для международного масштабирования
- 2024-04-22 » Как использовать XML-карты для продвижения сайта
Мудрость приносит следующие три плода: дар хорошо мыслить, хорошо говорить и хорошо поступать Демокрит - (около 460 до н.э.- около 360 до н.э.) - древнегреческий философ |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.