Page 1 of 1

[solved] Shop: Wie Sprach-Templates aktivieren?

Posted: Sun 28. Sep 2014, 20:17
by santscho
Betreibe phpwcms in den Sprachen DE, EN und FR. Dazu benutze ich diese Sprach-Umschaltung:

Code: Select all

<a href="index.php?home-d&lang=de" class="ym-button ym-xsmall">DE</a><a href="home-f&lang=fr.html" class="ym-button ym-xsmall">FR</a><a href="home-e&lang=en.html" class="ym-button ym-xsmall">EN</a>
Wie kann ich den Shop dazu bringen, die entsprechenden Shop-Templates zu verwenden (de.html, fr.html, en.html)?

Re: Shop: Wie Sprach-Templates aktivieren?

Posted: Sun 28. Sep 2014, 21:42
by update
wie wäre es mit der Änderung der Document Language? Schon probiert? :oops:

Re: Shop: Wie Sprach-Templates aktivieren?

Posted: Sun 28. Sep 2014, 21:45
by santscho
Verstehe nicht was Du meinst, Claus. :?:

EDIT:
Meinst Du das...?

Code: Select all

<html lang="de">
EDIT 2:
Ja, wenn ich in der conf.inc.php die sprache auf "en" wechsle, wird der Shop in Englisch dargestellt. Das heisst also, dass phpwcms bei einem Sprachwechsel auch die doc-Language dynamisch umstellen sollte? Aber wie?

Re: Shop: Wie Sprach-Templates aktivieren?

Posted: Mon 29. Sep 2014, 08:25
by Oliver Georgi
So mittels Frontend Init:

Code: Select all

<?php

// Define some general language specifics

/**
 * language setting based on site tree
 * $phpwcms['allowed_lang'] = array('en', 'de', 'fr', 'es');
 * - DE
 * - EN
 * - FR
 * - ES
 * ...
 */
$phpwcms['id_lang'] = array(
	//	ID		LANG
		1	=>	'en',
		2	=>	'de' //,
	//	3	=>	'fr' ...
);
$phpwcms['lang_id'] = array_flip($phpwcms['id_lang']);

// Redirect to default language entry based on browser
if(!isset($LEVEL_ID[1])) {

	// try to link user to correct language
	$phpwcms['DOCTYPE_LANG'] = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) : $phpwcms['default_lang'];
	if(!isset($phpwcms['lang_id'][$phpwcms['DOCTYPE_LANG']])) {
		$phpwcms['DOCTYPE_LANG'] = $phpwcms['default_lang'];
	}

	// Get current alias
	$pagelink = empty($content['struct'][ $phpwcms['lang_id'][$phpwcms['DOCTYPE_LANG']] ]['acat_alias']) ? 'id='.$phpwcms['lang_id'][$phpwcms['DOCTYPE_LANG']] : $content['struct'][ $phpwcms['lang_id'][$phpwcms['DOCTYPE_LANG']] ]['acat_alias'];
	$pagelink = $phpwcms["rewrite_url"] ? $pagelink . PHPWCMS_REWRITE_EXT : 'index.php?' . $pagelink;

	// Redirect
	headerRedirect(PHPWCMS_URL . $pagelink, 301);

} elseif(isset($phpwcms['id_lang'][ $LEVEL_ID[1] ])) {

	$phpwcms['DOCTYPE_LANG'] = $phpwcms['default_lang'] = $phpwcms['id_lang'][ $LEVEL_ID[1] ];

} else {

	$phpwcms['DOCTYPE_LANG'] = $phpwcms['default_lang'];

}


?>

Re: Shop: Wie Sprach-Templates aktivieren?

Posted: Mon 29. Sep 2014, 10:10
by santscho
Hallo Oliver

Ich habe folgende Struktur:
-------------
ID1 = DEUTSCH
ID2 = FRANCAIS
ID3 = ENGLISH
ID4 = SHOP -->> Hier müssen die Shop-Sprachtemplates gezogen werden
-------------

Sobald ich mich in der Strukturebene 1, 2 oder 3 befinde, wird im Browser schön gerendert: <html lang="de">, <html lang="fr"> oder <html lang="en">. Wunderbar!

Doch der Shop (ID4) wird immer als <html lang="de"> ausgegeben. Dies ist die Standard-Definition in der conf.inc.php. Der Shop nimmt jetzt immer das "de.html"


