我试图从服务器端使用清漆的magento网站上获取新内容。我的插件就像这样:
有没有办法在我的插件中绕过清漆缓存控制而无需使用清漆?我无法访问服务器。
答案 0 :(得分:0)
此类问题的一个常见做法是以get参数的形式实际使用缓存占用。
由于Varnish实际上依赖于您用来访问网页的路线,因此Varnish会将一个不同的网址视为同一页面,并将其作为一个全新的页面进行缓存。
因此http://www.example.com/与http://www.example.com/?cache_buster=1464645205完全相同,但Varnish会将这些视为两个不同的页面和两个不同的缓存条目。
请注意,我在那里使用的号码是一个时间戳,每次您想要访问任何页面的未缓存版本时都很容易生成。
至于Magento,由于URL是以http://www.example.com/module_front_nanme/controller_name/action_name/parameter_name_1/value_1/parameter_name_2/value_2的形式构建的,因此实际上你有“路由之类”获取参数。
如果您的目标是实际访问购物车,根据您在特定控制器中生成的会话ID,我要做的是将所述会话ID作为get参数重定向到购物车
/**
* Please not this is an action that should be done in a controller
*/
public function someExampleAction() {
/**
* I am generating a timestamp here as stated above,
* but it could be generated any other way, or you can keep
* your session id "secret" if that is of any concern for your but
* couple it with a simple cache buster from a timestamp as I did here
*/
$sessionId = time();
/**
* This will redirect you to
* http://www.example.com/checkout/cart/index/cache_buster/1464645205
*/
$this->_redirect( 'checkout/cart', array( 'cache_buster' => $sessionId ) );
}
如果您不在控制器中,那么您可以使用Mage::getUrl()
完全相同的方式获取网址:
/** In any context */
$sessionId = time();
Mage::getUrl( 'checkout/cart', array( 'cache_buster' => $sessionId ) );