Úpravy v sekci Co je nového

Příspěvky či dotazy, které se nehodí do žádného jiného vlákna...
Falt
Příspěvky: 405
Registrován: 30 srp 2013 23:48
Kontaktovat uživatele:

Úpravy v sekci Co je nového

Příspěvekod Falt » 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:
example.gif
ukázka sekce Co je nového
example.gif (16.54 KiB) Zobrazeno 10502 x

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:
bckSQL.gif
kam se zapisují SQL příkazy v phpMyAdmin
bckSQL.gif (15.7 KiB) Zobrazeno 10502 x

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:
opendocument.gif
export tbl_media z phpMyAdmin
opendocument.gif (6.88 KiB) Zobrazeno 10502 x

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!
zalohastruktury.gif
zálohovánístruktury tabulek
zalohastruktury.gif (13.58 KiB) Zobrazeno 10502 x

Na závěr ocituji klasiky: "Jak prosté, milý Watsone!" a dodám, že cest k řešení je samozřejmě více. :D

Uživatelský avatar
michal
Příspěvky: 731
Registrován: 06 čer 2013 21:37
Bydliště: Hostinné
Kontaktovat uživatele:

Re: Úpravy v sekci Co je nového

Příspěvekod michal » 17 kvě 2017 21:43

Na svůj web TNG data vkládám výhradně pomocí importu gedcomu vytvořeného v Legacy a také upravuji obsah pole changedate u médií z důvodu zobrazení novinek v sekci "Co je nového". Váš systém nesporně vede k úspěšnému výsledku, nicméně na mě je dost složitý. Smysl použití nového pole bck_changedate mi je jasný. Já bych při použití nového pole v tabulce médií zřejmě postupoval následovně:
1. krok - Vytvoření bck_changedate a úvodní naplnění jeho obsahu
-vytvoření pole: zde bych použil váš příkaz, ale trošku pozměněný: alter table tng_media add column `bck_changedate` datetime COLLATE utf8_czech_ci; (původní pole changedate je totiž typu DATETIME a tak bych nové pole vytvořil stejného typu. Vy tvoříte nové pole typu TEXT a je zde tedy při následných přesunech dat mezi těmito poli nesoulad v typu.)
-úvodní naplnění obsahu: použil bych příkaz update tng_media set `bck_changedate` = `changedate`;
2. krok - Aktualizace webu TNG importem gedcomu z Legacy
Naimportuju gedcom a u "nových" médií je pole bck_changedate bez obsahu, tedy NULL. Je-li dnes 17.5. 13:10, dám příkaz update tng_media set `bck_changedate` = '2017-05-17 13:10:00' where `bck_changedate` is NULL; Tím "nová" média v poli bck_changedate označím aktuálním datem. Následně dám příkaz update tng_media set `changedate` = `bck_changedate`; čímž datum z bck_changedate v celém souboru vložím do changedate a tomto rozhodujícím poli mám teď všechna nová média označena aktuálním datem.
3. krok - Další aktualizace webu TNG importem gedcomu z Legacy
Provedu opět krok 2.

Já ale pro úpravu data změny médií používám jiný systém: využívám vytvoření náhledů u nových médií.
Po operaci import gedcomu do TNG vytvořím náhledy nových médií pomocí Administrace>Media>Náhledy>Vygenerovat. Operací vytvoření náhledů dojde k aktualizaci data změny (pole changedate) právě jen u nových médií, protože těmto dosud náhledy chyběly. U médií již existujících, které své náhledy již mají vytvořené, se nové náhledy znovu netvoří. Mám tak v poli changedate označená všechna nová média aktuálnějším datem než všechna ostatní média. Nyní už jen zbývá datum změny (pole changedate) u ostatních médií, tj. u těch "starých", změnit tak, aby toto datum bylo starší než je limit ve dnech, kdy se mají záznamy zobrazovat v sekci "Co je nového" (mám nastaveno 10 dní).
V phpmyadmin tedy zjistím, jaké je nejnovější datum v poli changedate. To je datum vytvoření náhledů u nových médií, čili všechny záznamy s tímto datem jsou nová média. (Zobrazím tabulku tng_media a na záložce Projít kliknu (případně opakovaně) na záhlaví pole changedate, čímž tabulku přetřídím sestupně (vzestupně).)
Je-li nejnovější datum např. 2017-05-17 13:10:00, pak příkazem UPDATE `tng_media` SET `changedate`= '2017-05-06 13:10:00' WHERE `changedate`< '2017-05-17 13:10:00'; změním datum všech ostatních obrázků na datum o 10 dní starší, čímž je vyloučím ze zobrazení v sekci "Co je nového".

Falt
Příspěvky: 405
Registrován: 30 srp 2013 23:48
Kontaktovat uživatele:

Re: Úpravy v sekci Co je nového

Příspěvekod Falt » 17 kvě 2017 23:20

Jak přidat pole bck_changedate
Rozhodně je správný postup SQL příkazem, který jste uvedl ve Vaší odpovědi:
alter table tng_media add column `bck_changedate` datetime COLLATE utf8_czech_ci;
(původní pole changedate je totiž typu DATETIME). Díky za podchycení omylu - vloudila se chybička. :roll:


Zpět na “Různé”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 13 hostů