felixik
(felixik)
#1
Witam, proszę uprzejmie o pomoc. Piszę kod, którego zadaniem jest wylistowanie katalogu i napotkałem dwa problemy:
- Jak dodać pliki doc tylko w kolumnie doc, a pliki pdf w kolumnie pdf?
- Jak w kolumnie nazwa pliku umieścić tylko 1 nazwę pliku, która będzie w tym samym wierszu co plik doc i pdf?
Z góry dziękuję za pomoc.
Poniżej mój kod
if ( $handle = opendir ( $dir ) )
{
while ( false !== ( $file = readdir ( $handle ) ) )
{
if ( ( $file != '.' ) && ( $file != '..' ) )
{
$files[] = $file;
}
}
closedir ( $handle );
}
if ( !empty ( $files ) )
{
sort ( $files );
echo '
<table align="center" border="1" width="100" cellpadding="0" cellspacing="0">
<tr>
<td>Nazwa pliku</td>
<td>Plik MS Word</td>
<td>Plik pdf</td>
</tr>';
for($i = 0, $c = count($files); $i < $c; $i++) {
$names[] = pathinfo($files[$i], PATHINFO_FILENAME);
echo '<tr>
<td>'.$names[$i].'</td>
<td>'.$files[$i].'</td>
<td>'.$files[$i].'</td>';
echo'</tr>';
}
echo '</table>';
}
else
{
echo 'Brak plików...';
}
lukasssz
(lukasssz)
#2
Nie wiem czy dobrze zrozumiałem problem. Tutaj przykład przelatywania przez tablicę i jak wykryje pliki doc to stawia plusik w odpowiedniej kolumnie.
<?php
$pliki = array ('a.pdf','aaaa.doc', 'aaaaaasw.docX','ssss.txt');
echo '<table align="center" border="1" width="100" cellpadding="0" cellspacing="0"><tr><td>Nazwa pliku</td><td>Plik MS Word</td><td>Plik pdf</td></tr>';
foreach ($pliki as $p){
$pdf= '-';
$doc= '-';
$names = pathinfo($p);
if (strcasecmp($names['extension'], 'pdf') == 0) $pdf='+' ;
if (strcasecmp($names['extension'], 'doc') == 0) $doc='+' ;
if (strcasecmp($names['extension'], 'docx') == 0) $doc='+' ;
echo "<tr><td>$p</td><td>$doc</td><td>$pdf</td></tr>";
} ;
echo '</table>' ;
?>
Oczywiście zamiast plusika możesz wstawić cokolwiek. np $names[‘dirname’] lub $names[‘basename’] . Jakby coś było nie tak jak chcesz to pisz.
felixik
(felixik)
#4
Generalnie chodzi o to, że:
-
w kolumnie nazwa pliku powinny być unikalne nazwy plików wylistowane z folderu (są 2 pliki a, a.doc i a.pdf), ale do kolumny trafia tylko jedno a
-
pliki doc i pdf to linki do poszczególnych plików
Udało mi się zrobić częściowo pkt 1, ale niestety wyświetla tylko 1 rekord albo nic.
echo '
<table align="center" border="1" width="100" cellpadding="0" cellspacing="0">
<tr>
<td>Nazwa pliku</td>
<td>Plik MS Word</td>
<td>Plik pdf</td>
</tr>';
foreach($files as $file){
$fileData = pathinfo($file);
$czysc = array_unique($files);
$pdf= '-';
$doc= '-';
echo '<tr>';
echo
'<td>'.$czysc[0].'</td>';
echo"<td>$doc</td>
<td>$pdf</td>
</tr>";
}
echo '</table>';
}
lukasssz
(lukasssz)
#5
plik file.php - logika
<?php
$pathDir = __DIR__.'/file/';
$result = array();
if (is_dir($pathDir)) {
foreach (new DirectoryIterator($pathDir) as $key => $fileInfo) {
if($fileInfo->isDot()) continue;
if($fileInfo->isFile()){
$nameNoExt = substr($fileInfo->getFilename(),0,-((strlen($fileInfo->getExtension()))+1));
$result[$nameNoExt][$fileInfo->getExtension()] = true;
$result[$nameNoExt]['fullPath'] = '/file/'.$nameNoExt;
}
}
} else {
echo ' nie poprawny katalog';
}
include_once './file_view.php';
plik file_view.php - widok,szablon
<table align="center" border="1" width="100" cellpadding="0" cellspacing="0">
<tr>
<td>Nazwa pliku</td>
<td>Plik MS Word</td>
<td>Plik pdf</td>
</tr>
<?php
foreach ($result as $fileName => $Exts) {
?>
<tr>
<td><?php echo $fileName; ?></td>
<td>
<a href="<?php echo (!empty($Exts['doc']) || !empty($Exts['docx'])) ? $Exts['fullPath'] . '.doc' : "" ?>">
<?php echo (!empty($Exts['doc']) || !empty($Exts['docx'])) ? $fileName : " - "; ?>
</a>
</td>
<td>
<a href="<?php echo empty($Exts['pdf']) ? '' : $Exts['fullPath'] . '.pdf' ?>">
<?php echo empty($Exts['pdf']) ? " - " : $fileName; ?>
</a>
</td>
</tr>
<?php
}
?>
</table>
Dopasuj sobie do własnych celów