[PHP] Wyświetlanie tabeli w pętli

Witam, proszę uprzejmie o pomoc. Piszę kod, którego zadaniem jest wylistowanie katalogu i napotkałem dwa problemy:

  1. Jak dodać pliki doc tylko w kolumnie doc, a pliki pdf w kolumnie pdf?
  2. 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...';

}

Po pierwsze nie mieszaj kodu html z logiką  aplikacji.

Po drugie , może się ci przyda:

http://php.net/manual/en/class.directoryiterator.php

http://php.net/manual/en/class.splfileobject.php

http://php.net/manual/en/class.splfileinfo.php

 

 

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.

 

 

 

Generalnie chodzi  o to, że:

  1. 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

  2. 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>';

}

 

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

dziękuję. Śmiga :slight_smile: