Noch kein Mitglied? Hier registrieren, um das Forum zu nutzen, News einzureichen, zu kommentieren oder Seiten in der Galerie einzustellen.
Vanilla 1.1.2 Forum von Lussumo. Weitere Informationen: Dokumentation, Community.
1 bis 42 von 42
Dokumentname: english / alias: gb / Typ: Ordner / ID: (1)
|-> Dokumentname: Welcome / ID: (2)
Dokumentname: deutsch / alias: de / Typ: Ordner / ID: (3)
|-> Dokumentname: Willkommen / ID: (4)
<?php
$debugMsg = '$language is: '.$language.'<br />';
$debugMsg = 'LanguageID from cookie: '.$_COOKIE['LanguageID'].'<br />';
$params['topLevel'] =1;
// Regular Page
// find Ultimate Parent of this page. The alias of this page sets the language variable
if ($modx->config['error_page'] != $modx->documentIdentifier){
$up = $modx->runSnippet("UltimateParent", $params);
$tv = $modx->getTemplateVar('alias', "", $up);
$language = $tv['value'];
setcookie("Language",$language,time()+604800, "/", "", 0);
// LanguageID is needed for the 404 error page, to show the sitemap in the actual language
setcookie("LanguageID",$up,time()+604800, "/", "", 0);
$modx->setPlaceholder('LanguageID',$up);
$modx->setPlaceholder('language',$language);
}
else{
// If Error Page
$debugMsg .= '<p>Error Page Start<br />';
if ( !empty ($_COOKIE['LanguageID'])){
$debugMsg .='$language is empty, try to read from cookie';
$language = $_COOKIE['Language'];
$LanguageID = $_COOKIE['LanguageID'];
$params['id'] = $LanguageID;
$up = $modx->runSnippet("UltimateParent", $params);
//setcookie("LanguageID",$up,time()+604800, "/", "", 0);
$modx->setPlaceholder('LanguageID',$up);
}
else {
$debugMsg .= '<p>LanguageID Cookie is empty, get ID from Site start</p>'.$modx->config['site_start'];
$params['id'] = $modx->config['site_start'];
$up = $modx->runSnippet("UltimateParent", $params);
//setcookie("LanguageID",$up,time()+604800, "/", "", 0);
$modx->setPlaceholder('LanguageID',$up);
}
}
$debugMsg .= 'LanguageID at finish: [+LanguageID+]<br />';
$debugMsg .= '$language: '.$language.'<br />';
$modx->setPlaceholder('debugMsg', $debugMsg);
//echo $debugMsg;
$modx->setPlaceholder('language', $language);
if (file_exists("assets/languages/$language.php")) include_once "assets/languages/$language.php";?>
<?php
$langMenu = $modx->runSnippet(
"Wayfinder",
array(
"startId" => "0",
"level"=>"1",
"textOfLinks"=>"alias",
"rowTpl"=>'flagAndLanguage',
"outerTpl"=>'LanguageChooser'
)
);
echo $langMenu;
?>
<?php
if (! function_exists('getdocs_with_same_values')){
function getdocs_with_same_values($id = 'default', $field = 'description')
{
global $modx;
// Initialize ids
$ids = array ();
if ($id == 'default')
{
$id = $modx->documentIdentifier;
}
$table = $modx->getFullTableName('site_tmplvars');
$result = $modx->db->select('id', $table, ' name = "'.$field.'"');
$array_result = $modx->db->makeArray($result);
if (count($array_result) > 0)
{
$tvid = $array_result[0]['id'];
$table = $modx->getFullTableName('site_tmplvar_contentvalues');
$result = $modx->db->select('*', $table, 'contentid = "'.$id.'" and tmplvarid = "'.$tvid.'"');
$array_result = $modx->db->makeArray($result);
$fieldvalue = $array_result[0]['value'];
$result = $modx->db->select('contentid', $table, 'value = "'.$fieldvalue.'"');
$array_result = $modx->db->makeArray($result);
foreach ($array_result as $value)
{
$ids[] = $value['contentid'];
}
}
else
{
$table = $modx->getFullTableName('site_content');
$result = $modx->db->select($field, $table, ' id = "'.$id.'"');
$array_result = $modx->db->makeArray($result);
$fieldvalue = $array_result[0][$field];
$table = $modx->getFullTableName('site_content');
$result = $modx->db->select($field, $table, ' id = "'.$id.'"');
$array_result = $modx->db->makeArray($result);
$fieldvalue = $array_result[0][$field];
$result = $modx->db->select('id', $table, $field.' = "'.$fieldvalue.'"');
$array_result = $modx->db->makeArray($result);
foreach ($array_result as $value)
{
$ids[] = $value['id'];
}
}
return $ids;
}
}
$pages = getdocs_with_same_values('default','languageIdentifier');
$langFolder = $modx->getDocumentObject('id', $id);
$langFolderID = $langFolder['id'];
$langFolderAlias = $langFolder['alias'];
// set theURL to the root of the language
$theURL = $modx->makeURL($id,'','','full');
foreach ($pages as $page){
//echo $page;
// Now check if the id of the $value is a child of the UltimateParent
$UltimateParent = $modx->runSnippet('UltimateParent', array('id' => $page));
//echo "\n".$UltimateParent." ".$langFolderID;
//$checks[$counter]['id'] = $value['id'];
// if the UltimateParent is equal to to folderID make link to the actual page in the other language
if ($UltimateParent == $langFolderID) {
$theURL = $modx->makeURL($page,'','','full');
}
}
return $theURL;
?>
<li class="[+wf.classnames+]"><a href="[[link_to_language?id=`[+wf.docid+]`&link=`[+wf.link+]`&actualid=`[*id*]`]]"><img src="[(base_url)]assets/images/flags/gif/[+wf.linktext+].gif" alt="[+wf.linktext+]" /> [+wf.title+]</a></li>
<ul [+wf.classes+] id="sprachwahl">
[+wf.wrapper+]
</ul>
<div id="languageselection">
[[LanguageChooser]]
</div>
<div id="navigation">
[!Wayfinder? &startId=`[+LanguageID+]`!]
</div>
$_lang['deinname'] = "Dein Name";
<?php
function setPrompts(&$fields) {
global $_lang;
$fields['yourname'] = $_lang['yourname'];
return true;
}
?>
[+validationmessage+]
<form method="post" action="[~[*id*]~]">
<input type="hidden" name="formid" value="feedbackForm" />
<label for="cf[+yourname+]">[+yourname+]: </label>
<input name="Your Name" id="cf[+yourname+]" class="required text" type="text" eform="[+deinname+]::1:" />
[[setPrompts]]
[!eForm? &formid=`feedbackForm` &to=`my@email.com <mailto:my@email.com>`&eFormOnBeforeFormMerge=`setPrompts` &language=`german` &subject=`Web site feedback`!]
[[language]]
[+errorpage+]
[!Wayfinder? &startId=`[+LanguageID+]` &showDescription=`1`!]
<?php
$modx->setPlaceholder("errorpage",'404 – Seite nicht gefunden');
?>
keine händische Verküpfung der Seiten notwendig, da alles über identische Aliasnamen läuftUnd wenn es doppelte Aliase gibt? sowas wie
keine händische Verküpfung der Seiten notwendig, da alles über identische Aliasnamen läuft
@Marc: Vielleicht erwächst ja aus der Versionierung von Stefan ein Ansatz zur Mehrsprachigkeit.
@Marc: Das hast du etwas verkehrt verstanden. Nachdem du deine erste Sprache fertiggestellt hast, duplizierst du sie einfach und nennst sie dann zum Beispiel um in "English". Die Aliase bleiben bei den Seiten erhalten.
Ja das Thema sprechende URL habe ich etwas vernachlässigt. Meines Erachtens nach, ist das aber nicht ganz so schlimm, das die URLs nicht übersetzt werden. Für die Suchmaschinen spielt es nicht die größte Rolle dass die URL übersetzt wird, und die Lesbarkeit für den User ist zumindest in seiner nativen Sprache immer noch gegeben, bei den anderen Sprachen sieht der User, dass es Wörter sind und nicht irgendein kryptischer URL.
Die meisten anderen Multilingualen Lösungen basieren darauf, dass du in irgendeine Templatevariable schreibtst, welche ID deine aktuelle Seite in den anderen Sprachen hat. Zum Beispiel so: en:10,fr:20,es:34.
function getdocs_with_same_values($id = 'default', $field = 'description')
{
global $modx;
// Initialize ids
$ids = array ();
if ($id == 'default')
{
$id = $modx->documentIdentifier;
}
$table = $modx->getFullTableName('site_tmplvars');
$result = $modx->db->select('id', $table, ' name = "'.$field.'"');
$array_result = $modx->db->makeArray($result);
if (count($array_result) > 0)
{
$tvid = $array_result[0]['id'];
$table = $modx->getFullTableName('site_tmplvar_contentvalues');
$result = $modx->db->select('*', $table, 'contentid = "'.$id.'" and tmplvarid = "'.$tvid.'"');
$array_result = $modx->db->makeArray($result);
$fieldvalue = $array_result[0]['value'];
$result = $modx->db->select('contentid', $table, 'value = "'.$fieldvalue.'"');
$array_result = $modx->db->makeArray($result);
foreach ($array_result as $value)
{
$ids[] = $value['contentid'];
}
}
else
{
$table = $modx->getFullTableName('site_content');
$result = $modx->db->select($field, $table, ' id = "'.$id.'"');
$array_result = $modx->db->makeArray($result);
$fieldvalue = $array_result[0][$field];
$table = $modx->getFullTableName('site_content');
$result = $modx->db->select($field, $table, ' id = "'.$id.'"');
$array_result = $modx->db->makeArray($result);
$fieldvalue = $array_result[0][$field];
$result = $modx->db->select('id', $table, $field.' = "'.$fieldvalue.'"');
$array_result = $modx->db->makeArray($result);
foreach ($array_result as $value)
{
$ids[] = $value['id'];
}
}
return $ids;
}
Freue mich natürlich über eure Rückmeldungen.
...
<div id="languageselection"> LanguageID from cookie: 24<br />LanguageID at finish: 27<br />$language: fr<br /></div>
[!Wayfinder? &startId=`[+LanguageID+]`!] ... funktioniert und gibt mir, wie vorgesehen, einen Baum mit Links zu den im Menü enthaltenen Seiten einer Sprache aus.
[!Wayfinder? &startId=`0` &level=`1`!] ... aufzurufen, gibt es im Browser keine Ausgabe mehr. ???
steckt wie immer im Detail.
$_lang["email"] = "* E-Mail:";bekam ich immer eine Fehlermeldung: Ungültige oder unsichere Einträge wurden in Ihrem Formular entdeckt. Also den Inhalt der Variable "ef_mail_abuse_error". Und zwar schon beim Aufruf von [+email+] als Bezeichner für das Eingabefeld
<label for="[+email+]">[+email+] ???
$_lang["emailadresse"] = "* E-Mail:";... und jetzt gibt es keine Fehlermeldung mehr.
[[setPrompts]]
[!eForm? &formid=`ContactForm` &subject=`[+betreff+]` &to=`info@chris-ka.com` &ccsender=`1` &tpl=`ContactForm` &report=`ContactFormReport` &invalidClass=`invalidValue` &requiredClass=`requiredValue` &cssStyle=`ContactStyles` &gotoid=`13` &eFormOnBeforeFormMerge=`setPrompts` !] ... dann zeigt es mir auf der deutschen Kontaktseite das Formular mit allen Einträgen sauber an, aber auf der französischen Seite zeigt es mir kein Formular an, sondern gibt mir nur den Code für den Aufruf von setPrompts und das Formular aus.
&language = 'german' ..., wie im Tutorial beschrieben, einbaue, bzw. mit 'francais' auf der französischen Kontaktseite, dann wird im Browser zwar in beiden Sprachen das Kontaktformular aufgebaut, aber ohne die Einträge, die in den Sprachfiles des eform-Snippets festgelegt sind.
[!setPrompts!]
#include other language file if set.
$form_language = isset($language)?$language:$modx->config['manager_language'];
if($form_language!="english" && $form_language!='') {
if(file_exists($snipPath ."lang/".$form_language.".inc.php"))
include_once $snipPath ."lang/".$form_language.".inc.php";
else
if( $isDebug ) $debugText .= "<strong>Language file '$form_language.inc.php' not found!</strong><br />"; //always in english!
}
eigentlich ganz gutnicht nur "eigentlich"
Ressources unter "seiten" / "pages" sollen in der Fußzeile auftauchen. Aber wie? Steh gerade aufm Schlauch.
den schlagenden Beweis: der erste link, auf den ich klickte, brachte bei Englisch 404...
@Gertrud: YAMS ist auf jeden Fall der "bessere" Ansatz, da er eine echte Mehrsprachigkeit bringt. Allerdings muss beachtet werden:
- Die Seiten sollten 1:1 übersetzt werden, für je nach Sprache individuelle Strukturen ist YAMS weniger geeignet/nicht gedacht.
- Kompatibilität mit folgenden Snippets ist eigentlich gewährleistet (wenn auch mit Arbeit verbunden): Ditto, Wayfinder, eForm, Maxigallery.
1 bis 42 von 42