Page 1 of 1

[solved] Shopmodul mit lang_replace.php in 1.7.9

Posted: Thu 20. Aug 2015, 13:54
by hal
Hallo,

Ich hatte eine Seite, in der ich den shop per lang_replace.php zweisprachig gestaltet habe (in 2013 - v1.6.5).

Nach dem Upgrade funktioniert das plötzlich nicht mehr. Die Werte in der config sind korrekt gesetzt - der Rest der Seite arbeitet auch perfekt in zweisprachig, auch das Menü in dem template, innerhalb dessen der shop angezeigt wird.

Nur alles, was mit dem shop selbst zu tun hat, Artikel, angepasstes de.html template läuft nicht mehr - es werden immer beide Texte angezeigt, meist auch noch mit tags.

Vielleicht weiss jemand Rat - ich wäre sehr dankbar...

Re: Shopmodul mit lang_replace.php in 1.7.9

Posted: Thu 20. Aug 2015, 14:11
by nameless1
das lang_replace greift bevor der shop ran kommt. zeig mal dein lang_replace code ober probiere gleich mal den aktuellen.

Re: Shopmodul mit lang_replace.php in 1.7.9

Posted: Thu 20. Aug 2015, 14:42
by hal
Lang_replace code?

Meinst Du die Datei selber - da verwende ich die aus 1.7.9 - ist aber eh die gleiche wie die zuvor...

Oder den code in den templates?

[de]<a href="[PHP]echo rel_url(array('lang'=>'en'))[/PHP]" class="lang-de">english</a>[/de]
[en]<a href="[PHP]echo rel_url(array('lang'=>'de'))[/PHP]" class="lang-en">deutsch</a>[/en]

So hatte / hab ich den im template - und das hat bisher funktioniert.

Oder meintest Du ganz was anderes?

Re: Shopmodul mit lang_replace.php in 1.7.9

Posted: Thu 20. Aug 2015, 15:10
by nameless1
die php funktion in

Code: Select all

template\inc_script\frontend_render\lang_replace.php
ist für die ersetzung zuständig und enthält wahrscheinlich das corpus delicti

Re: Shopmodul mit lang_replace.php in 1.7.9

Posted: Thu 20. Aug 2015, 15:15
by hal
Das ist die:

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			= 'en';
$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"]);

?>

Re: Shopmodul mit lang_replace.php in 1.7.9

Posted: Thu 20. Aug 2015, 17:55
by nameless1
ich habe es hinbekomme, komme aber an den shop nicht mehr ran, und bekomme es nicht mehr erinnert. ich würde das hier als grundlage nehmen um erstmal die replace funktionalität nochmal durchlaufen zu lassen. sollte quick and dirty eine lösung liefern

Re: Shopmodul mit lang_replace.php in 1.7.9

Posted: Thu 20. Aug 2015, 18:49
by hal
Vielen Dank - wenn das auch nicht die Lösung war, so hat es mit doch draufgebracht.
Ich Depp habs selber schon mal hinbekommen - und vergessen.

Man fügt einfach ans Ende der frontend_render.php folgende zwei Zeilen (vor dem ?>) ein:

Code: Select all

$content['all']         = preg_replace($language_regexp['search'], $language_regexp['replace'], $content['all']);
$content["pagetitle"]   = preg_replace($language_regexp['search'], $language_regexp['replace'], $content["pagetitle"]);
Und schon gehts - habe ich wiedergefunden, weil ich nochmal dem nachgegangen bin, was in Deinem Link stand...