Změny po vydání článků

Školení, která pořádám

Čas od času mě nějaký pozorný čtenář upozorní na možné doplnění nebo chybu v článku, někdy mě s odstupem času něco napadne samotného. Pokud to dává smysl a nestačí to na vydání nového článku, tak změny do článků doplňuji. A protože to dělám poctivě pomocí značek ins a del, tak není problém seznam změn v článcích vypsat:

<?php
$zmeny = array();
$result = mysql_query("SELECT * FROM clanky WHERE zprava REGEXP '<(ins|del)' ORDER BY id");
while ($row = mysql_fetch_assoc($result)) {
    preg_match_all('~<(ins|del)[^>]* datetime="(([0-9]{4})-0?([0-9]+)-0?([0-9]+)).*?</(ins|del)>~', $row["zprava"], $matches, PREG_SET_ORDER);
    foreach ($matches as $val) {
        $zmeny[$val[2]] .= "<dt>$val[5].$val[4].$val[3] <a href='$row[url].php'>" . htmlspecialchars($row["nadpis"]) . "</a></dt><dd>$val[0]</dd>\n";
    }
}
mysql_free_result($result);
ksort($zmeny); // seřazení podle data změny
echo "<dl>\n" . implode("", $zmeny) . "</dl>\n";
?>

Ehm, možná by v tomto případě možná bylo lepší poskytnout přímo výstup tohoto skriptu.

Jakub Vrána, Ze zákulisí, 4.11.2005, diskuse: 4 (nové: 0)

Diskuse

endlife:

Ten ukázkový výstup je cachovaný nebo je výběr z db pomocí regexpu tak rychlý? (není tu velká databáze, ale stejně jsem vždycky myslel, že to musí být hrozně pomalé)

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL: Reakce na: endlife

ikona Jakub Vrána OpenID:

Je to rychlé dost. Článků je pár set kilo, to se projde hned. U většího objemu dat nebo při větší návštěvnosti by samozřejmě bylo vhodné si do indexovaného sloupce ukládat, jestli byl daný článek změněn, nebo rovnou změny ukládat i bokem.

Mimochodem i vyhledávání zde je dělané přes obyčejný LIKE, na což upozorňuje titulek vyhledávacího políčka.

ia:

Trošku OT, ale pri vyhľadávaní by sa možno zišlo ošetriť, či hľadaný reťazec nie je prázdny...

ikona Jakub Vrána OpenID:

Proč? Nechci lidem bránit najít všechno.
avatar © 2005-2022 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.