Úpravy v sekci Co je nového
Napsal: 17 kvě 2017 10:58
U této sekce lze v široké šíři nastavit možnosti zobrazení. Protože není praktické mít sekci Co je nového nepřehledně velikou, mohu doporučit rozsah posledních 20 až 30 dní a pro každou kategorii limit 3 až 10 ukázek. Řada návštěvníků našich stránek se dívá nejdříve právě do této sekce, proto je péče o tuto sekci na místě. Následující ukázka má nastaven limit 1 položka:
Do sekce Co je nového si TNG zařadí ukázky z jednotlivých skupin objektů podle nastaveného časového pásma. Rozhodující je datum zápisu, které je v odpovídající tabulce v poli change_date. A tady je kámen úrazu.
Média
Po každé budou chybně zařazeny obrázky v kolekci Fotografie, obecně všechny kolekce médií, které se do TNG dostávají importem dat z Legacy. Důvod je jednoduchý – údaj o datu pořízení médií přiřazených k osobám, událostem, místům, pramenům se v Legacy vůbec nezapisuje, a proto se hodnota changedate do TNG při importu nemá kudy dostat a TNG si vypomůže tím, že jako hodnotu do pole changedate v tbl_media zapíše datum a čas importu Gedcomu. To je vidět i v ukázce – zařazená fotografie je chyba – nepatří do sekce Co je nového.
Kolekce medií které vznikají v prostředí TNG (neimportují se), jsou v TNG samozřejmě správně popsány hodnotou v poli change_date (Magazíny a další).
Jak řeším opravy
Vycházejme ze základního modelu, že data ukládáme u sebe v Legacy a před zveřejněním na síti si je zobrazíme nejprve v lokální instalaci TNG (ve WAMPu). Nutné opravy využívají příkazy SQL v prostředí phpMyAdmin. Nabízí se více variant řešení, já se podělím o variantu se zálohováním pole change_date do nového pole bckchange_date v tbl_media.
K čemu je to dobré? Smyslem je stabilizovat údaj changedate pro budoucnost. Sice budou opět všechna pole changedate vyplněna datem importu, ale již budu mít od minula v poli bck_changedate k dispozici datum, se kterým lze dále pracovat. Po přidání pole bck_changedate provedu jednorázovou úpravu jeho obsahu, protože bude naprosto všude nejdříve hodnota NULL. Mohu si pracně vytvořit různá časová pásma, ale smyslem je správné zobrazení v sekci Co je nového. A pro tento účel úplně postačí, když vyplním všude datum o rok starší SQL příkazem typu:
UPDATE `tng_media` SET `changedate`= '2016-05-16 13:44:00';
SQL příkazy se zapisují v phpMyAdmin do tbl_media pod volbu SQL:
Pozorný čtenář namítne, že jsem potlačil zobrazení u skutečných přírůstků. Ano, u nich musím obsah pole bck_changedate ještě nahradit smysluplným datem, podobně jako po dalším importu dat do TNG v budoucnu. Nejprve mne bude vždy zajímat pole bck_changedate. Pokud by se objevil přírůstek mezi mediálními soubory, importovaný z Legacy, pak bude u něj v tabulce tng_media v poli bck_changedate opět hodnota NULL. Co s tím? Já k tomu využívám export tng_media do tabulky LibreOffice v prostředí phpMyAdmin s tím, že dole zaškrtnu volbu Přidat jména polí na první řádek:
Nejčerstvější mediální soubory se objeví s nejvyššími ID čísly. Stačí mi tedy vypsat si rozmezí čísel mediaID pro přírůstky s hodnotou NULL v poli bck_changedate a zadat SQL příkaz typu:
UPDATE `tng_media` SET `bck_changedate`= '2017-05-16 13:44:00' WHERE `mediaID` BETWEEN 2524 AND 2547;
Proč začínám s polem bck_changedate? No proto, že po jeho aktualizaci u přírůstků již mohu provést obnovu všech „datumů“ najednou příkazem (a zúročuji tak práci okolo pole bck_changedate od minula):
UPDATE tng_media SET changedate =bck_changedate;
Jak přidat pole bck_changedate
Zařídí to příkaz SQL:
alter table tng_media add column `bck_changedate` text COLLATE utf8_czech_ci;
POZOR! Pokud přidáme další pole, musíme jednorázově zálohovat i strukturu tabulek, jinak by přidané pole bck_changedate nefungovalo!
Na závěr ocituji klasiky: "Jak prosté, milý Watsone!" a dodám, že cest k řešení je samozřejmě více.
Do sekce Co je nového si TNG zařadí ukázky z jednotlivých skupin objektů podle nastaveného časového pásma. Rozhodující je datum zápisu, které je v odpovídající tabulce v poli change_date. A tady je kámen úrazu.
Média
Po každé budou chybně zařazeny obrázky v kolekci Fotografie, obecně všechny kolekce médií, které se do TNG dostávají importem dat z Legacy. Důvod je jednoduchý – údaj o datu pořízení médií přiřazených k osobám, událostem, místům, pramenům se v Legacy vůbec nezapisuje, a proto se hodnota changedate do TNG při importu nemá kudy dostat a TNG si vypomůže tím, že jako hodnotu do pole changedate v tbl_media zapíše datum a čas importu Gedcomu. To je vidět i v ukázce – zařazená fotografie je chyba – nepatří do sekce Co je nového.
Kolekce medií které vznikají v prostředí TNG (neimportují se), jsou v TNG samozřejmě správně popsány hodnotou v poli change_date (Magazíny a další).
Jak řeším opravy
Vycházejme ze základního modelu, že data ukládáme u sebe v Legacy a před zveřejněním na síti si je zobrazíme nejprve v lokální instalaci TNG (ve WAMPu). Nutné opravy využívají příkazy SQL v prostředí phpMyAdmin. Nabízí se více variant řešení, já se podělím o variantu se zálohováním pole change_date do nového pole bckchange_date v tbl_media.
K čemu je to dobré? Smyslem je stabilizovat údaj changedate pro budoucnost. Sice budou opět všechna pole changedate vyplněna datem importu, ale již budu mít od minula v poli bck_changedate k dispozici datum, se kterým lze dále pracovat. Po přidání pole bck_changedate provedu jednorázovou úpravu jeho obsahu, protože bude naprosto všude nejdříve hodnota NULL. Mohu si pracně vytvořit různá časová pásma, ale smyslem je správné zobrazení v sekci Co je nového. A pro tento účel úplně postačí, když vyplním všude datum o rok starší SQL příkazem typu:
UPDATE `tng_media` SET `changedate`= '2016-05-16 13:44:00';
SQL příkazy se zapisují v phpMyAdmin do tbl_media pod volbu SQL:
Pozorný čtenář namítne, že jsem potlačil zobrazení u skutečných přírůstků. Ano, u nich musím obsah pole bck_changedate ještě nahradit smysluplným datem, podobně jako po dalším importu dat do TNG v budoucnu. Nejprve mne bude vždy zajímat pole bck_changedate. Pokud by se objevil přírůstek mezi mediálními soubory, importovaný z Legacy, pak bude u něj v tabulce tng_media v poli bck_changedate opět hodnota NULL. Co s tím? Já k tomu využívám export tng_media do tabulky LibreOffice v prostředí phpMyAdmin s tím, že dole zaškrtnu volbu Přidat jména polí na první řádek:
Nejčerstvější mediální soubory se objeví s nejvyššími ID čísly. Stačí mi tedy vypsat si rozmezí čísel mediaID pro přírůstky s hodnotou NULL v poli bck_changedate a zadat SQL příkaz typu:
UPDATE `tng_media` SET `bck_changedate`= '2017-05-16 13:44:00' WHERE `mediaID` BETWEEN 2524 AND 2547;
Proč začínám s polem bck_changedate? No proto, že po jeho aktualizaci u přírůstků již mohu provést obnovu všech „datumů“ najednou příkazem (a zúročuji tak práci okolo pole bck_changedate od minula):
UPDATE tng_media SET changedate =bck_changedate;
Jak přidat pole bck_changedate
Zařídí to příkaz SQL:
alter table tng_media add column `bck_changedate` text COLLATE utf8_czech_ci;
POZOR! Pokud přidáme další pole, musíme jednorázově zálohovat i strukturu tabulek, jinak by přidané pole bck_changedate nefungovalo!
Na závěr ocituji klasiky: "Jak prosté, milý Watsone!" a dodám, že cest k řešení je samozřejmě více.