2016-10-28 81 views
0

我的要求是限制某个特定国家(例如:奥地利)IP的内容元素。这意味着访问奥地利知识产权网站的用户应该可以看到内容元素,对于所有其他用户来说,它应该是隐藏的。我正在使用geoip解决方案来检查国家/地区。我写了一个用户函数来实现这个功能。我写了一个小扩展名,并根据国家设置了隐藏标志1和0。但是由于TYPO3缓存,我想每次清除缓存以反映前端的变化。我将扩展名包含为USER_INT,并且扩展名是不可缓存的。但不幸的是不工作。功能性工作,但由于缓存更改不实时反映。限制TYPO3中IP的内容元素

$uid = 175; // uid of the content element needs to be hidden   
$geoplugin = new \geoPlugin(); 
$geoplugin->locate(); 
$countryCode = $geoplugin->countryCode; 
if($countryCode == 'AT'){ 
    $GLOBALS['TYPO3_DB']->exec_UPDATEquery('tt_content', 'uid IN ('.$uid.')', array('hidden' => 0)); 
}else{ 
    $GLOBALS['TYPO3_DB']->exec_UPDATEquery('tt_content', 'uid IN ('.$uid.')', array('hidden' => 1)); 
} 

TYPO3中是否有方法限制特定IP /国家的内容元素?或者你们可以建议一个解决方案来解决这个问题吗?

+0

我的方法是创建我自己的未缓存的插件。在这个插件中,用户可以选择要显示的内容元素,以及内容应该可见/不可见的区域。然后,该插件仅呈现内容元素,或者不显示,具体取决于远程用户IP。 – Jost

+0

你能想象通过ajax实现这样的过滤内容吗?然后,你会避免与缓存机制 – jokumer

回答

1

Jost的解决方案比根据访问者国家隐藏数据库中的元素要少得多。按照你的方式,每次用户访问时数据库可能都会改变。 只需创建一个微型扩展。

+0

麻烦会尝试实现。你能告诉我一个很好的方法来实现这个功能吗?我的插件不可缓存,但仍然会影响功能上的typo3缓存。 –

+0

您可以使用带有小型前端插件的扩展程序生成器创建小型扩展程序。添加一个flexform到插件,你可以在其中选择一个tt_content元素,如果它匹配所需的国家。为这些国家或其他条件添加更多设置。 –

+0

并将ext_localconf内的插件/ ControllerAction设置为不可缓存。 –