Settings der conf.inc.php:

Code: Select all

$phpwcms['allowed_lang']      = array('de','fr','en');
$phpwcms['DOCTYPE_LANG']      = ' ';
$phpwcms['default_lang']      = 'de';
Dein Frontend Init Script habe ich angepasst:

Code: Select all

$phpwcms['id_lang'] = array(
   //   ID      LANG
	1   =>   'de',
	2   =>   'fr',
	3   =>   'en'
);
Für den Sprachenwechsel habe ich das folgende Frontend-Renderscript im Einsatz:

Code: Select all

<?php

// ----------------------------------------------------------------
// obligate check for phpwcms constants
if (!defined('PHPWCMS_ROOT')) {
   die("You Cannot Access This Script Directly, Have a Nice Day.");
}
// ----------------------------------------------------------------

	
// set allowed languages
// set $phpwcms['allowed_lang'] in conf.inc.php
// $phpwcms['allowed_lang']      = array('en', 'de', 'fr', 'es');
$language_default			= 'de';
$language_current			= $language_default;
$language_cookie_duration	= 60*60*24*365; // 1 year

if(isset($_GET['lang'])) {
	$language_current = strtolower( substr($_GET['lang'], 0, 2) );
	$_SESSION['phpwcmsFrontendLanguage'] = $language_current;
	setcookie('phpwcmsFrontendLanguage', $language_current, time()+$language_cookie_duration, '/' );
} elseif(isset($_SESSION['phpwcmsFrontendLanguage'])) {
	$language_current	= $_SESSION['phpwcmsFrontendLanguage'];
} elseif(isset($_COOKIE['phpwcmsFrontendLanguage'])) {
	$language_current	= $_COOKIE['phpwcmsFrontendLanguage'];
}
if(!in_array($language_current, $phpwcms['allowed_lang'])) {
	$language_current	= $language_default;
	$_SESSION['phpwcmsFrontendLanguage'] = $language_current;
	setcookie('phpwcmsFrontendLanguage', $language_current, time()+$language_cookie_duration, '/' );
}

// init language replacements
$language_regexp 		= array( 'search' => array(), 'replace' => array() );

// set all language replacements now
foreach($phpwcms['allowed_lang'] as $lang) {

	$language_regexp['search'][$lang]	= '/\['.$lang.'\](.*?)\[\/'.$lang.'\]/is';
	$language_regexp['replace'][$lang]	= $lang == $language_current ? '$1' : '';

}

$content['all']			= preg_replace($language_regexp['search'], $language_regexp['replace'], $content['all']);
$content["pagetitle"]	= preg_replace($language_regexp['search'], $language_regexp['replace'], $content["pagetitle"]);

?>
Sollte ich grundsätzlich Sprachen anders managen als ich das bisher gemacht habe? Bisher habe ich ja 3 Sprachbäume im Einsatz. Ich habe gesehen, dass man für Seitenstruktur und Artikel auch Sprachen definieren kann. Und im Shop kann man auch die Produkte den Sprachen zuweisen. Was kannst Du mir empfehlen?

Re: Shop: Wie Sprach-Templates aktivieren?

Posted: Mon 29. Sep 2014, 10:29
by Oliver Georgi
Der Shop sollte nicht separat geführt werden, sondern immer einen Bereich innerhalb der jeweiligen Sprache haben. Denn jede Sprache hat separaten Warenkorb usw.

Re: Shop: Wie Sprach-Templates aktivieren?

Posted: Mon 29. Sep 2014, 10:33
by santscho
Ja, Oliver! Ich hatte gerade in den Shoptemplates gesehen, dass man Shop-ID und auch die Warenkorb-ID im Shop-Template individuell definieren kann:

Code: Select all

; Overwrites the backend settings
; shop_url =
; cart_url =
Also...
1. Shop-Ebene in DE, FR und EN
2. Shop-Templates für DE, FR und EN anpassen (mit den jeweiligen Anpassungen der shop_url und cart_url)

Werde das mal so ausprobieren.

Re: [solved] Shop: Wie Sprach-Templates aktivieren?

Posted: Mon 29. Sep 2014, 11:59
by santscho
Jeder Sprachbaum hat jetzt eine eigene Shop-Kategorie. Die Shop-Templates werden jetzt problemlos übernommen. Danke!