Do databáze se dají ukládat různá data a phpMyAdmin nám umožňuje nadefinovat
jejich zobrazení v uživatelském rozhraní.
26.1.2005 07:00 | Michal Čihař | read 16274×
DISCUSSION
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.