webForumDet fria alternativet

Någon som vet hur man gör?

ASP

11 svar · 623 visningar · startad av voigtann1

Medlem sedan juni 20019 519 inlägg
Frågan#1

Vet inte hur många här på ASP forumet som har testat phpBB forum. Jag gillar ideen med att kunna skapa en egen stil med hjälp .tpl (något dom själva satt?) Undra om det finns något sätt att kunna göra såsom dom har gjort i ASP. bara något exempel på "rolig" kod:

if ( ((!$is_auth['auth_reply']) or ($forum_topic_data['forum_status'] == FORUM_LOCKED) or ($forum_topic_data['topic_status'] == TOPIC_LOCKED)) and ($userdata['user_level'] != ADMIN) )
{
	$quick_reply_form = "";
}
else
{
	$notify_user = (( $userdata['session_logged_in'] ) ? $userdata['user_notify'] : 0) ? '1' : '';
	$attach_sig = (( $userdata['session_logged_in'] ) ? $userdata['user_attachsig'] : 0) ? '1' : '';
	$quick_reply_form = "
		<script language='JavaScript' type='text/javascript'>
			function checkForm() {
				formErrors = false;
				if (document.post.message.value.length < 2) {
				formErrors = '" . $lang['Empty_message'] . "';
				}
				if (formErrors) {
					alert(formErrors);
					return false;
				} else {
					return true;
				}
			}
		</script>
		<form action='".append_sid("posting.$phpEx")."' method='post' name='post' onsubmit='return checkForm(this)'>
		<span class='genmed'><b>".$lang["Quick_Reply"].":</b><br /><br />
	";

	if (!$userdata['session_logged_in'])
	{
		$quick_reply_form .= $lang['Username'] . ":&nbsp;<input class='post' type='text' name='username' size='25' maxlength='25' value='' /><br />";
	}

	$quick_reply_form .= "
		<textarea class='post' name='message' rows='10' cols='50' wrap='virtual'></textarea><br />
		<input type='hidden' name='attach_sig' value='" . $attach_sig . "' />
		<input type='hidden' name='mode' value='reply' />
		<input type='hidden' name='sid' value='" . $userdata['session_id'] . "' />
		<input type='hidden' name='t' value='" . $topic_id . "' />
		<input type='hidden' name='notify' value='" . $notify  . "' /><br />
		<input type='submit' name='preview' class='liteoption' value='".$lang['Preview']."' />&nbsp;
		<input type='submit' name='post' class='mainoption' value='".$lang["Submit"]."' />
		</form></span>
	";
}

$template->assign_vars(array(
	'QUICK_REPLY_FORM' => $quick_reply_form)
);

Denna finns ju i en php fil. och i tpl filen så skriver man bara {QUICK_REPLY_FORM} ...

Medlem sedan mars 20025 907 inlägg
#2

Förenklat så skulle man kunna göra så att all htmlkod från php-filen (eller asp-filen som du vill ha antar jag) lagras i en variabel (i koden ovan lagras det i variabeln $quick_reply_form). Sen läser man in hela *.tpl-filen i en annan variabel och ersätter alla förekomster av "{QUICK_REPLY_FORM}" i den variabeln med värdet från $quick_reply_form. Det är iaf så jag gör :)

Medlem sedan juni 20019 519 inlägg
#3

hmm... skulle man kunna se lite sådan kod som du använder dig av?

Medlem sedan mars 20025 907 inlägg
#4
<?php
class template
{
	var $var_names	= array();
	var $files 		= array();
	var $start		= '{';
	var $end		= '}';

	/**
	 * @return void
	 * @param file_id Template_id
	 * @param filename Templatefile
	 * @desc Loads the file $filename and puts the content in the array $files, with the file_id as identifier and the file content as key.
	 */
	function loadtemplate($file_id,$filename)
	{
		if(file_exists($filename) and is_file($filename)){
			$this->files[$file_id] = fread($fp = fopen($filename, 'r'), filesize($filename));
			fclose($fp);
		}else{
			//Filen finns inte.
 			$errarr = debug_backtrace();
 			die('Filen <em>'.$filename.'</em> kunte inte hittas!<br />Felursprung: ' . $errarr[0]['file']. ' ['.$errarr[0]['line'].']');
		}
	}
	
