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é)

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.

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 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.