专家们好!
我目前正在增强我的treeview项目,但我只显示某些文件类型。我想在我的树视图中只显示mp4类型的文件。代码如下:
(归功于Treeview的原始代码)
class TreeView
{
private $root;
public function __construct($path)
{
$this->root = $path;
}
public function getTree()
{
return $this->createStructure($this->root, true);
}
private function createStructure($directory, $root)
{
$structure = $root ? '<ul class="treeview">' : '<ul>';
$nodes = $this->getNodes($directory);
foreach ($nodes as $node) {
$path = $directory.'/'.$node;
if (is_dir($path) ) {
$structure .= '<li class="treeview-folder"><p>';
$structure .= '<details class="details-example"><summary><font size="5px">'.$node.'</font></summary>';
$structure .= self::createStructure($path, false);
$structure .= '</p></li>';
} else {
$path = str_replace($this->root.'/', null, $path);
$structure .= '<p><li class="treeview-file">';
$structure .= '<a href="movies/./'.$path.'"><font size="5px">'.$node.'</font></a>';
$structure .= '</li></p>';
}
}
return $structure.'</ul>';
}
private function getNodes($directory = null)
{
$folders = [];
$files = [];
$nodes = scandir($directory);
foreach ($nodes as $node) {
if (!$this->exclude($node)) {
if (is_dir($directory.'/'.$node)) {
$folders[] = $node;
} else {
$files[] = $node;
}
}
}
return array_merge($folders, $files);
}
private function exclude($filename)
{
return in_array($filename, ['.', '..', 'index.php', '.htaccess', '.DS_Store']);
}
}
$treeView = new TreeView('movies/');
echo $treeView->getTree();
您可以提供允许的文件扩展名的"whitelist"
(在本实例中只有一个)作为上述类的第二个参数,并将任何发现的文件的扩展名与该白名单进行比较,从而控制返回哪些文件。
class TreeView {
private $root;
private $whitelist;
public function __construct($path, $whitelist=array() ){
$this->root = $path;
$this->whitelist=$whitelist;
}
public function getTree(){
return $this->createStructure($this->root, true);
}
private function createStructure($directory, $root){
$structure = $root ? '<ul class="treeview">' : '<ul>';
$nodes = $this->getNodes($directory);
foreach ($nodes as $node) {
$path = $directory.'/'.$node;
if (is_dir($path) ) {
$structure .= '<li class="treeview-folder"><p>';
$structure .= '<details class="details-example"><summary><font size="5px">'.$node.'</font></summary>';
$structure .= self::createStructure($path, false);
$structure .= '</p></li>';
} else {
$path = str_replace($this->root.'/', null, $path);
$structure .= '<li class="treeview-file"><p>';
$structure .= '<a href="movies/./'.$path.'"><font size="5px">'.$node.'</font></a>';
$structure .= '</p></li>';
}
}
return $structure.'</ul>';
}
private function getNodes($directory = null){
$folders = [];
$files = [];
$nodes = scandir($directory);
foreach ($nodes as $node) {
if (!$this->exclude($node)) {
if (is_dir($directory.'/'.$node)) {
$folders[] = $node;
} else {
# check the whitelist for the file extension
if( !empty( $this->whitelist ) ){
$ext=strtolower( pathinfo( $node, PATHINFO_EXTENSION ) );
if( in_array( $ext, $this->whitelist ) ) $files[] = $node;
}else{
$files[] = $node;
}
}
}
}
return array_merge($folders, $files);
}
private function exclude($filename){
return in_array($filename, ['.', '..', 'index.php', '.htaccess', '.DS_Store']);
}
}
$whitelist=array('mp4');
$treeView = new TreeView('movies/',$whitelist);
echo $treeView->getTree();