2016-10-28 76 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設置爲不可緩存。 –