Scripts

Easy Language System 0.1.1 BETA

Een tijdje terug kreeg ik het idee, om een Talen Class te maken. Een Talen Class, - ja je leest het goed - die vooral veel mogenlijkheden biedt. Eentje die zowel gebruiksvriendelijk als dynamisch is. Makkelijk te implementeren en gebruiken, en toch complex kwa opties. Nu is dat voor mij een veel te moeilijke klus, maar ik heb wel iets gemaakt, wat daarnaar streeft :P. Hierbij presenteer ik u: Easy Language System (ELS). Versie 0.1 Beta Korte uitleg: Je include IncludeFile.php op een pagina, maakt de class DispText aan en overal waar je $class->_Text($var) neerzet, zal de het script uit de database een stuk tekst met code '$var' in de juiste taal selecteren. Ook is er een mogenlijkheid om deze stukken aan te passen, tevens in meerdere talen te gelijk. Implementeren op jouw site: - Je include IncludeFile.php op de pagina waar je het wil implemeteren - $DT = new DispText($_SESSION['lang'],$moderator) //Je moet $moderator dmv je eigen beveiligssysteem een waarde 0 of 1 meegeven. 0 = normale user, 1 = moderator - Je vervangt elk stukje tekst wat je dynamisch wil laten zijn door $DT->_Text('code') // Je moet moet 'code' een relevante, maar eigen ID meegeven, waarmee je deze in de database associeert. - Klik op in moderator modus op [.edit.] en zet de oorspronkelijke tekst in het tekstveld. - Druk op update, en je bent klaar. Het is in principe mogenlijk ALLES in de database te zetten, in meerdere talen dus, zolang je maar rekening houdt dat de 'code' uniek moet zijn voor elk stuk tekst (behalve als je bijvoorbeeld 2 keer dezelfde tekst nodig hebt). Het is zelfs mogenlijk om het Edit menu dynamisch te maken. Dit script is nog in BETA fase, aangezien het voor mij nog niet duidelijk is inhoevere dit script werkelijk als handig ervaren wordt, en wat er dus nog moet veranderen om dat dan wel te zijn. Met name kritiek die betrekking heeft op de gebruiksvriendelijkheid is daarom gewenst. De tabellen: Update 0.1.1 (05-02-2009 - Menu is nu dikgedrukt bij selectie - Kleine bugfix (Tabel werkte niet omdat deze niet van de nodige hoofdletters was voorzien) - Voorbeeld nu ALTIJD Beschikbaar

easy-language-system-011-beta
- - - = = = +++ Voorbeeldje +++ = = = - - - 
[code]
<?
include('IncludeFile.php');

#het Talen menu aanroepen
echo '<p>'.$ListMenu.'</p>';

echo "<div style='background-color:#EEEEEE'><b>Normale user:</b><br/>";

# Voor de ogen van de normale gebruikers
$DT = new DispText($_SESSION['lang'],0);
echo $DT->_Text('Home');

echo "</div>";

echo "<div style='background-color:#EEEEEE'><b>Moderator:</b><br/>";

# Voor het de oog van de moderator
$DT = new DispText($_SESSION['lang'],1);
echo $DT->_Text('Home');

echo "</div>";

?>
[/code]

- - - = = = EditTextClass.php = = = - - -
[code]
<?php
#########################################
# By: Pieter van Linschoten				#
# Licence: GNU General Public Licence	#
# Project: Easy Language System			#
# Version: 0.1 BETA						#
# Publish Date: Januari 23, 2008		#
# Page: EditTextClass.php				#
# Questions: [email protected]		#
#########################################

class EditTextForm{
	var $Form;
	var $Language;
	var $TextOutput;

	function EditTextForm($PartCode,$Lang='En',$method){
		$this->Language = $Lang;
		
		$LangSql = "SELECT Text_LangCode FROM Text_Languages ORDER BY Text_Language ASC";
		$LangResponse = mysql_query($LangSql) or die(mysql_error());
		if(mysql_num_rows($LangResponse) == 0){
			echo "There is no language available to edit.";
			exit();
		}
		while($LangRow = @mysql_fetch_array($LangResponse)){
		$TextSql = "SELECT * FROM Text_Display WHERE Text_PartCode = '" . $PartCode . "' and Text_LangCode = '" . $LangRow['Text_LangCode'] . "'";
			$TextResponse = mysql_query($TextSql) or die(mysql_error());
			
			if(mysql_num_rows($TextResponse) == 0){
				$Text = '';
			}else{
				$TextRow = @mysql_fetch_array($TextResponse);
				$Text = $TextRow['Text_Content'];
			}

			$this->CreateFormContent($LangRow['Text_LangCode'],$PartCode,$Text);
		}
		
		$this->TextOutput = '<form action="' . $_SERVER['PHP_SELF'] . '?mod=edit&Part=' . $PartCode . '" method="POST">' . $this->Form . '<p><input name="TextUpdate" type="submit" value="Update"></p></form>';
	}
	#@ Maak voor elke taal een apart Text Area
	function CreateFormContent($LangCode,$PartCode,$Text){

		$this->Form .= '<p>' . $PartCode . '_' . $LangCode . '<br/>';	
		$this->Form .= '<textarea name="' . $PartCode . '_' . $LangCode . '" >' . $Text . '</textarea>';
		$this->Form .= '</p>';
	}

	function _Output(){
		return $this->TextOutput;
	}
}

?>
[/code]

- - - = = = EditText.php = = = - - -
[code]
<?php
<?
#########################################
# By: Pieter van Linschoten				#
# Licence: GNU General Public Licence	#
# Project: Easy Language System			#
# Version: 0.1 BETA						#
# Publish Date: Januari 23, 2008		#
# Page: EditText.php					#
# Questions: [email protected]		#
#########################################

#! Let op: Deze pagina is hier onbeveiligd!

require('IncludeFile.php');
require('EditTextClass.php');


#@ Controleer of het er een formulier verzonden is.
if($_SERVER['REQUEST_METHOD'] == 'POST'){
	
	# Loop de array van $_POST af.
	foreach($_POST as $key => $post){
		
		#@ Alles, behalve de update knop hebben we nodig
		if($key != 'TextUpdate'){
			$key = explode('_',$key);
			
			#@ Controleer of het verzonden veld niet leeg was, want dan doen we er niets mee.
			if(!empty($post)){
				
				#@ Kijk of dit tekstgedeelte al bestond in de DB.
				$CheckSql = "SELECT id FROM Text_Display WHERE Text_PartCode = '" . $key[0] . "' AND Text_LangCode = '" . $key[1] . "' LIMIT 1";
				$CheckResponse = mysql_query($CheckSql) or die(mysql_error());
				$Check = mysql_num_rows($CheckResponse);

				switch($Check){
					case 0:
						#@ INSERT de text als deze voor het eerst wordt aangepast.
						$aUpdateQuery[] = "INSERT INTO Text_Display SET id = '', Text_PartCode = '" . $key[0] . "', Text_LangCode = '" . $key[1] . "', Text_Content = '" . mysql_real_escape_string($post) . "'";
					break;
					default:
						#@ UPDATE de text als deze al bestaat.
						$aUpdateQuery[] = "UPDATE Text_Display SET Text_Content = '" . mysql_real_escape_string($post) . "' WHERE Text_PartCode = '" . $key[0] . "' AND Text_LangCode = '" . $key[1] . "'";
					break;
				}
			}
		}
	}
	#@ En de functies uitvoeren. Controleer of het goed gaat
	$iError = 0;
	foreach($aUpdateQuery as $Query){
		mysql_query($Query) or $iError = 1;
	}
	
	#@ Kijk of de query gelukt is.
	switch($iError){
		case 0: echo "<p>The languages have been edited.</p><p>(<a href='#' onClick='javascript:window.close();'>Close Window</a>)</p>";
		break;
		case 1: echo "<p>Something went wrong while updating.</p><p><a href='#' onClick='javascript:history.go(-1);'>Please try again.</a></p>";
		break;
	}

}else{

	$ET = new EditTextForm($_GET['Part'],$_SESSION['lang'],'edit');
	echo $ET->_Output();
}
?>
[/code]

- - - = = = DispTextClass.php = = = - - - 
[code]
<?php 
#########################################
# By: Pieter van Linschoten				#
# Licence: GNU General Public Licence	#
# Project: Easy Language System			#
# Version: 0.1 BETA						#
# Publish Date: Januari 23, 2008		#
# Page: DispTextClass.php					#
# Questions: [email protected]		#
#########################################


#@ Display Text in correct Language
class DispText{
	var $Mod;
	var $Lang;
	var $Content;
	
	#@ Weergeef foutmeldingen alleen in DEBUGMODUS voor Moderators. 
	function DispError($error){
		if($this->Mod == 1){
			die($error);
			$this->Content .= $error;
		}
	}
	
	#@ Initialiseer de class, wanneer deze wordt aangemaakt.
	function DispText($LangCode='EN',$Moderator=0){
		$this->Mod = $Moderator;
		$this->Lang = $LangCode;
	}
	
