TYPO3 - optymalizacja pracy z instancjami
-
Upload
krystian-szymukowicz -
Category
Internet
-
view
174 -
download
7
Transcript of TYPO3 - optymalizacja pracy z instancjami
Optymalizacja pracy z instancjami
local / staging / production
Krystian Szymukowicz ([email protected])
Jakich potrzebujemy?Czym mogą się różnić między sobą?
INSTANCJE APLIKACJI
Z czym się zmierzymy?
Production(current)
ProductionBackup
ProductionReplication
Beta
Integration 1 Integration 2 Integration n
Local Developer 1
Local Developer 2
Local Developer n-1
Local Developer n
1 2 3
4
n
Integration n-1
Previous[timestamp]
Domeny
ProductionBackup
ProductionReplication
Integration 1 Integration 2 Integration n
Local Developer 1
Local Developer 2
Local Developer n-1
Local Developer n
1
n
Integration n-1
Domeny:yyy.loc
Domeny:yyy.loc
Domeny:yyy.loc
Domeny:yyy.loc
Domeny:yyy.myagency.com
Domeny:yyy-2.myagency.com
Domeny:yyy-m.myagency.com
Domeny:yyy-n.myagency.com
Domeny:www1.yyy.com
Domeny:www.yyy.com
Domeny:beta.yyy.com
4
Domeny:www.yyy.com
3
Production(current)
Beta Previous
Domeny:prev.yyy.com
2
[timestamp]
Domeny - multilang z multidomain
ProductionBackup
ProductionReplication
Integration 1 Integration 2 Integration n
Local Developer 1
Local Developer 2
Local Developer n-1
Local Developer n
1
n
Integration n-1
Domeny:- yyy.loc- pl.yyy.loc- de.yyy.loc- ch.yyy.loc- ….....
Domeny:- yyy.loc- de.yyy.loc- pl.yyy.loc- ch.yyy.loc- ….....
Domeny:- yyy.loc- ple.yyy.loc- de.yyy.loc- ch.yyy.loc- ….....
Domeny:- yyy.loc- pl.yyy.loc- de.yyy.loc- ch.yyy.loc- ….....
Domeny:- yyy.myagency.com- pl.yyy.myagency.com- de.yyy.myagency.com- ….
Domeny:- yyy.myagency.com- pl.yyy-1.myagancy.com- de.yyy-1.myagancy.com– …...
Domeny:- yyy.myagency.com- pl.yyy-3.myagancy.com- de.yyy-3.myagancy.com– …...
Domeny:- yyy.myagency.com- pl.yyy-3.myagancy.com- de.yyy-3.myagancy.com– …...
Domeny:- www1.yyy.com- www1.yyy.pl- www1.yyy.de
4
Domeny:- yyy.myagency.com- pl.yyy-1.myagancy.com- de.yyy-1.myagancy.com– …...
Domeny:- www.yyy.com- www.yyy.pl- www.yyy.de- ...
Domeny:- beta.yyy.com- beta.yyy.pl- beta.yyy.de- ...
3
Production(current)
Beta Previous
Domeny:- prev.yyy.com- prev.yyy.pl- prev.yyy.de- ...
2
Domeny:- www.yyy.com- www.yyy.pl- www.yyy.de- ...
[timestamp]
Solr – ustawienia hostów / core
ProductionBackup
ProductionReplication
Integration 1 Integration 2 Integration n
Local Developer 1
Local Developer 2
Local Developer n-1
Local Developer n
Integration n-1
Core:- /solr/live-yyy-1-0-en_EN/- /solr/live-yyy-1-1-pl_PL/- /solr/live-yyy-1-2-de_DE/- …..Path: www.yyy.comsite.solr.noindex = 1
Production(current)
Beta Previous
Core:- /solr/beta-yyy-1-0-en_EN/- /solr/beta-yyy-1-1-pl_PL/- /solr/beta-yyy-1-2-de_DE/- …..Path: www.yyy.com
Core:- /solr/live-yyy-1-0-en_EN/- /solr/live-yyy-1-1-pl_PL/- /solr/live-yyy-1-2-de_DE/- …..Path: www.yyy.com
Core:- /solr/dev-yyy-1-0-en_EN/- /solr/dev-yyy-1-1-pl_PL/- /solr/dev-yyy-1-2-de_DE/- …..Path: yyy.myagency.com
Core:- /solr/dev-yyy-1-0-en_EN/- /solr/dev-yyy-1-1-pl_PL/- /solr/dev-yyy-1-2-de_DE/- …..Path: yyy.myagency.com
Core:- /solr/dev-yyy-1-0-en_EN/- /solr/dev-yyy-1-1-pl_PL/- /solr/dev-yyy-1-2-de_DE/- …..Path: yyy.myagency.com
Core:- /solr/dev-yyy-1-0-en_EN/- /solr/dev-yyy-1-1-pl_PL/- /solr/dev-yyy-1-2-de_DE/- …..Path: yyy.myagency.com
Core:- /solr/live-yyy-1-0-en_EN/- /solr/live-yyy-1-1-pl_PL/- /solr/live-yyy-1-2-de_DE/- …..Path: www.yyy.com site.solr.noindex = 1
Core:- /solr/local-yyy-1-0-en_EN/- /solr/local-yyy-1-1-pl_PL/- /solr/local-yyy-1-2-de_DE/- …..Path: yyy.myagency.com
Core:- /solr/local-yyy-1-0-en_EN/- /solr/local-yyy-1-1-pl_PL/- /solr/local-yyy-1-2-de_DE/- …..Path: yyy.myagency.com
Core:- /solr/local-yyy-1-0-en_EN/- /solr/local-yyy-1-1-pl_PL/- /solr/local-yyy-1-2-de_DE/- …..Path: yyy.myagency.com
Core:- /solr/local-yyy-1-0-en_EN/- /solr/local-yyy-1-1-pl_PL/- /solr/local-yyy-1-2-de_DE/- …..Path: yyy.myagency.com
[timestamp]
Różne – google/wtyczki
ProductionBackup
ProductionReplication
Integration 1 Integration 2 Integration n
Local Developer 1
Local Developer 2
Local Developer n-1
Local Developer n
Integration n-1
general { preventIndexingByBots = 1 google.ga.disable = 1 search.indexing.disable = 1}
Production(current)
Beta Previous
general { preventIndexingByBots = 1 google.ga.disable = 1 email = [email protected]}
general { preventIndexingByBots = 1 google.ga.disable = 1 email = [email protected]}
general { preventIndexingByBots = 1 google.ga.disable = 1 email = [email protected]}
general { preventIndexingByBots = 1 google.ga.disable = 1 email = [email protected]}
general { preventIndexingByBots = 1 google.ga.disable = 1 email = [email protected] search.disable = 1 search.indexing.disable = 1}
general { preventIndexingByBots = 1 google.ga.disable = 1 email = [email protected] search.disable = 1 search.indexing.disable = 1}
general { preventIndexingByBots = 1 google.ga.disable = 1 email = [email protected] search.disable = 1 search.indexing.disable = 1}
general { preventIndexingByBots = 1 google.ga.disable = 1 email = [email protected] search.disable = 1 search.indexing.disable = 1}
general { preventIndexingByBots = 1 google.ga.disable = 1}
general { }
general { }
general { search.indexing.disable = 1}
[timestamp]
general { email = [email protected]}
DEFAULT FOR ALL INSTANCES:
Dobrze jest ustawić takie domyślne wartości dla niebezpiecznych ustawień, które czynią najmniej szkody
i nadpisać je w wyższych kontekstach.
Programista wdrażający się do projektu może zapomnieć lub nie być świadomy, że musi
ustawić kontekst.
Wówczas użyte zostaną bezpieczne wartości domyślne.
DEFAULT BEZPIECZNY
ProductionBackup
ProductionReplication
Integration 1 Integration 2 Integration n
Local Developer 1
Local Developer 2
Local Developer n-1
Local Developer n
Integration n-1
general { overwriteAllEmails >}
Production(current)
Beta Previous
general {
}
general { }
general { }
general { }
general {
}
general {
}
general { }
general { search.indexing.disable = 0
}
general { google.ga.disable = 0 preventIndexingByBots = 0 overwriteAllEmails > } plugin.solr { [beta version settings] search.indexing.disable = 0 }
general { google.ga.disable = 0 preventIndexingByBots = 0 overwriteAllEmails > } plugin.solr { [live version settings] search.indexing.disable = 0 }
DEFAULT BEZPIECZNY:
general { google.ga.disable = 1 preventIndexingByBots = 1 email = [email protected] overwriteAllEmails = [email protected]}plugin.solr { [developers testing version] indexing.disable = 1 }
[timestamp]
TIPgeneral.overwriteAllEmails Jeżeli general.overwriteAllEmails jest ustawiony w evencie SwiftMailera modyfikujemy email tak, żeby wysyłal zawsze na naszego specjalnie spreparowanego emaila.
Email testowy:
[email protected] docelowy:
TIPlinkowanie mediów Im więcej instancji tym gigabajty mediów sprawiają większy problem.
Rozwiązaniem może być tworzenie linków symbolicznych do pojedynczych plików.Skasować wówczas możemy tylko link a nie prawdziwy plik.
Podsumujmy ustawienia
Ustawienia dla każdej instancji w notacji TSPrzykład dla strony bez języków
general { google.ga.disable = 1 preventIndexingByBots = 1 email = [email protected] overwriteAllEmails = [email protected]
}
domains { main = www.yyy.loc }
plugin { solr { host = yyy.myagancy.com path {
en = /solr/testing-yyy-1-0-en_EN/ } } }
Ustawienia dla każdej instancji w notacji TSPrzykład dla strony z językami w jednej domenie
general { preventIndexingByBots = 1 google {
ga.disable = 1}search {
indexing.disable = 1 frontend.disable = 1 backend.disable = 1 }
} domains {
main = www.yyy.loc } plugin { solr { host = yyy.myagancy.com path {
en = /solr/testing-yyy-1-0-en_EN/pl = /solr/testing-yyy-1-1-PL_PL/
de = /solr/testing-yyy-1-2-de_DE/ } } }
www.yyy.comwww.yyy.com/pl
www.yyy.com/de
Ustawienia dla każdej instancji w notacji TSPrzykład dla strony z językami w wielu domenach
general { preventIndexingByBots = 1 google {
ga.disable = 1}search {
indexing.disable = 1 frontend.disable = 1 backend.disable = 1 }
} domains {
england = www.yyy.loc poland = pl.yyy.loc germany = de.yyy.loc } plugin { solr { host = yyy.myagancy.com path {
en = /solr/testing-yyy-1-0-en_EN/pl = /solr/testing-yyy-1-1-PL_PL/
de = /solr/testing-yyy-1-2-de_DE/ } } }
www.yyy.locpl.yyy.loc
de.yyy.loc
World of all applications
World of TYPO3
Gdzie będziemy używali tych informacji?
Zwyczajowe miejsce tych danychto stałe w Typoscript
Gdzie będziemy używali tych informacji?
WARUNKOWE RENDEROWANIE FRONTENDU
TS SETUP:lib.header_search >lib.header_search = COAlib.header_search.if.isFalse = {$general.search.frontend.disable}lib.header_search.wrap = <div class="search clearfix">|</div>lib.header_search.10 < plugin.tx_solr_pi_search
Gdzie będziemy używali tych informacji?
WARUNKOWE WYSYŁANIE HEADERÓW
TS SETUP:[globalVar = LIT:1 = {$general.preventIndexingByBots}]config.additionalHeaders = X-Robots-Tag:noindex,nofollow[end]
Gdzie będziemy używali tych informacji?
MULTILANG DLA DOMEN NARODOWYCH
TS SETUP:// Poland version[globalString = IENV:HTTP_HOST = {$domains.poland}] || [globalVar = GP:L = 1]config {
sys_language_uid = 1language = pllocale_all = pl_PL.UTF-8htmlTag_langKey = pl
}plugin.tx_solr.index.queue.pages.indexer.frontendDataHelper.host = {$domains.poland}[end]
Gdzie będziemy używali tych informacji?
CORE i PATH DLA SOLR
TS SETUP:
plugin.tx_solr {solr {
host = {$plugin.tx_solr.solr.host}path = {$plugin.tx_solr.solr.path.en}
}}
[globalString = IENV:HTTP_HOST = {$domains.poland}] || [globalVar = GP:L = 1] plugin.tx_solr.solr.path = {$plugin.tx_solr.solr.path.pl}[end]
[globalString = IENV:HTTP_HOST = {$domains.germany}] || [globalVar = GP:L = 2] plugin.tx_solr.solr.path = {$plugin.tx_solr.solr.path.de}[end]
Gdzie będziemy używali tych informacji?
KONFIGURACJA REALURL DLA DOMEN
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com']['pagePath']['rootpage_id'] = 1;
$TYPO3_CONF_VARS['EXTCONF']['realurl']['beta.yyy.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com'];$TYPO3_CONF_VARS['EXTCONF']['realurl']['yyy-1.myagency.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com'];$TYPO3_CONF_VARS['EXTCONF']['realurl']['yyy-2.myagency.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com'];….….…..$TYPO3_CONF_VARS['EXTCONF']['realurl']['yyy.loc'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com'];
unset($TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']);
REAL URL DOKUMENTACJA O $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']
_DEFAULT
Key_DEFAULT
Type->siteCfg or pointer to other key with ->siteCfg in same array
Description(Deprecated) Configuration of default Speaking URL coding if no matches was found for the specific HOST name.
Warning! This is a legacy feature. The use of this option is highly discouraged because it leads to hard to detect errors with speaking URLs, wrong page id resolution, etc. Users are strongly recommended not to use _DEFAULT with multidomain web sites. This will not work correctly and be removed in future versions completely.
Jak zmieniać stałe TS w zależności od instancji?
METODA 1
1. W każdej z instancji utworzyć plik ze stałymi w lokalizacji typo3conf/constants_local.ts i wylączyć ten plik z GIT
3. Dodać includowanie tego pliku w odpowiednim miejscu w TYPO3 <INCLUDE_TYPOSCRIPT: source="typo3conf/constants_local.ts">
WADY:1. Przy dużej liczbie stałych i instancji TYPO3 wzrasta ryzyko błędów.2. Brak śledzenia zmian z wykorzystaniem systemów wersjonowania.3. Brak automatycznej propagacji zmian z wykorzystaniem systemów wersjonowania.
Jak zmieniać stałe TS w zależności od instancji?METODA 2
1. Utworzyć pliki ze stalymi zależnymi od instancji i dodać do GIT: fileadmin /typoscript/ constants/ constants_default.ts fileadmin /typoscript/ constants/ constants_default_local.ts fileadmin /typoscript/ constants/ constants_default_staging.ts fileadmin /typoscript/ constants/ constants_default_live.ts fileadmin /typoscript/ constants/ constants_local.ts fileadmin /typoscript/ constants/ constants_integration-1.ts fileadmin /typoscript/ constants/ constants_integration-n.ts fileadmin /typoscript/ constants/ constants_..........ts fileadmin /typoscript/ constants/ constants_beta.ts fileadmin /typoscript/ constants/ constants_prev.ts fileadmin /typoscript/ constants/ constants_backup.ts fileadmin /typoscript/ constants/ constants_live.ts
2. Utworzyć plik typo3conf/constants_local.ts w każdej z instancji, wyłączyć go z GIT i dodać jego includowanie w TYPO3 <INCLUDE_TYPOSCRIPT: source="FILE:typo3conf/constants_local.ts">
3. Dodać w nim includowanie pliku zależne od instancji <INCLUDE_TYPOSCRIPT: source="FILE:fileadmin/typoscript/constant/constants_default_local.ts"> <INCLUDE_TYPOSCRIPT: source="FILE:fileadmin/typoscript/constant/constants_local.ts">
Jak zmieniać stałe TS w zależności od instancji?METODA 2
WADY:1. Przy dużej liczbie stałych i instancji TYPO3 wzrasta ryzyko błędów.2. Brak śledzenia zmian z wykorzystaniem systemów wersjonowania.3. Brak automatycznej propagacji zmian z wykorzystaniem systemów wersjonowania.
1. Nie mamy określonego kontekstu na poziomie PHP.2. Nie uzyskamy stałych na niskim poziomie, kiedy nie ma jeszcze obiektu TSFE /realurl, eID, pliki ext_tables.php/3. Uzyskanie tych danych w BE wymaga sparsowania całego drzewa TS.4. W warunkach w stałych nie można używać stałych.
To nie zadziała w sekcji stałych: [globalString = IENV:HTTP_HOST = {$domains.poland}] || [globalVar = GP:L = 1] plugin.tx_solr.solr.path = {$plugin.tx_solr.solr.path.pl} [end]
PROPERTYMANAGER
1. Plik ze zmiennymi kontekstu wybierany automatycznie na podstawie kontekstu określonego w VHOST / .htaccess / PHP – zmniejszamy liczbę miejsc konfiguracji.
2. Zmienne dostępne w PHP i w Typoscript.
3. Możliwość korzystania w PHP ze zmiennych na niskim pozimie. (index.php / ext_localconf.php etc)
4. Głośna informacja jeżeli zmianna kontekstowa nie jest ustawiona dla kontekstu a są do niej odwołania.
5. Parsing TS jest cachowany. Usuwanie cachu – „Clear all cache”
6. Warunki ze „stałymi” w warunkach w sekcji CONSTANTS działają.
Po co jest propertymanager?
Przykładowa konfiguracja IW Extension Manager ustawiamy sciezkę do pliku głównego: files/resources/private/typosctipt/context/context_default.txt
config.tx_propertymanager {required = 1context {
default { email = [email protected]
overwriteAllEmails = [email protected]}
default_staging < .default
default_live < .default default_live {
email = [email protected] overwriteAllEmails = [email protected]
}
kontekst1 < .default_live kontekst1 {…......}
}}
<INCLUDE_TYPOSCRIPT: source="FILE:files/resources/private/typosctipt/context/context_local.txt"><INCLUDE_TYPOSCRIPT: source="FILE:files/resources/private/typosctipt/context/context_integration-1.ts"><INCLUDE_TYPOSCRIPT: source="FILE:files/resources/private/typosctipt/context/context_integration-2.ts"><INCLUDE_TYPOSCRIPT: source="FILE:files/resources/private/typosctipt/context/context_integration-3.ts">…<INCLUDE_TYPOSCRIPT: source="FILE:files/resources/private/typosctipt/context/context_beta.ts"><INCLUDE_TYPOSCRIPT: source="FILE:files/resources/private/typosctipt/context/context_beta.ts"><INCLUDE_TYPOSCRIPT: source="FILE:files/resources/private/typosctipt/context/context_34234234.ts"><INCLUDE_TYPOSCRIPT: source="FILE:files/resources/private/typosctipt/context/context_prev.ts"><INCLUDE_TYPOSCRIPT: source="FILE:files/resources/private/typosctipt/context/context_live.ts">
Przykładowa konfiguracja II
Przykładowa zawartość: files/resources/private/typosctipt/context/context_local.ts
config.tx_propertymanager {context {
local < .default_local
}}
Przykładowa konfiguracja IIIPrzykładowa zawartość: files/resources/private/typosctipt/context/context_live.ts
config.tx_propertymanager {context {
live < .default_livelive {
google.ga.disable = 0...
}}
}
Jak ustalić kontekst?1) VHOST
<VirtualHost 127.0.0.1:80>DocumentRoot "T:\workspace-typo3\projects\projekt - client1.loc"ServerName www.client1.locSetEnv CONTEXT_IDENTIFIER local</VirtualHost>
2) .htaccess
SetEnv CONTEXT_IDENTIFIER local_developer1
3) Ustawiając $GLOBALS['CONTEXT_IDENTIFIER'] w pliku wyłączonym z GIT a) w TYPO3 < 6.0 w pliku typo3conf/localconf_local.php i includowanym w typo3conf/localconf.php
b) w TYPO3 > 6.0 w pliku AdditionalConfiguration.php
Jak wykorzystać dane z kontekstów?W PHP:
$propertymanager = t3lib_div::makeInstance('tx_propertymanager_Manager');$domains = $propertymanager->getProperty('domains.');echo($domains['poland']);
W CONSTANTS z poniższą notacją:
general { email_1 = {@email} email_2 = {@tx_myextension->getValue('email')} otherValue = {@tx_myextension->getSomeValue()}}domains { poland = {@domains.poland} germany = {@domains.germany} …..}
[globalString = IENV:HTTP_HOST = {@domains.germany}] || [globalVar = GP:L = 2] plugin.tx_solr.solr.path = {@plugin.tx_solr.solr.path.de}[end]
W SETUP już standardowo używamy zwykłych CONSTANTSplugin.tx_ext { emailAdmin = {$email}}
Realurl?
KONFIGURACJA REALURL DLA DOMEN
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];$TYPO3_CONF_VARS['EXTCONF']['realurl']['beta.yyy.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com'];$TYPO3_CONF_VARS['EXTCONF']['realurl']['yyy-1.myagency.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com'];$TYPO3_CONF_VARS['EXTCONF']['realurl']['yyy-2.myagency.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com'];….….…..$TYPO3_CONF_VARS['EXTCONF']['realurl']['yyy.loc'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['www.yyy.com'];
unset($TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']);
include_once(PATH_site . '/typo3conf/ext/propertymanager/Classes/class.tx_propertymanager_Manager.php');
/** @var /* tx_propertymanager_Manager $propertymanager */ $propertymanager = t3lib_div::makeInstance('tx_propertymanager_Manager'); $domains = $propertymanager->getProperty('domains.'); foreach($domains as $domain) { $TYPO3_CONF_VARS['EXTCONF']['realurl'][$domain] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']; } unset($TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']);
RESTRICTFE
Wady autoryzacji .htaccess
1) długość autoryzacji to sesja Użytkownik zamknie przeglądarkę i musi autoryzować się raz jeszcze
2) żeby działała autoryzacja musimy zmienić plik vhosta lub htaccess. Do modyfikacji VHOSTa nie zawsze mamy dostęp a modyfikacja .htaccess wiąże się z jego wyłączeniem z GIT
Co może restrictfe?
Extension manager
Profil użytkownika
Aktywacja
W pliku typo3conf/localconf_local.php /out off git/ $TYPO3_CONF_VARS['EXTCONF']['restrictfe']['enable'] = '0';
Zalety
1) Długość autoryzacji ustawiana dowolnie Użytkownik autoryzuje się raz – ogląda wielokrotnie po zamknięciu / otwarciu przegladarki. Autozycacja trzymana w cookie, przy czym możemy wyczyścić po stronie TYPO3 autoryzację.
2) Strona powitalna nowej witryny Ponieważ template pojawiający się bez autoryzacji jest dowolny więc można przygotować stronę powitalną (Witamy! Już niedługo w tym miejscu będzie witryna naszej firmy ABC”). Użytkownicy, którzy zalogują się do TYPO3 w BE ekranu powitalnego nie zobaczą.
3) Brak autoryzacji dla określonych IP i headerów Są wtyczki do przegladarek/proxy, które ustawiają header do każdego requestu.
4) Nie trzeba modyfikować .htaccess Htaccess może pozostać w GIT.
5) Można wykorzysta na LIVE do blokady wersji językowych Witryna jest już LIVE, ale dodano nową wersję językową, którą trzeba przetłumaczyć. yyy.com/cz/ - bez blokady możliwość zindeksowania przez googla
6) Tylko jedno hasło do BE! User ma tyko hasło do BE – nie potrzebuje hasła do .htaccess
Połączenie PROPERTYMANAGER I RESTRICTFEWyłączenie widoku określonych domen językowych
include_once(PATH_site . '/typo3conf/ext/propertymanager/Classes/class.tx_propertymanager_Manager.php');
/** @var tx_propertymanager_Manager $propertymanager */$propertymanager = t3lib_div::makeInstance('tx_propertymanager_Manager');$domains = $propertymanager->getProperty('domains.');foreach($domains as $domain) { if( $_SERVER['HOST'] == $domain['url'] && $domain['restrictfe'])
$TYPO3_CONF_VARS['EXTCONF']['restrictfe']['enable'] = TRUE;}
Dziękuję za uwagę
Krystian Szymukowicz ([email protected])
http://typo3.org/extensions/repository/view/restrictfeRESTRICTFE