2012-03-28 5 views

Antwort

0

Wenn Sie die Manifest-Datei meinen, sollte sie in/app/webroot gehen, das Verzeichnis, das Ihr vhost auch für die Site verwenden sollte. Außerdem gibt es mit CakePHP nichts, was damit zusammenhängt.

Werfen Sie einen Blick auf diese: http://www.html5rocks.com/en/tutorials/appcache/beginner/

+0

Ok Ich weiß, was ist der Anwendungscache. Was ich versuche zu finden ist, wie man die Manifest-Datei foreach Ansicht auf der CakePHP-Anwendung verwendet. Aber wenn ich es in die/app/Webroot platzieren muss, ist es eine einzige Manifest-Datei für alle die CakePHP-Anwendung. – albertopriore

+0

Lesen Sie den Link, den ich zur Verfügung gestellt habe. Es gibt keine Begrenzung in Cachedateien. Wenn Cake die Seiten generiert, wird immer eine Layout-Datei gerendert, die das html-Tag hat, außer dass es keine HTML-Ansicht/Layout ist, die Sie rendern. Setzen Sie einfach eine Standard-Manifest-Datei dort oben, etwas wie if (! Isset ($ cacheManifist)) {echo 'default.mf'; } else {echo $ cacheManifest; Setzen Sie die Variable innerhalb einer beliebigen Ansichtsdatei. – burzum

3

Die beste und einfachste Weg, eine Manifest-Datei in allen Ansichten zuzugreifen, ist auf Ihre Layouts zu sehen, zum Beispiel

View/Layouts/default.ctp 

und ersetzen <html> mit

<?php echo "<html manifest='".$this->webroot."manifest.php'>"; ?> 

in denen Manifest.php in

befindet
app/webroot/manifest.php 

und sieht ungefähr so ​​aus:

<?php 
    header('Content-Type: text/cache-manifest'); 
    echo "CACHE MANIFEST\n"; 
    echo "\n\nNETWORK:\n"; 
    echo "*\n"; 

    echo "\n\nCACHE:\n"; 

    echo "# Version: 1\n"; 
?> 

So ist die Manifest.php nur einmal benötigt wird, und kann für alle Ansichten verwendet werden.

TIPP:
Für eine dynamische Manifest-Datei, die Sie ein Code-Snippet von hier verwenden können:
http://nial.me/2010/01/using-the-html5-cache-manifest-with-dynamic-files/

1

Ich habe versucht, diese Lösung, in default.ctp das Manifest setzen, aber es verursacht einige Probleme , alle meine Seiten wurden zwischengespeichert ... ich denke, es ist beschrieben in the spec "... die Seite, die das Manifest referenzierte, wird automatisch zwischengespeichert, auch wenn es nicht explizit erwähnt wird".

... da alle meine Seiten zwischengespeichert wurden, wird Manifest auf jeder Seite überprüft. Und wenn sich ein anderer Benutzer anmeldet, sehen sie die letzte Benutzer-Homepage und andere Seiten.

Die endgültige Lösung: eine Umleitung/Lade Seite erstellen

1 - Erstellen Sie die Umleitungsseite: ich die Seiten/redirect.ctp-Datei erstellen hatte und die Funktion Umleitung() {} in der Seiten-Controller . Eine einfache Seite, nur mit einer Hallo-Nachricht und einer Ladebalken basierend auf dem ApplicationCache-Fortschrittsereignis:

var appCache = window.applicationCache;
appCache.addEventListener ('Fortschritt', Funktion (Ereignis) { console.log (event.loaded + "of" + event.total + "Dateien ..."); // einige Änderungen auf der Seite vornehmen ' Ladebalken }, falsch);

2 - Manifest lädt nur in der Umleitungsseite: Im Ansicht/Layout/default.ctp Ich habe das Tag gefiltert, um das Manifest nur auf der Umleitungsseite anzuzeigen:

<? if ($ this-> request-> params ['controller'] == 'pages' & &
$ this-> request-> params ['aktion'] == 'redirect'):? >
html manifest = "<? = $ This-> webroot?> Manifest.php">
<? sonst:?>
< html>
<? endif; ?>

3 - die Umleitungsseite in der Auth Komponente Verwenden Sie meinen Benutzer
umleiten Seite nach der Anmeldung zu führen:
Im AppController eine gefasste Auth Komponente wie dieses

public $ components = array (
'Session',
'Auth' => array (
'authError' => "Benutzer oder Passwort ungültig",
'unauthorizedRedirect' => "/ pages/umleiten? Err = login",
'loginRedirect' => "/ pages/redirect",
'logoutRedirect' => "/",
'loginaction' => "/user/login ",
'autorisieren' => Array ('Controller')
)
);

jetzt nur noch die im Manifest geputtet Elemente zwischengespeichert werden. Die Redirect-Seite wird (gemäß der Spezifikation) zwischengespeichert, aber das ApplicationCache-Ereignis aktualisiert die Seite, die dieses "Dynamic" verursacht.