Comparing revisions for MultiLanguageMenus

Additions:
'<input type="button" value="Cancel" onClick="history.back();" style="width: 120px" /><p>
Deletions:
'<input type="button" value="Cancel" onClick="history.back();" style="width: 120px" /><p> </p>';
print $this->FormOpen("","","post");
print $formdelete;
print $this->FormClose();
case "Confirm Deletion":
$this->DeleteMenu($_POST["name"]);
echo $this->Format("<<**Thanks!** --- Menu \"".$_POST["name"]."\" has been deleted<<::c:: --- ");
case "Rename Menu":
echo $this->Format("<<**Sorry!** --- A menu named \"".$_POST["newname"]."\" already exists. --- Please choose another name<<::c:: --- --- ");
echo $this->Format("<<**Confirmation required**<<::c:: --- Do you really want to rename **".$_POST["name"]."** as **".$_POST["newname"]."**? --- --- ");
$formrename = '<input type="hidden" name="oldname" value="'.$_POST["name"].'" />'.
'<input type="hidden" name="newname" value="'.$_POST["newname"].'" />'.
'<input type="submit" name="operation" value="Confirm Rename" style="width: 120px" accesskey="s" />'.
'<input type="button" value="Cancel" onClick="history.back();" style="width: 120px" /><p> </p>';
print $this->FormOpen("","","post");
print $formrename;
print $this->FormClose();
case "Confirm Rename":
$this->RenameMenu($_POST["oldname"], $_POST["newname"]);
echo $this->Format("<<**Thanks!** --- Menu has been renamed as \"".$_POST["newname"]."\"<<::c:: --- --- ");
case "Update Menu":
$this->SaveMenu($_POST["name"], $_POST["lng1"], $_POST["lng2"], $_POST["lng3"],
$this->TrimMenu($_POST["content"]),
$this->TrimMenu($_POST["content2"]),
$this->TrimMenu($_POST["content3"]));
echo $this->Format("<<**Menu configuration stored** --- Thanks for updating \"".$_POST["name"]."\"!<<::c:: --- --- ");
}
// load stored menus and print menu forms
echo $this->Format('Please enter menu items on separate lines. --- You can either use //""CamelCase"" links// like ##""PageIndex""## --- or //forced links// like: ##""[[http://www.mydomain.com External Link]]""## --- --- --- ');
$allmenus = $this->LoadAllMenus();
foreach ($allmenus as $item) {
$formarray[$item["name"]] = 'Menu name: <strong>'.$item["name"].'</strong><br />'.
'<input type="hidden" name="name" value="'.$item["name"].'" />'.
'<table><tr>'.
'<td>language 1</td><td>language 2</td><td>language 3</td>'.
'</tr><tr>'.
'<td><input type="text" name="lng1" value="'.$item["lng1"].'"></td>'.
'<td><input type="text" name="lng2" value="'.$item["lng2"].'"></td>'.
'<td><input type="text" name="lng3" value="'.$item["lng3"].'"></td>'.
'</tr><tr>'.
'<td><textarea name="content" rows="6" cols="30">'.$item["content"].'</textarea></td>'.
'<td><textarea name="content2" rows="6" cols="30">'.$item["content2"].'</textarea></td>'.
'<td><textarea name="content3" rows="6" cols="30">'.$item["content3"].'</textarea></td>'.
'</tr></table>'.
'<input type="submit" name="operation" value="Update Menu" style="width: 120px" accesskey="s" />'.
'<input type="submit" name="operation" value="Delete Menu" style="width: 120px" /><br />'.
'<input type="text" name="newname" value="'.$item["name"].'" style="width: 120px">'.
'<input type="submit" name="operation" value="Rename Menu" style="width: 120px" /><p> </p>';
print $this->FormOpen("","","post");
echo $formarray[$item["name"]];
print($this->FormClose());
}
// "Create menu" form
$newmenuform = '<table><tr>'.
'<td>Menu name:</td><td><input type="text" name="newname" value="new_menu_name" style="width: 120px"></td></tr>'.
'<tr><td>CSS class:</td><td> <input type="text" name="css" value="css_class" style="width: 120px"><td></tr></table>'.
'<input type="submit" name="operation" value="Create Menu" style="width: 120px" /><br />';
echo $this->Format("== Create a new menu ==");
print $this->FormOpen("","","post");
echo $newmenuform;
print($this->FormClose());

} else {
print("<em>Sorry, only Wikka Administrators can modify the Menu configuration.</em>");
}
===Changes in ##wikka.php##===
==Language Cookie==
Grab the following code and put it in ##wikka.php## above the code for the menus. The cookie will be know as ##wikkalang##.
// LANGUAGE COOKIES
// For use with multi-language menus. Version 1.0, Written by Cornelis Wiebering
function SetLanguage($lng) {
$this->SetPersistentCookie("wikkalang", $lng);
return $lng;
}
function GetLanguage() {
if ($lang = $this->GetCookie("wikkalang")) { return $lang; }
else { return $this->SetLanguage("en"); }
}
==Menu Functions==
Grab the following code and put it in place of the menu functions code in ##wikka.php##.
// MENU FUNCTIONS
// Edited to be able to handle multi-language menus. Version 1.0, Written by Cornelis Wiebering
function LoadMenu($name) {
$content = $this->LoadSingle("SELECT * FROM ".$this->config["table_prefix"]."menus WHERE name = '".$name."'");
return $content;
}
function LoadAllMenus() {
$menurow = $this->LoadAll("SELECT * FROM ".$this->config["table_prefix"]."menus");
return $menurow;
}
function SaveMenu($name, $lng1, $lng2, $lng3, $cont, $cont2, $cont3) {
$this->Query("UPDATE ".$this->config["table_prefix"]."menus SET lng1 ='".mysql_real_escape_string(trim(str_replace("\r", "", $lng1)))."' WHERE name = '".$name."' LIMIT 1");
$this->Query("UPDATE ".$this->config["table_prefix"]."menus SET lng2 ='".mysql_real_escape_string(trim(str_replace("\r", "", $lng2)))."' WHERE name = '".$name."' LIMIT 1");
$this->Query("UPDATE ".$this->config["table_prefix"]."menus SET lng3 ='".mysql_real_escape_string(trim(str_replace("\r", "", $lng3)))."' WHERE name = '".$name."' LIMIT 1");
$this->Query("UPDATE ".$this->config["table_prefix"]."menus SET content ='".mysql_real_escape_string(trim(str_replace("\r", "", $cont)))."' WHERE name = '".$name."' LIMIT 1");
$this->Query("UPDATE ".$this->config["table_prefix"]."menus SET content2 ='".mysql_real_escape_string(trim(str_replace("\r", "", $cont2)))."' WHERE name = '".$name."' LIMIT 1");
$this->Query("UPDATE ".$this->config["table_prefix"]."menus SET content3 ='".mysql_real_escape_string(trim(str_replace("\r", "", $cont3)))."' WHERE name = '".$name."' LIMIT 1");
}
function MenuExists($name) {
if ($this->LoadMenu($name)){
return true;
}
}
function RenameMenu($oldname, $newname) {
$this->Query("UPDATE ".$this->config["table_prefix"]."menus SET name = '".$newname."' WHERE name = '".$oldname."' LIMIT 1");
}
function DeleteMenu($name) {
$this->Query("DELETE FROM ".$this->config["table_prefix"]."menus WHERE name = '".$name."' LIMIT 1");
}
function CreateMenu($name, $css_class) {
$this->Query("INSERT INTO ".$this->config["table_prefix"]."menus SET name = '".mysql_real_escape_string($name)."', content = '', content2 = '', content3 = '', lng1 = '', lng2 = '', lng3 = '', css_class = '".mysql_real_escape_string($css_class)."'");
}
function TrimMenu($list) {
foreach (explode("\n", $list) as $line) {
$line = trim($line);
$trimmed_list .= $line."\n";
}
return $trimmed_list;
}
function PrintMenu($name) {
if ($menurow = $this->LoadMenu($name)) {
$lang = $this->GetLanguage();
$lng1 = $menurow["lng1"];
$lng2 = $menurow["lng2"];
$lng3 = $menurow["lng3"];
$menu = "<ul class=\"".$menurow["css_class"]."\">";
switch($lang) {
case $lng1:
foreach (explode("\n", $menurow["content"]) as $menuitem) { $menu .="<li>".$this->Format($menuitem)."</li>\n"; }
break;
case $lng2:
foreach (explode("\n", $menurow["content2"]) as $menuitem) { $menu .="<li>".$this->Format($menuitem)."</li>\n"; }
break;
case $lng3:
foreach (explode("\n", $menurow["content3"]) as $menuitem) { $menu .="<li>".$this->Format($menuitem)."</li>\n"; }
break;
default:
foreach (explode("\n", $menurow["content"]) as $menuitem) { $menu .="<li>".$this->Format($menuitem)."</li>\n"; }
break;
}
$menu .= "</ul>\n";
return $menu;
}
==Notes==
~- Please let me know if the code does not comply to standards used in other extensions. I will change it accordingly.
~- The code is provided as is. It works for my site, but that does not necessarily mean it works for you. Use at own risk.
~- You can see the code at work on [[wiki.views-and-vision.org]]. Click on the language links in the upper right corner.
-- WigAnt
CategoryUserContributions
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki