webForumDet fria alternativet

Är detta ett bra sätt att objektorientera sin kod på?

PHP

1 svar · 462 visningar · startad av vic

Medlem sedan apr. 2006244 inlägg
Frågan#1

Hade tänkt att testa på lite OOP. Har kommit så här långt

Grundkoden på sidan

<?php

/// global function
function parseFile($tpl)
	{
	  ob_start();
	  include($tpl);
	  $content=ob_get_contents();
	  ob_end_clean();
	  return $content;
	}
	
	

// Prints global header
class tpl_GlobalHeader {
	
    var $output;
	
    function tpl_GlobalHeader($tpl) 
		{
		$this->output=file_get_contents($tpl) or die('Error: Template file '.$tpl.' not found');
		}
    
	function parseTemplate($lang=array())
		{
		if(count($lang)>0)
			{
			foreach($lang as $text=>$data)
				{
				$data=(file_exists($data))?$this->parseFile($data):$data;
				$this->output=str_replace('|'.$text.'|',$data,$this->output);
				}
  		}
  		else {die('Error: No language defined');}
		}

    function display_tpl()
	{
	return $this->output;
	}

}

// Javascripts		
class Begin_Print_JavaScript {

	var $JS_output;
	
	function Begin_Print_JavaScript($JS_tpl)
		{
		$JS_part = explode('/*', file_get_contents($JS_tpl));
		$JS_section = explode('>', $JS_part[1]);
		
		$this->JS_output .= $JS_part[0].'/*'; // Beginning of HTML-JavaScript
		$this->JS_output .= $JS_section[0]; // Defining languge in JS functions
		
		foreach($JS_section as $html_JS)
			{
			if(preg_match("/".$_GET['page_id']."/i", $html_JS) == true)
				{
				$this->JS_output .=$html_JS;
				}
			}
		
		
		$this->JS_output .= '/*'.$JS_part[2]; // End of HTML-Javascript
		
		}
	
	function display_final_JS()
		{
		$JS_begin 	= "\t<script src=\"/js/";
		$JS_end 	= ".js\" type=\"text/javascript\" />\n";
		
		if($_GET['page_id'] == 'register')	{$this->JS_output .= $JS_begin.'CheckForm'.$JS_end;}
		if($_GET['page_id'] == 'register')	{$this->JS_output .= $JS_begin.'HexIt'.$JS_end;}
		if($_GET['page_id'] == 'test')		{$this->JS_output .= $JS_begin.'TestIt'.$JS_end;}
		
		
		return $this->JS_output;
		}

}
		
/////////////////////////////////////////////// END //////////////////

require $_GET['lang'].".php";

// BEGIN HEADER
$tp=&new tpl_GlobalHeader('sidan.tpl');
$tp->parseTemplate($lang);
echo $tp->display_tpl();

// PRINT JAVASCRIPTS
$js=&new Begin_Print_JavaScript('Javascript.tpl');
echo $js->display_final_JS();

?>

De två templatefilerna

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>|title|</title>

	<!-- META -->
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
	<meta name="distribution" content="global" />
	<meta http-equiv="imagetoolbar" content="no" />

	<meta name="robots" content="index, follow" />
	<meta name="description" content="|meta-desc|" />
	<meta name="keywords" content="|meta-keyw|" />
	<meta http-equiv="content-language" content="|language|" />

	<link rel="icon" href="img/favicon.ico" type="img-x/ico" />
	<link rel="stylesheet" href="css/main.css" type="text/css" />
	<link rel="stylesheet" href="css/|language|.css" type="text/css" /> 
			
	<script src="/js/beta.js" type="text/javascript"></script>
	<script type="text/javascript">
	/* <![CDATA[ */
	  
	  var Lang = 'sv';	
	
	
	>//register
	
		var reg;
	
	>//test
	
	  var test;
		
	/* ]]> */
	</script>

Språkfilen

<?php

$lang['title'] ='titel';
$lang['meta-desc'] ='Meta descriptio';
$lang['meta-keyw'] ='Nyckelord';
$lang['language'] ='sv';
$lang['text'] = 'HEj hej hemskt mycket hej';

?>

Jag gillar separeringen mellan de olika kodspråken men jag vet inte om det här egentligen är helt onödigt, lite overkill kanske. Det kommer som sagt finnas en del javascript i html-koden som ger olika kommentarer som hämtas från språkfilen

Någon som kanse har nåt tips att ge :) Allt fungerar som sagt men kanske man kunde få lite råd nu när man försöker lära sig att tänka på det här sättet

Medlem sedan mars 200533 inlägg
#2

Detta har inget med OOP att göra, men varför uppfinner du hjulet igen när det kommer till templating? Har du kollat på lösningar som t.ex Smarty?

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)