phpMyAdmin (6.) - MIME transformace
Do databáze se dají ukládat různá data a phpMyAdmin nám umožňuje nadefinovat jejich zobrazení v uživatelském rozhraní.
Co zobrazovat
Protože naše současná databáze zatím obsahuje poměrně málo položek, tak jí rozšíříme ještě o screenshot programu. Bude to sloupec typu mediumblob, jeho přidání jistě již nemusím popisovat. Po nahrání obrázku do tohoto pole se nám zobrazí při procházení tabulky jen informace o velikosti pole: "[BLOB - 59.0 kB]".
Předdefinované transformace
phpMyAdmin přichází s mnoha předdefinovanými transformacemi, které pokrývají nejčastěji používané operace:
- application/octetstream: download
- Zobrazí odkaz na stáhnutí dat.
- image/jpeg: inline
- Zobrazí náhled obrázku s odkazem na obrázek
- image/jpeg: link
- Zobrazí odkaz na obrázek (například stáhnutí pole blob).
- image/png: inline
- Viz image/jpeg: inline
- text/plain: dateformat
- Zobrazí datum nebo čas (TIME, TIMESTAMP a DATETIME) podle místního nastavení.
- text/plain: external
- Spustí externí program, na jeho standardní vstup pošle obsah pole a zobrazí výstup programu. Tato transformace může přinášet bezpečnostní rizika, takže je standardně vypnutá.
- text/plain: formatted
- Zachová původní formátování sloupce, tak jak je uložen v databázi.
- text/plain: imagelink
- Zobrazí obrázek a odkaz z pole obsahujícího odkaz na obrázek.
- text/plain: link
- Zobrazí odkaz z pole obsahující odkaz.
- text/plain: substr
- Zobrazí jen část textu.
Pro naší databázi se nám hodí transformace image/jpeg:
inline
pro zobrazení obrázku a text/plain: link
pro zobrazení odkazů. Nastavíme proto tyto transformace (na obrázku
jsou jen vybrané sloupce):
Nyní již při procházení databáze vidíme odkaz a náhled obrázku:
Vlastní transformace
Kromě předdefinovaných transformací můžeme vytvořit i svoje vlastní. Například se rozhodneme, že do popis programu může obsahovat formátovací značky BBCode (obsahuje základní formátováná, používá se například v phpBB.
Transformaci pojmenujeme bbcode, a protože bude zpracovávat text, tak MIME typ bude text/plain. V adresáři libraries/transformations tedy vytvoříme soubor text_plain__bbcode.inc.php, který musí obsahovat funkci PMA_transformation_text_plain__bbcode, která bude zavolána pro každou položku s prvním parametrem obsahujícím hodnotu pole v databázi, další dva parametry nebudeme pro naší transformaci potřebovat, ale obsahují případné parametry transformace a meta informace o sloupci tabulky.
Po chvíli hledání na internetu nalezneme funkci pro zpracování BBCode:
$GLOBALS['bb_patterns'] = array( '`\[b\](.+?)\[/b\]`is', '`\[i\](.+?)\[/i\]`is', '`\[u\](.+?)\[/u\]`is', '`\[strike\](.+?)\[/strike\]`is', '`\[color=#([0-9a-fA-F]{6})\](.+?)\[/color\]`is', '`\[email\](.+?)\[/email\]`is', '`\[img\](.+?)\[/img\]`is', '`\[url=([a-z0-9]+://)([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?' . '(/[^ \"\n\r\t<]*?)?)\](.*?)\[/url\]`si', '`\[url\]([a-z0-9]+?://){1}([\w\-]+\.([\w\-]+\.)*[\w]+' . '(:[0-9]+)?(/[^ \"\n\r\t<]*)?)\[/url\]`si', '`\[url\]((www|ftp)\.([\w\-]+\.)*[\w]+(:[0-9]+)?' . '(/[^ \"\n\r\t<]*?)?)\[/url\]`si', '`\[flash=([0-9]+),([0-9]+)\](.+?)\[/flash\]`is', '`\[quote\](.+?)\[/quote\]`is', '`\[indent](.+?)\[/indent\]`is', '`\[size=([1-6]+)\](.+?)\[/size\]`is' ); $GLOBALS['bb_replaces'] = array( '<span style="font-weight: bold">\1</span>', '<span style="font-style: italic">\1</span>', '<span style="border-bottom: 1px dotted">\1</span>', '<strike>\1</strike>', '<span style="color:#\1;">\2</span>', '<a href="mailto:\1">\1</a>', '<img src="\1" alt="" style="border:0px;" />', '<a href="\1\2">\6</a>', '<a href="\1\2">\1\2</a>', '<a href="http://\1">\1</a>', '<object width="\1" height="\2"><param name="movie" value="\3" />' . '<embed src="\3" width="\1" height="\2"></embed></object>', '<strong>Quote:</strong><div style="margin:0px 10px;padding:5px;' . 'background-color:#F7F7F7;border:1px dotted #CCCCCC;' . 'width:80%;"><em>\1</em></div>', '<pre>\\1</pre>', '<h\1>\2</h\1>' ); function bbcode( $string){ global $bb_patterns, $bb_replaces; return preg_replace($bb_patterns, $bb_replaces , nl2br(htmlspecialchars($string))); }
A nyní již zbývá jen napsat transformační funkci, ta bude v tomto jednoduchém případě spočívat jen v zavolání jiné funkce:
function PMA_transformation_text_plain__bbcode( $buffer, $options = array(), $meta = '') { return bbcode($buffer); }
Hotovou transformaci si můžete stáhnout zde. Teď již jen zbývá nastavit používání této transformace na sloupec s popisem a můžeme využít formátovací možnosti BBCode:
[color=#999999]Nějaký[/color] [strike]text[/strike] [flash=100,100]http://kecy.roumen.cz/archive/vajicko.swf[/flash] [i]Italic[/i] [email]michal@cihar.com[/email] [url=http://www.linuxsoft.cz] [img]http://www.linuxsoft.cz/img/ls.gif[/img][/url] [url]http://www.linuxsoft.cz[/url] [url=http://www.linuxsoft.cz]Linuxsoft[/url] [quote]Quote![/quote]
Podobným způsobem můžeme vytvořit libovolnou transformaci zpracovávající data při zobrazování. V některé s následujících verzí phpMyAdmina se možná dočkáte i podobné transformace pro editaci dat, ale to je ještě hudba vzdálené budoucnosti :-).
Tak to je vše o transformacích a v dalším díle si nastavíme phpMyAdmina tak, aby vypadal jak chceme.