Ponuka
× Domov Xoops Novinky Fórum Na stiahnutie
Užívateľ
Registrácia Prihlásenie
Vyhľadávanie
Ako postupovať pri aktualizácií tabuliek podľa nového pomenovania v schéme XOOPS?
Návod
XOOPS | 7.3.2013 | 2316   
Ako už možno tušíte, je vyvíjaná snaha štandardizovať vývoj modulov - používať v moduloch rovnakú štruktúru správcu GUI s rovnakými ikonami vo všetkých moduloch, s použitím rovnakej štruktúry stránkovania pre každú tabuľku, s jednotným spôsobom pomenovania tabuliek a polí.
Tento návod vám ukáže, ako upraviť svoj ​​modul premenovaním tabuliek na vašich stránkach, keď zaktualizujete modul.

Nová schéma pomenovania tabuľky je:

mod_AAA_BBBB

kde AAA je názov modulu, a BBB je názov tabuľky.

Napríklad, keď je v module "News" tabuľka s názvom "topics", v novej aktualizovanej verzii News to bude vyzerať takto:

mod_news_topics

Nasleduje niekoľko krokov, ako použiť modul "Pedigree" a jeho tabuľku "animal" :

1) Nová verzia by mala mať v súbore SQL správne nadefinovanú tabuľku, takže nová inštalácia (nie aktualizovaná) má tabuľky nainštalované správne hneď

2) V existujúcej inštalácií prekopírujeme súbory (výmenou starých súborov za nové) a potom spustime "aktualizáciu" v administrácii. Preto budeme musieť pridať súbor s aktualizáciou. Nazvime ho "update_function.php" a umiestnime ho do priečinka /include

3) Aby XOOPS zavolal tento súbor, pridáme do súboru xoops_version.php nasledujúce:

$modversion['onUpdate'] = 'include/update_function.php';


4) V tomto súbore začneme tým, že pridaním funkcie skontrolujeme, či tabuľky, ktoré chceme premenovať, skutočne existujú. Toto sa vykoná pomocou funkcie vytvorenej Hervetom:

function tableExists($tablename)
{
    global 
$xoopsDB;
    
$result=$xoopsDB->queryF("SHOW TABLES LIKE '$tablename'");
    return(
$xoopsDB->getRowsNum($result) > 0);
}


5) Potom pridáme nasledujúce funkciu, ktorá sa spustí, keď klikneme na tlačidlo Update:

function xoops_module_update_animal()
{
    global 
$xoopsDB;

    if (
tableExists($xoopsDB->prefix('eigenaar'))) {
        
$sql    sprintf(
            
'ALTER TABLE ' $xoopsDB->prefix('eigenaar') . ' RENAME ' $xoopsDB->prefix('mod_pedigree_owner')
        );
        
$result $xoopsDB->queryF($sql);
        if (!
$result) {
            echo 
'<br />' _AM_PED_UPGRADEFAILED ' ' _AM_PED_UPGRADEFAILED2;
            
$errors++;
        }
    }
    return 
TRUE;
}


Vo vyššie vypísanom kóde sme overili, či existuje tabuľka "eigenaar", a ak áno, následne sme ju premenovali na "mod_pedigree_owner". Samozrejme, toto je potrebné urobiť pre každú tabuľku, ktorú chceme premenovať.

6) Musíme tiež rovnako premenovať všetky výskyty tabuliek v kóde.

a) prvým krokom bude jednoducho spustiť vyhľadávanie a nahradenie použitého slova "prefiix", takže v našom príklade nahradíme:

prefix("eigenaar")

s:

prefix("mod_pedigree_owner")

To sú prípady, keď voláme tabuľky konvenčným spôsobom.

b) ale ľudia sú kreatívni a môže sa stať, že to urobia inak, takže nás nič nezachráni od testovania a nakoniec hľadáme slovo "eigenaar" vo všetkých súboroch, kde musíme určovať, či ide o tabuľku a či treba premenovanie.

Nové pomenovanie zjednoduší dve veci:

- v phpMyAdmin uvidíme (alebo v akomkoľvek inom databázovom nástroji) všetky tabuľky modulu zoskupené. To ich tiež odlíši od základných tabuliek.

- v kóde bude ľahšie nájdenie tabuľky vyhľadaním formy slova "mod_MODULENAME".

V blízkej budúcnosti budú tiež upevnené názvy a charakteristiky typických polí v základných moduloch a budú k nim poskytnuté vodítka.

Keď sa pozrieme na štandardné moduly, rovnaké pole môže byť v každom module menované odlišne.
Pozrime sa na "Group ID" - to by mohlo byť: gid, g_id, group_id, gr_id, atď. A ak sa snažíme udržiavať modul od iného autora, strácame príliš veľa času zisťovaním,
o aké konkrétne pole vlastne ide.

Ak máte vylepšenie tohto návodu, dajte nám prosím vedieť.
FACEBOOK / komentáre k článku