Page 1 of 2
Probleme mit NAV_LIST_UL, Servervariable
Posted: Mon 12. Dec 2011, 15:01
by littleredhood
Hallo,
Ich bin ein Anfänger kurz vor dem Verzweifeln :-/ Für euch ist das sicher ziemlich easy.
Also: meine Startseite soll zweisprachig verzweigen
de: index_de
en: index_en
Nun möchte ich, dass alle Menülinks - habe ein Menü mit {NAV_LIST_UL:F,ID,,act_path,active} - ein _de bzw. _en angehängt bekommen.
Default wäre immer das _de.
(Sinn dahinter ist, dass der Shop auch mehrsprachig werden soll und ich über den Link die Sprache übergeben will.)
Wie kann ich eine Servervariable setzen und wieder abrufen und wie kann ich das Menü modifizieren?
1000 Dank!
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Mon 12. Dec 2011, 20:53
by flip-flop
Hi,
das hier hast du gelesen?
Multilingual/Multidomain
Du verwendest dazu i.d.R. zwei Templates, eins für den DE- und eins für de EN Teil.
... und ich über den Link die Sprache übergeben ...
Möchtest du die Sprache per GET in der URL übergeben?
Wie kann ich eine Servervariable setzen und wieder abrufen ...
Innerhalb von phpwcms oder allgemein?
... wie kann ich das Menü modifizieren
Was möchtest du am Menü modifizieren?
Knut
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 10:10
by littleredhood
Also, um es verständlicher zu machen.
Meine Startseite soll zweisprachig verzweigen
de: index_de
en: index_en
in zwei verschiedene Sprachbäume. Das ist kein Problem.
Der Shop wird beispielsweise bisher aufgerufen mit /index.php?shop
In Zukunft wünsche ich den Aufruf mit /index.php?shop&de oder /index.php?shop&en..
Die Navigation läuft allerdings nicht über direkte Links, sondern über NAV_LIST_UL.
Wie kann ich den Shop-Link bzw. alle Links automatisch modifizieren, so dass _en oder _de angehängt werden?
Ziel ist das hier:
http://forum.phpwcms.org/viewtopic.php?f=10&t=18191
scheitert aber an den Fragen im 1. Post.
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 10:13
by littleredhood
Ich nehme an, die Servervariable ist eher eine Sessionvariable?
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 10:17
by juergen
Hallo
der Shop erkennt das zunächst mal nicht! Du musst die Routine die das macht nochmal inkludieren oder kopieren und in den shop Bibliotheken einlagern. Dann hast du allerdings nur die Spracherkennung für den Content und keine Links, Währungen und all solche Sachen verändert. Das ist ein größeres Vorhaben.
Ich habe sowas mal gemacht und mich dann dazu entschieden Magento das phpwcms Template überzustülpen
Ging schneller !
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 10:47
by littleredhood
Ja, aber wie könnte ich das umsetzen?
Ich muss dem Shop ja "nur" die Sprachkennung übergeben. Aber wie? irgendeinen Weg wird es ja wohl geben?
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 13:07
by juergen
Klar, hat doch Knut oben schon erwähnt, per zB GET Variable in der SHOP-URL
Das muss mit isset() und anderen Methoden sicherheitstechnisch abgedichtet werden, man sollte also wissen was man tut. Beschreiben lässt sich das ganze Vorgehen nicht bis ins kleinstze Detail, das würde Stunden dauern.
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 13:39
by flip-flop
...sicherheitstechnisch abgedichtet werden, man sollte also wissen was man tut.
Deshalb ist das auch nirgendwo beschrieben, denn jede Anwendungsfall ist anders gelagert und verlangt unterschiedliche Betrachtungswinkel was die Sicherheit angeht.
Knut
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 13:57
by update
Wenn ich in der Datei frontend.render.php des shop-moduls Folgendes unten einfüge (gaaanz unten, vor dem schließenden ?> )
Code: Select all
//language replacement copied/added RCS
//$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, 5) );
$_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"]);
?>
dann habe ich doch auch das shop-menu zweisprachig...
Und weil das per Cookie fixiert wird, bleibt die Sprache auch erhalten...
...wenn ich mich nicht irre

Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 16:04
by littleredhood
Claus, das liest sich toll.
Und wie setze ich die Variable SESSION['phpwcmsFrontendLanguage']?
Bin leider echt noch Anfänger .-/
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 16:12
by Cipolla
littleredhood wrote:Claus, das liest sich toll.
Und wie setze ich die Variable SESSION['phpwcmsFrontendLanguage']?
Bin leider echt noch Anfänger .-/
Die brauchst du doch nicht setzen, die setzt das script sobald in der URL die Variable "lang" gesetzt wird, oder ein vorhandener cookie eingelesen wird.
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 16:21
by update
littleredhood wrote:Ziel ist das hier: viewtopic.php?f=10&t=18191
scheitert aber an den Fragen im 1. Post.

Hab' ich glatt überlesen! In dem Thread steht es doch piekfein beschrieben, wie das geht. Hatte mich vorhin kurzsichtig und vorschnell nur auf das nahe Liegende fixiert.... Lies das noch mal, dann wird Dir das schon klar werden.
What shall I say: Du endest unweigerlich mit einem zwei(mehr-)sprachigen Shop

Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 21:19
by littleredhood
Schon mal vielen Dank!
Jetzt noch die Masterfrage:
Wie bringe ich meine Navigation NAV_LIST_UL dazu, ?lang=de oder ?lang =en anzuhängen?
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Tue 13. Dec 2011, 21:30
by update
Das geht dann ganz von alleine, wenn Du
http://forum.phpwcms.org/viewtopic.php?f=10&t=18191 durchgeackert hast!
In diesem Tutorial möchte ich mein CMS für zwei Sprachen vorbereiten. Dafür muss man ein paar Modifikationen in den core files des shops und in der Konfiguration von phpwcms vornehmen.
Re: Probleme mit NAV_LIST_UL, Servervariable
Posted: Wed 14. Dec 2011, 02:07
by flip-flop
Wie bringe ich meine Navigation NAV_LIST_UL dazu, ?lang=de oder ?lang =en anzuhängen?
Auf die Schnelle ohne es großartig getestet zu haben:
Im Template die Navigation markieren um mit dem Script gezielt in der Navigation suchen zu können:
Code: Select all
<!--NAVI01_START-->{NAV_LIST_UL:........}<!--NAVI01_END-->
Datei: template/inc_script/frontend_render/rt_inject_lang_into_nlu.php
Code: Select all
<?php
/**
* *****************************************************************************
* Expand the links in NAV_LIST_UL with a language tag.
* E.g.: index.php?category01&lang=EN
* Erweitert die Links der NAV_LIST_UL mit einem Sprach TAG
* Z. Bsp.: index.php?category02&lang=DE
*
* V1.0 14.12.11 K.Heermann (flip-flop)
*
* - The navi area to be searched is marked in the template with:
* - Der Navigationsbereich in dem gesucht werden soll wir gekennzeichnet durch:
* Wrapper: <!--NAVI01_START-->{NAV_LIST_UL:P,0....}<!--NAVI01_END-->
*
* - Set the base category for each language in script in "Custom var:".
* - Setzen der Basiskategorie fuer jede Sprache im Script in "Custom var:".
*
* Each link in the navigation will be enhanced when the base ID is available.
* Jeder Link in der Navigation wird erweitert wenn die Basis-ID vorhnaden ist.
*
* *****************************************************************************
*/
// ----------------------------------------------------------------------------
// obligate check for phpwcms constants
if (!defined('PHPWCMS_ROOT')) {
die("You Cannot Access This Script Directly, Have a Nice Day.");}
// ----------------------------------------------------------------------------
if (strpos($content['all'], '<!--NAVI01_START-->')) { // Wrapper availabe/vorhanden?
// Catch the NAVI01 area // Den Navigationsbereich ausschneiden umd abholen
preg_match_all('/\<!--NAVI01_START--\>(.*?)\<!--NAVI01_END--\>/ism',$content['all'], $navi);
if ($navi[1][0]) { // is there any content? // Ist Inhahlt vorhanden?
$lang = '';
$de_root = 1; // Custom var: root category id language DE // Basiskategorie-ID fuer DE
$en_root = 7; // Cuatom var: root category id language EN // Basiskategorie-ID fuer EN
// assign language // Sprache zuweisen
if (isset($GLOBALS['LEVEL_ID'][1]) AND $GLOBALS['LEVEL_ID'][1] == $de_root) $lang = 'DE';
elseif (isset($GLOBALS['LEVEL_ID'][1]) AND $GLOBALS['LEVEL_ID'][1] == $en_root) $lang = 'EN';
if (!empty($lang)) { // is a language set? // Sprachzuweisung vorhanden?
// rewrite all links // Aendere alle Links
if ($phpwcms['rewrite_url']) // rewrite set to .phtml? // Wird die URL umgeschrieben nach .phtml?
$navi[1][0] = preg_replace('/\<a href="(.*?).phtml"(.*?)/','<a href="$1&lang='.$lang.'.phtml"$2',$navi[1][0]);
else //rewrite not set // Kein Umschreiben
$navi[1][0] = preg_replace('/\<a href="index.php\?(.*?)"(.*?)/','<a href="index.php?$1&lang='.$lang.'"$2',$navi[1][0]);
}
// Insert back into html source // Fuege den geaenderten Inhalt an die alte Postion ein
$content['all'] = preg_replace('/\<!--NAVI01_START--\>(.*?)\<!--NAVI01_END--\>/ism',$navi[1][0],$content['all']);
}
}
// ----------------------------------------------------------------------------
?>
Wenn der Ordner frontend_render vom System abgearbeitet wird, ist die Seite komplett gerendert. An dieser Stelle können wir nun Veränderungen vornehmen:
Die Navi wird einfach mit einem frontend_render Script ausgeschnitten, bearbeitet und wieder an der alten Stelle eingesetzt.
Als Markierung für das Ausschneiden der NAIV (Wrapper) dienen die beiden Kommentare
Code: Select all
<!--NAVI01_START-->{NAV_LIST_UL:.......}<!--NAVI01_END-->
Im Script in
Code: Select all
$de_root = 1; // Custom var: root id language DE
$en_root = 7; // Cuatom var: root id language EN
werden die IDs der Basisebene der jeweiligen Sprache eingetragen.
Knut