2016-10-28 1 views
0

내 요구 사항은 특정 국가의 IP (예 : 오스트리아)로 콘텐츠 요소를 제한하는 것입니다. 즉, 오스트리아 IP에서 웹 사이트를 방문하는 사람들은 콘텐츠 요소에 표시되어야하고 다른 모든 사용자에게는 숨겨져 있어야합니다. 나라를 확인하기 위해 지오 솔루션을 사용하고 있습니다. 이 기능을 구현하는 사용자 함수를 작성했습니다. 작은 확장을 작성하고 국가에 따라 숨겨진 플래그 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)); 
} 

특정 IP/국가의 콘텐츠 요소를 제한하기 위해 TYPO3에서 사용할 수있는 방법이 있습니까? 아니면이 문제를 해결할 해결책을 제안 할 수 있습니까?

+0

내 접근 방식은 내 자신의 uncached 플러그인을 만드는 것입니다. 이 플러그인에서 사용자는 표시 할 콘텐츠 요소와 콘텐츠를 표시하거나 표시하지 않을 영역을 선택할 수 있습니다. 그런 다음 플러그인은 원격 사용자 IP에 따라 콘텐츠 요소를 렌더링하거나 아무것도 렌더링하지 않습니다. – Jost

+0

아약스를 통해 필터링 된 콘텐츠를 구현할 수 있습니까? 그렇다면 캐싱 메커니즘 – jokumer

답변

1

Jost의 솔루션은 방문자 국가에 따라 데이터베이스의 요소를 숨기는 것보다 훨씬 덜 위험합니다. 귀하의 방법으로 데이터베이스는 아마 모든 사용자 방문마다 변경되었습니다. 마이크로 확장을 만들면됩니다.

+0

으로 번거 로움을 피할 수 있습니다. 이 기능을 구현하는 좋은 방법을 알려주시겠습니까? 내 플러그인은 캐시 할 수 없지만 여전히 typo3 캐시는 기능에 영향을 미칩니다. –

+0

작은 프론트 엔드 플러그인이있는 확장 빌더로 작은 확장을 작성할 수 있습니다. 원하는 국가와 일치하는 경우 tt_content 요소를 선택할 수있는 플렉스 폼에 플러그인을 추가하십시오. 국가 또는 기타 조건에 대한 설정을 추가하십시오. –

+0

그리고 ext_localconf 내부의 플러그인/ControllerAction을 캐시 불가로 설정하십시오. –