	/**
	 * @return void
	 * @param file_id FileID
	 * @param var_name VariableName
	 * @desc Registers a variable in the class array var_names, with the fileid as first key and an ascending integer as second key.
	 */
	function registervariable($file_id,$var_name)
	{
		$var_array = split(",",$var_name);
		
		while (list($key,$val) = each($var_array))
		{
			$val = trim($val);
			$this->var_names[$file_id][] = $val;
		}
	}
	
	
	/**
	 * @return result
	 * @param file_id FileID
	 * @desc Parses the file
	 */
	function parse($file_id)
	{
		$resultat = $this->files[$file_id];
		if(isset($this->var_names[$file_id]) and count($this->var_names[$file_id]) != 0) {
			while (list($key,$val) = each($this->var_names[$file_id])){
				$sokefter = $this->start . $val . $this->end;
				global $$val;
				$resultat = str_replace($sokefter,$$val,$resultat);
			}
		}
		return $resultat;
	}
	
}

$tpl = new template();
$tpl->loadtemplate("fileid","templatefile.tpl");
$tpl->registervariable("fileid","variabel1,variabel2,variabel3");

$variabel1 = "Massa text";
$variabel2 = "Ännu mer text";
$variabel3 = "Oj vad text!";

$resultat = $tpl->parse("fileid");
echo $resultat;

?>

templatefile.tpl består av

variabel1: {variabel1}<br>
variabel2: {variabel2}<br>
variabel3: {variabel3}

och kommer vid exekvering att resultera i

variabel1: Massa text<br>
variabel2: Ännu mer text<br>
variabel3: Oj vad text!

Koden kan säkerligen optimeras en hel del, men den fungerar iaf :)

Medlem sedan juni 20019 519 inlägg
#5

aj... det var php :e är inte så haj på att konvetnera till ASP fil :(

Medlem sedan mars 20025 907 inlägg
#6

Heh, nej inte jag heller. Men det finns säkert någon här som har både kunskapen, tiden och orken att göra det!? :)

Medlem sedan juni 20019 519 inlägg
#7

Egentligen bör man ju kunna fixa det med reg.exp att den ersätter {variabel_namn} med en <% variabel_namn%> problemet är att hur man kanske gör att reg.exp läser av alla rader i .tpl filen..

Medlem sedan mars 20025 907 inlägg
#8

Varför måste du ha ett regexp för det?

response.write replace(tplfilensinnehåll, '{variabel_namn}', ersättningsvärde)
Medlem sedan juni 20019 519 inlägg
#9

Ska leta lite med readline... reg.exp kunde man ju göra
{Str_varde} = str_varde i asp.. och på så sätt slippa lägga in nya replace för varje ny {} man kommer på.

Medlem sedan juni 20019 519 inlägg
#10

provade lite:

<!-- #include file="vpanel_scripts/functions.asp" --><!-- #include file="admin/settings.asp" -->
<HTML>
<HEAD>
<link rel="stylesheet" type="text/css" href="<%= DIRECTORY & cssfile%>">
<meta name="keywords" content="<%=metakeyword%>">
<meta name="description" content="<%=MetaDescript%>">
</HEAD>
<%
Set strconn = CreateObject("Scripting.FileSystemObject")
Set RecSet = strconn.OpenTextFile(server.mappath(DIRECTORY & "default.tpl"))
f1 = recset.readall
response.write replace(f1,"{mainpage}",mainpage())
%>

problemet är att i include filen det är där funktionen mainpage() finns så den skriver ut:

function mainpage()
  Set Obj = CreateObject("Scripting.FileSystemObject")
  If Obj.FileExists(Server.MapPath("pages/" & Trim(LCase(Request.QueryString("goto"))) & ".asp")) Then
    Server.Execute "pages/" & Trim(LCase(Request.QueryString("goto"))) & ".asp"
  Elseif Obj.FileExists(Server.MapPath("browser/htmlfiles/" & Trim(LCase(Request.QueryString("location"))))) Then
    Server.Execute "browser/htmlfiles/" & Trim(LCase(Request.QueryString("location")))
  else
    Server.execute "pages/news.asp"
  End if
  Set Obj = Nothing
end function

där include filerna är... går det att fixa på något sätt?

Medlem sedan juni 20019 519 inlägg
#11

Har kommit något längre:

Function Free(f2)
  Set objRegExp = New regexp
  objRegExp.Global = true
  objRegExp.IgnoreCase = true
  objRegExp.Pattern = "mainpage}"
  f2 = objRegExp.Replace(f2,mainpage())
  free = f2
End Function

Set strconn = CreateObject("Scripting.FileSystemObject")
Set RecSet = strconn.OpenTextFile(server.mappath(DIRECTORY & "default.tpl"))
f1 = recset.readall
arrtext = split(f1,"{")
for i = 0 to ubound(arrtext)
response.write free(arrtext(i))
next

Nu skriver den ut koden där jag vill ha den... fast sen skriven den ändå ut den där Include filen är...

Medlem sedan juni 20019 519 inlägg
#12

Går detta ens att ordna? Provade ändra om mainpage() till en SUB istället men då går den inte ens igenom koden

373 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
237 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)