PDA

View Full Version : سوال: لیست کردن پوشه به صورت درختی توسط PHP



tem988
پنج شنبه 21 شهریور 1392, 23:02 عصر
سلام دوستان
کدی نوشتم که پوشه ها رو به صورت درختی لیست میکنه ولی یک مشکل اساسی داره.

function ListFolder_3($path)
{
$dir_handle = @opendir($path) or die("Unable to open $path");
while (false !== ($file = readdir($dir_handle)))
{

if($file!="." && $file!="..")
{
if (is_dir($path."/".$file))
{

$full_path = $path."/".$file;
echo '<li><span class="folder"><a href="?dir='.$full_path.'/"> '.$file.'</a></span>';
echo "<ul>\n";
ListFolder_3($path."/".$file);
echo "</ul></li>\n";
}
}
}
closedir($dir_handle);
}
echo '<ul id="browser" class="filetree">'."\n";
echo '<li class="closed"><span class="folder"><a href="?dir=/">Home</a></span>';
echo '<ul>';
echo ListFolder_3("./");
echo '</ul>';
echo '</ul>';


وقتی با این فولدرها رو لیست میکنم فولدرهایی که داخلشون فولدر نداره باید اخرشو li بسته (پایان) بزاره که با هر روشی تست کردم نشده.
و اگر li بسته نشه وقتی بهشون استایل میدی کنارش علامت مثبت میزنه و توی جاوا اسکریپت مشخص شده li هایی که بسته نشده پشتش علامت مثبت و اونایی که بسته میشه منفی باشه.


کدی که اجرا میشه


<ul id="browser" class="filetree">
<li class="closed"><span class="folder"><a href="?dir=/">Home</a></span>
<ul>
<li><span class="folder"><a href="?dir=./tree/"> tree</a></span>
<ul>
<li><span class="folder"><a href="?dir=./tree/images/"> images</a></span>
<ul>
</ul>
</li>
</ul>
</li>
</ul>
</ul>


باید بعد از فولدر images در کد بالا li بسته بزاره چون فولدر زیر مجوعه نداره

لطفا اگر کسی بلده راهنمایی کنه.

shahriyar3
پنج شنبه 21 شهریور 1392, 23:52 عصر
ایول خیلی حال کردم با کدی که نوشتی :چشمک: کلی ایده اومد تو ذهنم


function is_dir_empty($dir) {
if (!is_readable($dir))
return NULL;
return (count(scandir($dir)) == 2);
}

if (is_dir_empty($dir)) {
echo '</li>';
}else{
echo '<ul> .... </ul>';
}

tem988
جمعه 22 شهریور 1392, 00:35 صبح
ممنون.
کدی که دادید مشکل رو تا حدی درست کرد ولی تابعی هست که فقط پوشه رو چک کنه چون این تابعی که شما دادید فایل و پوشه رو چک میکنه که هست یا نه.
کدی میخوام که فقط پوشه رو چک کنه
چون فقط میخوام لیست پوشه ها باشه.
مثل cpanel

shahriyar3
جمعه 22 شهریور 1392, 00:57 صبح
cpanel که کلا هر چی باشه میاره . اون file managere این که شما میخوای با اون فرق داره.
به هر حال
کار تابع scandir همینه دیگه . خروجیش لیستی از اسم فایل ها و فولدر ها رو میریزه تو آرایه میده به شما باید چک کنی ببینی کدومش پسوند نداره
یه آرایه جدید درست میکنی از اونائی که پسوند ندارن , بعد شرط میزاری اگر count اون آرایه جدید بزرگتر از 0 بود که ul چاپ کنه و گرنه li و ببنده

tem988
جمعه 22 شهریور 1392, 01:02 صبح
درسته باید پسوند ها رو چک کنیم.
ممنون حل شد.
البته با is_dir هم میشه بفهمی فولدره یا فایل

Unique
جمعه 22 شهریور 1392, 02:32 صبح
البته یک فایل میتونه هیچ پسوندی هم نداشته باشه !