jSeblodと他の多くの拡張機能を備えたJoomla 3.4.4の複雑なインストールがあります。Webサーバーの前でVarnish4を使用する予定です。そのため、適切なCache-Controlヘッダーをオンにする必要があります。
しかし、私はキャッシュをオンにするようには見えません。これが私が試したものです:
1)
configuration.php
public $caching = '1';
public $cache_handler = 'file';
public $cachetime = '30';
2)管理者->拡張機能->プラグイン->ページキャッシュが有効
プラグインでは、ブラウザキャッシュが有効になっています
3)デバッガーを使用すると、私が試したプラグインでデバッガーが停止しますが、キャッシュプラグインでは停止しません
4)[管理者]-> [拡張機能]-> [管理]で、インストールされているキャッシュプラグインを見つけることができます。
5)「アドミニストレーター」->「拡張機能」->「ディスカバー」で、これが見つかりました。
6)自分のライブWebサイトでも同じ結果が得られますが、キャッシュヘッダーは「Cache-Control:no-store、no-cache、must-revalidate、post-check =」ではなく「Cache-Control:no-cache」です。 0、事前チェック= 0」
7)応答が送信される直前にキャッシュをオンにするプラグインを作成しました:
class plgSystemGtnocachies extends JPlugin
{
function plgSystemGtnocachies( &$subject, $config )
{
parent::__construct( $subject, $config );
}
function __destruct()
{
if (!headers_sent())
{
$this->setCacheHeaders();
}
}
public function onAfterRender()
{
JApplicationWeb::allowCache( true );
$this->setCacheHeaders();
}
private function setCacheHeaders()
{
JApplicationWeb::setHeader( 'Cache-Control', 'public, max-age=10800', true );
JApplicationWeb::setHeader( 'Vary', 'Cookie', true );
JApplicationWeb::setHeader( 'Pragma', '', true );
}
}
しかし、私が見つけたのは、関数呼び出しが
class JEventDispatcher extends JObject
{
public function trigger($event, $args = array())
{
$result = array();
/*
* If no arguments were passed, we still need to pass an empty array to
* the call_user_func_array function.
*/
$args = (array) $args;
$event = strtolower($event);
// Check if any plugins are attached to the event.
if (!isset($this->_methods[$event]) || empty($this->_methods[$event]))
{
// No Plugins Associated To Event!
return $result;
}
// Loop through all plugins having a method matching our event
foreach ($this->_methods[$event] as $key)
{
// Check if the plugin is present.
if (!isset($this->_observers[$key]))
{
continue;
}
// Fire the event for an object based observer.
if (is_object($this->_observers[$key]))
{
$args['event'] = $event;
$value = $this->_observers[$key]->update($args);
------->
}
// Fire the event for a function based observer.
elseif (is_array($this->_observers[$key]))
{
$value = call_user_func_array($this->_observers[$key]['handler'], $args);
}
if (isset($value))
{
$result[] = $value;
}
}
return $result;
}
JApplicationWeb::getInstance->response->cacheable
再び偽です。
ここで何が起こっているのでしょうか?