Autor Zpráva
bajola
Profil
Mám pouze minimální základy PHP a potřebovala bych poradit se správným zapisem PHP.

Potřebuji vypisovat na stránce soubory, které v backendu vkládám do vytvořených uživatelských polí. Udělala jsem si uživatelská pole pro název souboru a pro cestu k souboru. Souborů může být libovolný počet. Už 2 dny zkoumám, jak správně vypsat pole, aby se z nich tvořil odkaz v neuspořádaném seznamu.

Výsledek má vypadat takto:

<ul>            
    <li><a href="cesta-k-souboru1">Název souboru 1</a></li>
    <li><a href="cesta-k-souboru2">Název souboru 2</a></li>
    <li><a href="cesta-k-souboru3">Název souboru 3</a></li>
</ul>

Ale vypisuje se to takto:

<ul>                                
<li><a href="cesta-k-souboru1"></a></li>
<li><a href="cesta-k-souboru2"></a></li>
<li><a href="cesta-k-souboru3">Název souboru 1</a></li>
Název souboru2Název souboru3                            
</ul>

Můj PHP zápis je takový:

<?php     
$prilohy = get_post_meta($post->ID, "wpcf-priloha");    // toto vypisuje array - URL souboru                
$nazvypriloh = get_post_meta($post->ID, "wpcf-nazev-prilohy");     // toto vypisuje array - názvy souboru
?>

<ul>                            
<?php                            
$vypis='';
foreach ($prilohy as $priloha => $hodnota) {
  $vypis.= '<li><a href="' . $hodnota . '">';
}
                                    
foreach ($nazvypriloh as $nazevprilohy => $hodnota) {
  $vypis.= $hodnota . '</a></li>';
}
 echo $vypis;
                                    
?>                                
</ul>

Může mi někdo poradit, jak má být ten zápis správně? Předem děkuji.
Chro
Profil
Přílohy a názvy příloh sluč do jednoho pole jako klíč a hodnotu, pak vypiš.
<ul>
<?php
$prilohy = array('a_1.jpg', 'b-2.jpg');
$nazvypriloh = array('nazev 1', 'nazev 2');
$slouceni = array_combine($prilohy, $nazvypriloh);
$zaznamy = '';
foreach ($slouceni as $priloha => $nazevprilohy)
{
$zaznamy.= '<li><a href="'.$priloha.'">'.$nazevprilohy."</a></li>\n";
}
echo $zaznamy;
?>
</ul>
bajola
Profil
Diky moc, funguje to, konecne se dnes vyspim :-)


Mohl bys mi akorát ještě poradit, jak seřadit ty pole, např. dle data vložení?
Alphard
Profil
Datum uložení (změny) zjistíte pomocí filemtime(), ukládal bych to s dalšími údaji do vícerozměrného pole a pak řadil. To znamená pole, které máte, projít cyklem, zjistit data změny, vytvořit nové pole, seřadit ho, vypsat.
Chro
Profil
bajola:
Skript dle doporučeného postupu od Alpharda se základním ošetřením možných chyb.
<?php
$prilohy = array(); //vstup pole
$nazvypriloh = array(); //vstup pole
$chyba = FALSE;
if (is_array($prilohy) && is_array($nazvypriloh))
//kontrola, zda jsou vstupy pole
{
$prilohypocet = count($prilohy);
$nazvyprilohpocet = count($nazvypriloh);
if (($prilohypocet === $nazvyprilohpocet)
&& (($prilohypocet + $nazvyprilohpocet) > 0))
//kontrola, zda jsou počty položek v polích rovny a nenulové
{
$slouceni = array_combine($prilohy, $nazvypriloh);
$novepole = array();
foreach ($slouceni as $priloha => $nazevprilohy)
{
if (file_exists($priloha))
//kontrola, zda soubor existuje
{
$datum = filemtime($priloha);
}
else
{
continue;
}
$novepole[$datum] = array($priloha, $nazevprilohy);
}
}
else
{
$chyba = TRUE;
}
}
else
{
$chyba = TRUE;
}

if (!$chyba && count($novepole) > 0)
//kontrola, zda nenastala chyba a je co vypisovat
{
//ok, výpis položek
ksort($novepole);
//nebo krsort($novepole), třídit od nejstarších po nejnovější
$zaznamy = '';
foreach ($novepole as $polozky)
{
$zaznamy.= <<<EOT
<li><a href="{$polozky[0]}">{$polozky[1]}</a></li>
EOT;
}
echo <<<EOT
<ul>
{$zaznamy}
</ul>
EOT;
}
else
{
//chyba, hlášení
echo <<<EOT
<div class="chyba">
Litujeme, tato část stránky není momentálně dostupná.
</div>
EOT;
}
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0