diff options
author | emkael <emkael@tlen.pl> | 2016-04-22 15:59:31 +0200 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2016-04-22 15:59:31 +0200 |
commit | ee96b029b7e5edc4ed6ddbfccf9df44b4c9e45e8 (patch) | |
tree | 50a297cee00dc5609421bdc8e40bcd84aa227986 /app | |
parent | 244dbdf5cd0e24709eb70fc7dfa3269b44df1388 (diff) |
* moving rendered scripts from session to cache and distinguishing among various page views for single session
Diffstat (limited to 'app')
-rw-r--r-- | app/php/components/ClientScriptManager.php | 32 | ||||
-rw-r--r-- | app/php/layouts/Layout.php | 11 | ||||
-rw-r--r-- | app/php/layouts/MainLayout.php | 4 | ||||
-rw-r--r-- | app/php/layouts/MainLayout.tpl | 3 |
4 files changed, 46 insertions, 4 deletions
diff --git a/app/php/components/ClientScriptManager.php b/app/php/components/ClientScriptManager.php index ce3446c..cd948a6 100644 --- a/app/php/components/ClientScriptManager.php +++ b/app/php/components/ClientScriptManager.php @@ -1,5 +1,7 @@ <?php +Prado::using('Application.layouts.Layout'); + class ClientScriptManager extends TClientScriptManager { private $_page; @@ -57,11 +59,32 @@ class ClientScriptManager extends TClientScriptManager { private $_renderedScriptsInitialized = FALSE; + private function _getRenderedScriptsStoreKey() { + $template = $this->_page->Master; + if (!$template instanceof Layout) { + throw new TNotSupportedException( + 'Compiled assets may only be used within Layout master class controls' + ); + } + return 'RenderedScripts.' . $template->generateViewID(); + } + + private function _getCache() { + $cache = $this->Application->Cache; + if (!$cache) { + throw new TNotSupportedException( + 'Compiled assets require cache to be configured' + ); + } + return $cache; + } + private function _getRenderedScripts() { + $sessionKey = $this->_getRenderedScriptsStoreKey(); if ($this->_page->IsCallBack || $this->_renderedScriptsInitialized) { - return $this->Session->itemAt('RenderedScripts') ?: []; + return $this->_getCache()->get($sessionKey) ?: []; } else { - $this->Session->remove('RenderedScripts'); + $this->_getCache()->delete($sessionKey); $this->_renderedScriptsInitialized = TRUE; return []; } @@ -78,7 +101,10 @@ class ClientScriptManager extends TClientScriptManager { $newScripts ) ); - $this->Session->add('RenderedScripts', $scripts); + $this->_getCache()->set( + $this->_getRenderedScriptsStoreKey(), + $scripts + ); } private function _compileFiles($files) { diff --git a/app/php/layouts/Layout.php b/app/php/layouts/Layout.php new file mode 100644 index 0000000..324c69f --- /dev/null +++ b/app/php/layouts/Layout.php @@ -0,0 +1,11 @@ +<?php + +class Layout extends TTemplateControl { + + public function generateViewID() { + return $this->ViewID->Value ?: md5(mt_rand()); + } + +} + +?> diff --git a/app/php/layouts/MainLayout.php b/app/php/layouts/MainLayout.php index c0e7e0b..5843952 100644 --- a/app/php/layouts/MainLayout.php +++ b/app/php/layouts/MainLayout.php @@ -1,6 +1,8 @@ <?php -class MainLayout extends TTemplateControl { +Prado::using('Application.layouts.Layout'); + +class MainLayout extends Layout { } diff --git a/app/php/layouts/MainLayout.tpl b/app/php/layouts/MainLayout.tpl index f8c5f50..0deb816 100644 --- a/app/php/layouts/MainLayout.tpl +++ b/app/php/layouts/MainLayout.tpl @@ -14,6 +14,9 @@ </main> <footer role="contentinfo"> </footer> + <com:THiddenField ID="ViewID"> + <prop:Value><%= $this->generateViewID() %></prop:Value> + </com:THiddenField> </com:TForm> </body> </html> |