Autor Zpráva
mackopu
Profil
MYSQL dotazem
SELECT *, SUBSTRING(prijmeni,1,1) AS prvni_pismeno FROM table GROUP BY prijmeni, jmeno ORDER BY prijmeni
vybírám z databáze jedinečná jména a nechávám je zobrazit v tabulce, nad kterou mám abecední navigaci:
function BezDiakritiky($str)
{
  $str = StrTr($str, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz");
  return $str;
};

$abeceda = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
echo "<div id=\"hornimenu\">\n";
for($i = 0; $i<count($abeceda); $i++) {
  echo "<a href=\"#".$abeceda[$i]."\">".$abeceda[$i]."</a> \n";
}
echo "</div>\n";

echo "<table id=\"table_1\">\n";
echo "  <tr>\n";
echo "    <th>jméno</th>\n";
echo "  </tr>\n";
while($radek = MySQL_Fetch_Array($dotaz)) {
  $prvni_pismeno = BezDiakritiky($radek["prvni_pismeno"]);
  //if() {
    $zalozka = "<a id=\"".$prvni_pismeno."\" name=\"".$prvni_pismeno."\"></a>";
  //}
  echo "<tr>\n";
  echo "    <td>".$zalozka.$radek["prijmeni"]." ".$radek["jmeno"]."</td>\n";
  echo "  </tr>\n";
}
echo "</table>\n";
Funkce BezDiakritiky() je myslím zřejmá a uvádím ji jen pro úplnost, abych předešel nesouvisející diskuzi.

Proměnná $zalozka vytvoří u každého jména záložku (anchor), ke kterému vede relevantní odkaz z navigace. A v tom je problém. Na stránce tak vznikají duplicity záložek, které tam být nemají.
Např. u jmen Adamíra, Adamovská, Adamovský. Rovněž u Nováček, Novák, Novotný, Nový.
Potřebuji tedy vytvořit podmínku, která vytvoří záložku JEN U PRVNÍCH záznamů, tedy v tomto případě u jména Adamíra a Nováček, prostě u všech prvních jmen, která začínají jednotlivými písmeny abecedy.

Jak na to?
Tori
Profil
$prvni_pismeno = '';
while($radek = MySQL_Fetch_Array($dotaz)) {
    $zalozka = ($prvni_pismeno != $radek['prvni_pismeno'] ? '<a name="'.BezDiakritiky($radek["prvni_pismeno"]).'">' : '');
    echo '<tr> ...... </tr>';
    $prvni_pismeno = $radek['prvni_pismeno'];
}  
mackopu
Profil
Jednoduché, geniální. Děkuji moc :-)

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: