TYPO3 - optymalizacja pracy z instancjami

Post on 04-Aug-2015

174 views 7 download

Transcript of TYPO3 - optymalizacja pracy z instancjami

Optymalizacja pracy z instancjami

local / staging / production

Krystian Szymukowicz (k.szymukowicz@sourcebroket.net)

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 = my11@gmail.com}

general { preventIndexingByBots = 1 google.ga.disable = 1 email = my11@gmail.com}

general { preventIndexingByBots = 1 google.ga.disable = 1 email = my11@gmail.com}

general { preventIndexingByBots = 1 google.ga.disable = 1 email = my11@gmail.com}

general { preventIndexingByBots = 1 google.ga.disable = 1 email = my11@gmail.com search.disable = 1 search.indexing.disable = 1}

general { preventIndexingByBots = 1 google.ga.disable = 1 email = my11@gmail.com search.disable = 1 search.indexing.disable = 1}

general { preventIndexingByBots = 1 google.ga.disable = 1 email = my11@gmail.com search.disable = 1 search.indexing.disable = 1}

general { preventIndexingByBots = 1 google.ga.disable = 1 email = my11@gmail.com search.disable = 1 search.indexing.disable = 1}

general { preventIndexingByBots = 1 google.ga.disable = 1}

general { }

general { }

general { search.indexing.disable = 1}

[timestamp]

general { email = office@yyy.com}

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 = test.myagency@gmail.com overwriteAllEmails = test.myagency@gmail.com}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:

test.myagency+office_yyy.com@gmail.comEmail docelowy:

office@yyy.com

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 = test.myagency@gmail.com overwriteAllEmails = test.myagency@gmail.com

}

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 = test.myagency@gmail.com

overwriteAllEmails = test.myagency@gmail.com}

default_staging < .default

default_live < .default default_live {

email = test.myagency@yyy.com overwriteAllEmails = test.myagency@gmail.com

}

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 (k.szymukowicz@sourcebroker.net)

http://typo3.org/extensions/repository/view/restrictfeRESTRICTFE

k.szymukowicz@sourcebroker.netPROPERTYMANAGER