A round man cannot be expected to fit in a square hole right away.
He must have time to modify his shape.—Mark Twain

Utolsó módosítás

A hálóhelyem születésének idején még volt némi értelme a weblapon alkalmazott technika szerint csoportosítani az oldalakat, ezért hoztam létre a második, menüelemet, ahová ez a weblap is került. Mára a világ megváltozott, és szinte valamennyi weboldalon (ahogy ezen is) többféle számítástechnikai nyelv, többféle technikai megoldás is támogatja a látogatók minél élvezetesebb tájékozódását. Ilyen például a képek és videók látványos megjelenítése, vagy íme egy szélsőséges példa: ma már stíluslapok segítségével rá lehet venni a böngészőt a helyes magyar szövegelválasztásra, ha a gyártója felkészítette rá. De van olyan – Ajax-technikára épülő – eljárás is, amelyik akkor is elválasztja a szöveget, ha a böngészőfejlesztők sajnálták rá az energiát…

JavaScript

Szomorúan tapasztalom, hogy ami eddig remekül működött, ma időnként csütörtököt mond. Hosszú évekig használtam egy JavaScript-kódot, mely az oldal aljára biggyesztett egy fontos információt: a HTML-állomány utolsó mentésének időpontját (hogy itt gyorsan rátalálhass, a lap alján pirosra színeztem; közvetlenül a gomb fölött találod). A kód így nézett ki:

<script>
    var last_modified = document.lastModified;
    last_modified = last_modified.replace(/ .*/, "");
    last_modified = last_modified.split("/");
    last_modified = last_modified[2] + ". " + last_modified[0] + ". " + last_modified[1] + ".";
    document.getElementById("last_modified").innerHTML = last_modified;
</script>

Az egyik érdemi művelet – az adatszerzés – az első sorban látható. Az azt követő további három csak a magyar helyesírási szabályokhoz igazítja az adatokat. A másik fontos sor az utolsó, mely a dátumot a weblap előre előkészített last_modified azonosítójú rovatába helyezi. (Ezzel a módszerrel igyekeztem kizárni a feledékenységem miatti malőrt, ugyanis több weboldalra fixen felvettem, és előfordult, hogy a tartalom javításakor elfelejtettem módosítani a keltezést. Az ügyetlenségemre kiváló példa az Ajax-metódusok oldal, melynek alján 2009-es dátum látható, pedig utoljára 2012-ben nyúltam hozzá.)

Az adat eddig arról tájékoztatta a látogatókat, hogy mikor mentettem ki az oldalt utoljára. Ez egyfajta iránymutatást jelentett, hogy a tartalom elévülhetett-e az idők folyamán, fenntartással kell-e fogadni az olvasottakat, vagy frissek-e a közölt információk. Ezért az esetek túlnyomó többségében gondoskodtam a látogatóim tájékoztatásáról. Mára ez az igyekezetem hiábavalóvá vált, mert a szkript a valós adat helyett a mostani látogatásod aktuális időpontját adja. Az eredményét megnézheted például A kérésedre… című zenei oldalon. Ha látni akarod, bátran pörgess az aljára:

Azon oldalak esetében, amelyek a fenti JavaScript-kódot tartalmazzák, sajnálatos módon maga a Firefox is a hibás adatot mutatja az Oldal adatai (Page Info) ablakban. Ennek megtekintéséhez kattints A kérésedre… oldal bármelyik üres területén az egér jobb gombjával (az egyértelműség kedvéért ideiglenesen magyarra állítottam a böngészőmet):

A menüelem kiválasztása után megjelenik az ablak. A piros nyíl mutatja a weboldal utolsó módosításának idejét, amely egyáltalán nem a tényleges dátum, hanem a lebegőablak megtekintésének – itt a képernyőkép készítésének – időpontja (a helyes adat lenne):
jQuery

Tíz év rengeteg idő – különösképpen a webfejlesztés területén. Ennyi idő alatt új technikák születnek, beváltak pedig elavulnak. Ez esetben is ilyesmi történhetett. Egy olyan – JavaScript-funkciókat kezelő-bővítő – könyvtár vált népszerűvé a nagyvilágban, melynek alkalmazása ugyan kissé bonyolultabb, de sokkal strukturáltabb, áttekinthetőbb, ám főként sokkal hatékonyabb a puszta forrásánál. Ez a jQuery. Segítségével közvetlenül a kliensoldalról (arról a felületről, amit most látsz) könnyedén futtatható egy szerveroldali szkript (Perl, PHP stb.), amely megszerzi, majd ide visszajuttatja a szervertől kért adatokat. Egy ilyen adat – jelen esetben az állomány utolsó mentésének időpontja – valós időben (azonnal, mondhatjuk, röptében) megjeleníthető az aktuális weboldalon.

<script>
    $.ajax({
        type:    "GET",
        url:     "filename.php",
        timeout: 1000,
        success: function(date) {
            $("#last_modified").text(date);
        }
    });
</script>
Az így meghívott PHP-szkript a szervertől kapott adatot visszaküldi a hivatkozó HTML-oldalra, amit sikeres adatátvétel után ez a rövidke kis Ajax-kód a weblapon előkészített last_modified azonosítójú rovatba illeszt. Ez már kétségkívül az utolsó módosítás dátuma.
PHP

Bár egyáltalán nem tartozik az Ajax tárgykörébe, de minthogy a műveletvégzésben a két szkript szorosan együttműködik (és maga a PHP-kód lényegi része igazán nyúlfarknyi), megmutatom, hátha ennek révén valakinek némi ötlete támad. Íme a PHP-állomány érdemi tartalma:

<?php
    echo date("Y. m. d.", filemtime("file.html"));
?>
Háttér

Fogalmam sincs, hogy mióta létezik és mi lehet a probléma tényleges oka. A sötétben tapogatózóm. Próbáltam kutakodni – hátha nem kell komplett felborítani az eddigi rendet, nem kell elhagyni a járt utat. A Google rengeteg találatot ad, de nem sikerült érdemleges választ kapnom, bár a Mozilla fejlesztőcsapata által közzétett táblázat szerint egyik böngészőben sem lehet gond.

Természetesen a W3C is foglalkozik a kérdéssel – például a 14 Header Field Definitions oldalon a 14.29 Last-Modified alcím alatt. Tény, hogyha az utoljára 2012-ben módosított Ajax-metódusok weboldalamat online nézem, a Last Modified mező értéke null, míg a saját gépemen futó Apache szerver korrekt adattal szolgál: ugyanaz a JavaScript-algoritmus a kimentés tényleges időpontját adja:

OnlineOffline
Lehet, hogy ezt a hibát a szerver beállításának valamilyen módosításával ki lehetne küszöbölni?
Készült:
Utolsó módosítás:
2019. 03. 19.
© Tuna András, 2006–2019