	#@ Wanneer iemand moderator is, moet hij natuurlijk wel de tekst aan kunnen passen.
	# Daarom zetten we een [EDIT] knopje erbij.
	function Moderator($PartCode){
		if($this->Mod == 1){
			return "&nbsp;[<a <a href=\"class.php?mod=edit&Part=" . $PartCode . "\" onclick=\"window.open('EditText.php?mod=edit&Part=" . $PartCode . "','Edit','width=400, height=400, scrollbars=yes, toolbar=no, location=no'); return false\" title='Edit'>Edit</a>]";
		}
	}
	
	#@ Hier wordt de bijbehorende taal uit de Database gehaalt.
	# Wanneer deze nog niet in de database staat, zetten we de partcode_langcode neer, om te laten zien dat hier nog iets moet komen.
	function _Text($PartCode){
		$qSql	= "SELECT Text_Content FROM Text_Display WHERE Text_LangCode = '" . $this->Lang. "' AND Text_PartCode = '" . $PartCode . "' LIMIT 1";
		$qResponse = mysql_query($qSql) or $this->DispError(mysql_error());
		
		if(mysql_num_rows($qResponse) == 0){
			return "[" . $PartCode . "_" . $this->Lang . "]" . $this->Moderator($PartCode);
		}else{
			$qRow = mysql_fetch_array($qResponse);
			return $qRow['Text_Content'] . $this->Moderator($PartCode);
		}
	}
	
}
?>
[/code]

- - - = = = IncludeFile = = = - - - 
[code]
<?php
#########################################
# By: Pieter van Linschoten				#
# Licence: GNU General Public Licence	#
# Project: Easy Language System			#
# Version: 0.1  BETA					#
# Publish Date: Januari 23, 2008		#
# Page: IncludeFile.php					#
# Questions: [email protected]		#
#########################################


session_start();

#@ Database connectie, ook niet onhandig...
$user = "username"; 
$dbpass = "password"; 
$host = "hostname"; 
$dbdb = "database"; 

if (!mysql_select_db($dbdb, mysql_connect($host, $user, $dbpass))) 
{ 
     echo "Database connectie mislukt."; 
     exit(); 
} 

# Initialiseer variabelen
$aLang = array();
$ListMenu = NULL; # Dit word het menu
$cntr = 0;

#@ Bepaal de ondersteunende talen.
#@ Maak een menu van deze talen.
$LangSql = "SELECT * FROM Text_Languages ORDER BY Text_Language ASC";
$LangResponse = mysql_query($LangSql);

#@ Indien er geen talen in de DB staan, geen menu aanmaken.
if(mysql_num_rows($LangResponse) == 0){
	$ListMenu = '';
	$aLang[] = NULL;
}else{
	while($LangRow = mysql_fetch_array($LangResponse)){
		$cntr++;
		# Array met bestaande talen
		$aLang[] = $LangRow['Text_LangCode'];
		
		# Het menu: Je kan er ook voor kiezen om plaatjes in te voeren.
		# Ik heb hier gewoon text, waarvan de gekozen taal dikgedrukt is.
		if(isset($_GET['setlang'])){
			if($_GET['setlang'] == $LangRow['Text_LangCode']){
				$bold = ' style= "font-weight:bold; "';
			}else{
				$bold = ' ';
			}
		}elseif(isset($_SESSION['lang']) && ($_SESSION['lang'] == $LangRow['Text_LangCode'])){
			$bold = ' style= "font-weight:bold; "';
		}else{
			$bold = ' ';
		}
		$ListMenu .= "<a".$bold."href='".$_SERVER["PHP_SELF"]."?setlang=" . $LangRow['Text_LangCode'] . "'>" . $LangRow['Text_Language'] . "</a>" . ($cntr == mysql_num_rows($LangResponse) ? ' ' : ' | ');
	}
}

#@ Controleer of iemand van taal wil veranderen
if(!empty($_GET['setlang']) && isset($_GET['setlang'])){
	# Controleer of deze taal toegestaan is.
	if(in_array($_GET['setlang'],$aLang)){
		# Onthoudt gekozen taal dmv een sessie
		$_SESSION['lang'] = $_GET['setlang'];
	}
}

#@ Controleer of er een taal is onthouden. Zo niet: Dwing om er een te kiezen.
if(!isset($_SESSION['lang'])){
	echo '<b>Select Language:</b> <p>' . $ListMenu . '</p>';
	exit();
}

# En haal de display class erbij.
require_once("DispTextClass.php");
?>
[/code]

Reacties

0
Nog geen reacties.