URL aktuální stránky se kešuje


#1

Nesetkal se tu prosím někdo s tím, že po zavolání jakéhokoliv kódu na zjištění aktuální stránky dostanu jen tu první a při změně URL už zůstává tato v paměti keš do doby, než ručně nebo v administraci keš vyprázdním?

$request = Mage::app()->getFrontController()->getRequest();
$currentUrl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getServer('REQUEST_URI');

Tento kód mi správně uloží do $currentUrl aktuální URL stránky, když překliknu jim, mám v proměnné však stále URL předchozí stránky a takto dokola, dokud nevyprázdním keš. Předesílám, že nemám žádnou fullpage cache, jen klasicky zapnuté kešování v M1. Díky


#2

Doplním, že nefunguje žádný z možných přístupů k získání aktuální URL pomocí Magento frameworku, ani získání URL pomocí čistého PHP - vrací stejně tak původní URL a až po vyprázdnění Magento keš (divné), vrátí zas tu správnou URL, ale opět jen jednou. Mluvím teď o něčem takovémto:

$currentUrl = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

#3

A co zkusit
$currentUrl = Mage::helper('core/url')->getCurrentUrl();

Ale je divný, že tvoje řešení nejde, nemůže na to mít vliv apc nebo opcache?


#4

možná, že ten tvůj kód voláš v bloku, který je cachovaný


#5

To vrací taky nakešovanou verzi.


#6

Jaro, je to v /app/design/frontend/mojesablona/default/template/page/html/topmenu.phtml volaný kvůli zabarvení aktuální položky menu dle aktuální URL… Nevím, jak ověřit zda je takový blok kešovaný, ale divný je už i to, že kešuje standardní volání čistýho PHP, s tím jsem se snad ještě nesetkal.


#7

Tak to bude tím, že blok za tvojí šablonu je Mage_Page_Block_Html_Topmenu a ten je vždy cachován.

Zkus upravit Mage_Page_Block_Html_Topmenu::getCacheKeyInfo tak, aby součástí cache klíče byla i aktuální URL.


#8

Aha, upravil jsem page.xml v layoutu a už to fachá. Jen nevím zda jsem na netu vyčetl optimální řešení, možná tak kompletně vypínám keš pro ten blok, což je asi škoda. Viz.

<block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml">
    <action method="unsetData"><key>cache_lifetime</key></action>
    <action method="unsetData"><key>cache_tags</key></action>
</block>

Jak by se to správně mělo udělat podle nějakýho best practise? Tzn. dostanu co chci, ale nadále kešuju to menu, pač nic jinýho dynamickýho tam nepotřebuju pro sebe. Připravit si proměnnou s URL někde dřív na úrovni modulu mi přijde složitý zbytečně.