loading

Stanislav Duben

Stanislav Duben ICQ: 66800432 email: duben@seznam.cz Skype: sduben

21. červenec 2014

SQL skript na automatické vytvoření náhledového obrázků v Joomla 3.3 z obrázků v textu

joomla-migrace-sql-scriptPři migraci z Joomla 1.5 na Joomla 3.3 narazíte na příjemnou vlastnost nové Joomly, kterou notně využívají nové šablony. A to NÁHLEDOVÉ OBRÁZKY, ano ty, co už má Wordpress už několi "staletí", tedy už hodně dlouho a co se v Joomle muselo tak složitě řešit parsováním textu, nebo důsledným vkládáním obrázků do textu v přesných rozměrech může být konečně minulostí. Samozřejmě jen, když si je zadáte. Jenže při migraci dat to všechno zadávat ručně nedává smysl, takže jsem dal do kupy automatický SQL script co tu udělá za vás.

 Script je pro MySQL a funguje tak, že projdu tabulku content, najde první výskyt tagu <img> určí jeho src a to uloží do pole images ve správném tvaru a dá ho jako náhledový obrázek pro intro i pro fulltext. Tedy pro náhledy v přehledu článků u kategorie a stejně tak u zobrazení celého článku.

Pro použití jen změňte "#" za prefix vaší Joomla instance a script můžete pustit.

UPDATE `#_content` -- změnit # za správný prefix tabulky
SET images = Concat('{"image_intro":"',
REPLACE( SUBSTR( `fulltext` , LOCATE( 'src="', `fulltext` , LOCATE( '<img', `fulltext` ) ) +5, LOCATE( '"', `fulltext` , LOCATE( 'src="', `fulltext` , LOCATE( '<img', `fulltext` ) ) +5 ) - LOCATE( 'src="', `fulltext` , LOCATE( '<img', `fulltext` ) ) -5 ) , '/', '\\/' ),
'","float_intro":"none","image_intro_alt":"","image_intro_caption":""',
',"image_fulltext":"',
REPLACE( SUBSTR( `fulltext` , LOCATE( 'src="', `fulltext` , LOCATE( '<img', `fulltext` ) ) +5, LOCATE( '"', `fulltext` , LOCATE( 'src="', `fulltext` , LOCATE( '<img', `fulltext` ) ) +5 ) - LOCATE( 'src="', `fulltext` , LOCATE( '<img', `fulltext` ) ) -5 ) , '/', '\\/' ),
'","float_fulltext":"none","image_fulltext_alt":"","image_fulltext_caption":""}')
WHERE images = '' AND LOCATE( '<img', `fulltext` ) > 0

Původně jsem to chtěl udělat nějak pěkně regulérním výrazem, bohužel MySQL umí přes RegEx pouze porovnat vzorek proti text a vrátit 0 nebo 1 v případě neshody, či shody. Takže řešení je nakonec udělané přes vyhledání výskytu textu a další textové funkce. Pokud někdo znáte nějaké elegantnější řešení přes SQL tak napiště do komentářů.