Seite 1 von 1

BEGIN itemRow - template-Objekt

Verfasst: 20.05.2007 14:30
von Sv€n
Hallo.

Ich habe zu meinem phpbb 2.0.22 auch eine PREFIX_items-Tabelle.

user_id (INT)
pos (INT)
item (TEXT)

user_id sagt aus, welchem User das Item gehört,
item ist der Name des Items und pos ist die
position für ein ORDER BY pos ASC

Ich habe jetzt eine ./zzzap.php angelegt

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

// build page header
include($phpbb_root_path . 'includes/page_header.'.$phpEx);

// list items
$res = mysql_query("SELECT * FROM `".$table_prefix."items` WHERE `user_id`=".$userdata['user_id'].";");
// code

// build page tail
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>
und hier die ./templates/mein_template/zzzap.tpl

Code: Alles auswählen

<table class="forumline" width="100%">
<tr>
	<td class="catHead" colspan="2">
		<span class="genmed">Items</span>
	</td>
</tr>
<tr>
	<td class="b" width="20px">
		Pos
	</td>
	<td class="b">
		Name
	</td>
</tr>
<!-- BEGIN itemRow -->
<tr>
	<td width="20px">
		<span class="genmed">{itemRow.Pos}</span>
	</td>
	<td>
		<span class="genmed">{itemRow.Name}</span>
	</td>
</tr>
<!-- END itemRow -->
</table>
Jetzt würde ich gerne wissen, wie ich da das template-Objekt
aufbauen soll... Bin dankbar für jede Hilfe!


// edit

Bin jetzt von selbst drauf gekommen...

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

// build page header
include($phpbb_root_path . 'includes/page_header.'.$phpEx);

// list items
$template = new Template('./templates/mein_template/');
$template->set_filenames(array(
	'zzzap'	=>	'zzzap.tpl'
));
$res = mysql_query("SELECT * FROM `".$table_prefix."items` WHERE `user_id`=".$userdata['user_id']." ORDER BY `pos` ASC;");
while ($item = mysql_fetch_assoc($res))
{
	$template->assign_block_vars('itemRow', array(
		'Pos'		=>	$item['pos'],
		'Item'	=>	$item['name']
	));
}
$template->pparse('zzzap');

// build page tail
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>

Verfasst: 20.05.2007 17:34
von Miriam
Sehr gut..... *thumbs up*

Verfasst: 20.05.2007 18:39
von Sv€n
Jetzt habe ich aber ein kleines Problemchen...

Parse error: syntax error, unexpected '=' in C:\xampp\htdocs\psrpg\includes\template.php(127) : eval()'d code on line 141

Code: Alles auswählen

<script type="text/javascript">
var mouseX;
var mouseY;
function aktualisiere_position (e)
{
	if (!e) e = window.event;
	mouseX=(e.pageX||e.clientX);
	mouseY=(e.pageY||e.clientY);
}
document.onmousemove = aktualisiere_position;

function show (id)
{
	// Alle Menüs mal erst schleissen.
	hide_all ();

	// Alle eventuell offenen wegwerfmenge-Wahlboxen schließen.
	var i = 1;
	while (true)
	{
		if (jo = document.getElementById('wegwerfen_'+i))
		{
			jo.style.display = 'none';
			i++;
		}
			else
		{
			break;
		}
	}

	// Menü Neben Maus positionieren und einknipsen.
	ziel = document.getElementById('item_'+id).style;
	ziel.left = mouseX+'px'; 
	ziel.top = mouseY+'px'; 
	ziel.display = 'block'; 
}
function ww_show (id)
{
	// Alle Menüs mal erst schliessen.
	hide_all ();

	// Menü Neben Maus positionieren und einknipsen.
	ziel = document.getElementById('wegwerfen_'+id).style;
	ziel.left = mouseX; 
	ziel.top = mouseY; 
	ziel.display = 'block'; 
}
function hide_all ()
{
	// Alle Wahlboxen schliessen.
	var i = 1;
	while (true)
	{
		if (jo = document.getElementById('item_'+i))
		{
			jo.style.display = 'none';
			i++;
		}
			else
		{
			break;
		}
	}
}

function wegwerfen (zaehler)
{
	document.getElementsByName('wegwerfen')[0].value = document.getElementById('wegwerfen_'+zaehler+'_pos').value;
	document.getElementsByName('menge')[0].value = document.getElementById('wegwerfen_'+zaehler+'_menge').value;
	document.form.submit();
}
</script>


<form name="form" action="{LINK_PAR}" method="get">
<input type="hidden" name="view" value="bag">
<input type="hidden" name="wegwerfen" value="">
<input type="hidden" name="menge" value="0">
</form>


<table class="forumline" width="100%">
<tr>
	<td class="catHead" align="center">
		{PAGE_TITLE}
	</td>
</tr>
<tr>
	<td class="b" align="center">
		{LINK_BACK}
	</td>
</tr>
<tr>
	<td align="center">

	<table border="0" cellpadding="0" cellspacing="0">
	<tr>
		<td>
			<img src="images/main/bag_{BAG_SUBJECT}.gif" alt="[{BAG_SUBJECT}]" /></td>
		<td>

		<ul>
			<li>
				<!-- BEGIN switch_allgemein_enabled -->
				<a href="worldframe_world.php?view=beutel&fach=allgemein">Allgemeine Items</a>
				<!-- END switch_allgemein_enabled -->
				<!-- BEGIN switch_allgemein_disabled -->
				<span class="genmed">Allgemeine Items</span>
				<!-- END switch_allgemein_disabled -->
			</li>
			<li>
				<!-- BEGIN switch_baelle_enabled -->
				<a href="worldframe_world.php?view=beutel&fach=baelle">Bälle</a>
				<!-- END switch_baelle_enabled -->
				<!-- BEGIN switch_baelle_disalbed -->
				<span class="genmed">Bälle</span>
				<!-- END switch_baelle_disabled -->
			</li>
			<li>
				<!-- BEGIN switch_beeren_enabled -->
				<a href="worldframe_world.php?view=beutel&fach=beeren">Beeren</a>
				<!-- END switch_beeren_enabled -->
				<!-- BEGIN switch_beeren_disalbed -->
				<span class="genmed">Beeren</span>
				<!-- END switch_beeren_disabled -->
			</li>
			<li>
				<!-- BEGIN switch_basis-items_enabled -->
				<a href="worldframe_world.php?view=beutel&fach=basis-items">Basis-Items</a>
				<!-- END switch_basis-items_enabled -->
				<!-- BEGIN switch_basis-items_disalbed -->
				<span class="genmed">Basis-Items</span>
				<!-- END switch_basis-items_disabled -->
			</li>
			<li>
				<!-- BEGIN switch_tms_enabled -->
				<a href="worldframe_world.php?view=beutel&fach=tms">TMs</a>
				<!-- END switch_tms_enabled -->
				<!-- BEGIN switch_tms_disalbed -->
				<span class="genmed">TMs</span>
				<!-- END switch_tms_disabled -->
			</li>
		</ul>

		</td>
	</tr>
	</table>

	</td>
</tr>
</table>

<table class="forumline" width="100%">
<tr>
	<td class="catHead" colspan="2">
		{BAG_SUBJECT}
	</td>
</tr>
<tr>
	<td class="b" align="left">
		Name
	</td>
	<td class="b" align="center" width="50px">
		Menge
	</td>
</tr>
<!-- BEGIN itemRow -->
<tr>
	<td align="left">
		<span class="gensmall"><a href="#" onclick="show({itemRow.pos});">{itemRow.name}</a></span>
	</td>
	<td align="center">
		<span class="gensmall">{itemRow.quantity}</span>
	</td>
</tr>
<!-- END itemRow -->
</table>
Es soll immer nur ein <li> einen unverlinkten Text beinhalten.
Undzwar den, in dessen Beutel-Fach an grade ist.

Code: Alles auswählen

<?php
if ( !defined('IN_PHPBB') )
{
	die("Hacking attempt");
	exit;
}


// set page title and target script for the parameters
$res = mysql_query("SELECT `phase`, `pkset` FROM `user_fights` WHERE `otid`=".$userdata['user_id'].";");
if (mysql_num_rows($res) == 1)
{
	$battle = mysql_fetch_assoc($res);

	$from = 'battle';
	$page_title = 'Item einsetzen...';
	$link_back = '[<a href="index.'.$phpEx.'?view=world">Zurück zur Befehlswahl!</a>]';
	$link_par = 'worldframe_world.'.$phpEx;
}
	else
{
	if (isset($HTTP_GET_VARS['give_from_team']))
	{
		$from = 'team';
		$page_title = 'Welches Item erhält es?';
		$link_back = '[<a href="worldframe_world.'.$phpEx.'?view=team">Zurück zur TeamPkMn-Uebersicht!</a>]';
		$link_par = 'worldframe_world.'.$phpEx;
	}
		else
	{
		$from = 'world';
		$page_title = 'Beutel von '.$userdata['username'];
		$link_back = '[<a href="worldframe_world.'.$phpEx.'?view=world">Zurück zur Welten-Uebersicht!</a>]';
		$link_par = 'worldframe_world.'.$phpEx;
	}
}


// print page header
$gen_simple_header = true;
include($phpbb_root_path . 'includes/page_header.'.$phpEx);


// before parsing html change bag subject if have been taken with valid parameters
if (isset($HTTP_GET_VARS['fach']))
{
	$chfach = $HTTP_GET_VARS['fach'];

	$legal = array('allgemein', 'baelle', 'basis-items', 'beeren', 'tms');
	if (in_array($chfach, $legal))
	{
		// Kein Parameterpfusch. Erfolgreich wechseln.
		$userdata['beutel_fach'] = $chfach;
		mysql_query("UPDATE `xBoard_users` SET `beutel_fach`='".$userdata['beutel_fach']."' WHERE `user_id`=".$userdata['user_id'].";");
	}
}

// only outside fights and trades
if ($from == 'world')
{
	// before parsing html trash away an item if have been taken with valid parameters
	if (isset($HTTP_GET_VARS['wegwerfen']) and isset($HTTP_GET_VARS['menge']))
	{
		$ww_pos = $HTTP_GET_VARS['wegwerfen'];
		$ww_menge = $HTTP_GET_VARS['menge'];

		// target item must exist...
		$res = mysql_query("SELECT `pos`, `menge` FROM `user_items` WHERE `pos`=".$ww_pos." AND `fach`='".$userdata['beutel_fach']."' AND `otid`=".$userdata['user_id'].";");
		if (mysql_num_rows($res) == 1)
		{
			$item = mysql_fetch_assoc($res);

			// only more than 0 and less than the target items quantity
			if ($ww_menge<=$item['menge'] and $ww_menge>0)
			{
				if (($item['menge']-=$ww_menge) > 0)
				{
					// save new quantity
					mysql_query("UPDATE `user_items` SET `menge`=".$item['menge']." WHERE `pos`=".$ww_pos." AND `fach`='".$userdata['beutel_fach']."' AND `otid`=".$userdata['user_id'].";");
				}
					else
				{
					// delete whole item row
					mysql_query("DELETE FROM `user_items` WHERE `pos`=".$ww_pos." AND `fach`='".$userdata['beutel_fach']."' AND `otid`=".$userdata['user_id'].";");
				}
			}
		}
	}

	// before parsing html set an item one position upper if have been taken with valid parameters
	// -> tms don't let change their position because their position constitutes which tm it is
	if (isset($HTTP_GET_VARS['pos_up']) and $userdata['beutel_fach']!='tms')
	{
		$ww_pos = $HTTP_GET_VARS['pos_up'];

		// target item must exist...
		$res = mysql_query("SELECT `pos` FROM `user_items` WHERE `pos`=".$ww_pos." AND `fach`='".$userdata['beutel_fach']."' AND `otid`=".$userdata['user_id'].";");
		if (mysql_num_rows($res) == 1)
		{
			$item = mysql_fetch_assoc($res);

			// find the next position higher
			$res = mysql_query("SELECT `pos` FROM `user_items` WHERE `pos`<".$item['pos']." AND `fach`='".$userdata['beutel_fach']."' ORDER BY `pos` ASC;");

			// if there is no item one position higher the target item it simply was a glinch try
			if (mysql_num_rows($res) != 0)
			{
				// new position
				$nxt = mysql_result($res, 0);

				// swap position with item one higher
				mysql_query("UPDATE `user_items` SET `pos`=0 WHERE `pos`=".$ww_pos.";");
				mysql_query("UPDATE `user_items` SET `pos`=".$ww_pos." WHERE `pos`=".$nxt.";");
				mysql_query("UPDATE `user_items` SET `pos`=".$nxt." WHERE `pos`=0;");
			}
		}
	}

	// Bestimmtes Item vor Auflistung eine Position tiefer setzen, wenn gültige Parameter dafür mitgebracht.
	// -> tms don't let change their position because their position constitutes which tm it is
	if (isset($HTTP_GET_VARS['pos_down']) and $userdata['beutel_fach']!='tms')
	{
		$ww_pos = $HTTP_GET_VARS['pos_down'];

		// target item must exist...
		$res = mysql_query("SELECT `pos` FROM `user_items` WHERE `pos`=".$ww_pos." AND `fach`='".$userdata['beutel_fach']."' AND `otid`=".$userdata['user_id'].";");
		if (mysql_num_rows($res) == 1)
		{
			$item = mysql_fetch_assoc($res);

			// find the next position upper
			$res = mysql_query("SELECT `pos` FROM `user_items` WHERE `pos`>".$item['pos']." AND `fach`='".$userdata['beutel_fach']."' ORDER BY `pos` ASC;");

			// if there is no item one position lower the target item it simply was a glinch try
			if (mysql_num_rows($res) != 0)
			{
				// new position
				$nxt = mysql_result($res, 0);

				// swap position with item one lower
				mysql_query("UPDATE `user_items` SET `pos`=0 WHERE `pos`=".$ww_pos.";");
				mysql_query("UPDATE `user_items` SET `pos`=".$ww_pos." WHERE `pos`=".$nxt.";");
				mysql_query("UPDATE `user_items` SET `pos`=".$nxt." WHERE `pos`=0;");
			}
		}
	}
}


// bag subject name to show
switch ($userdata['beutel_fach'])
{
	case 'baelle':
		$bag_subject = 'Bälle';
	break;
	case 'basis-items':
		$bag_subject = 'Basis-Items';
	break;
	case 'beeren':
		$bag_subject = 'Beeren';
	break;
	case 'tms':
		$bag_subject = 'TM´s';
		break;
	default:
		$userdata['beutel_fach'] = 'allgemein';
		$bag_subject = 'Allgemeine Items';
}


// get ready template before parsing
$template = new Template($phpbb_root_path.'templates/ps_grassgreen/');
$template->set_filenames(array(
	'world_bag'	=>	'world_bag.tpl'
));
$template->assign_vars(array(
	'BAG_SUBJECT'	=>	$bag_subject
));
$template->assign_block_vars('switch_allgemein_disabled', array());
$template->assign_block_vars('switch_baelle_disabled', array());
$template->assign_block_vars('switch_beeren_disabled', array());
$template->assign_block_vars('switch_basis-items_disabled', array());
$template->assign_block_vars('switch_tms_disabled', array());


// Array füllen und Menü zum aufzulistenden Eintrag in den Quelltext schreiben.
$res = mysql_query("SELECT `pos`, `name`, `menge` FROM `user_items` WHERE `fach`='".$userdata['beutel_fach']."' AND `otid`=".$userdata['user_id']." ORDER BY `pos` ASC;");
while ($item = mysql_fetch_assoc($res))
{
	// create actmenu for current item
	include ($phpbb_root_path . 'includes/world_bag_createactbox.'.$phpEx);

// --- platzhalter ---
	// Menü für Anzahl der wegzuwerfenden Items.
	echo '
	<div class="wahlbox" id="wegwerfen_'.$item['pos'].'" width="140px" align="left">
	Wieviele "'.$item['name'].'" möchtest du wegwerfen?<br>

	<input type="hidden" id="wegwerfen_'.$item['pos'].'_pos" value="'.$item['pos'].'">
	<select id="wegwerfen_'.$item['pos'].'_menge">
	';
	for ($o = 1; $o <= $item['menge']; $o++)
	{
		echo '<option value="'.$o.'">'.str_pad($o, 2, 0, 0).'</option>';
	}
	echo '
	</select><br>

	[<a href="#" onclick="wegwerfen('.$c.'); return false;">wegwerfen</a>] [<a href="#" onclick="document.getElementById(\'wegwerfen_'.$c.'\').style.display=\'none\'; return false;">abbrechen</a>]
	</div>
	';
// --- platzhalter ---

	// assign to listing in template
	$template->assign_block_vars('itemRow', array(
		'pos'		=>	$item['pos'],
		'name'	=>	($userdata['beutel_fach']=='tms')?'TM'.str_pad($item['pos'], 2, 0, 0):$item['name'],
		'quantity'	=>	$item['menge']
	));
}


// print body
$template->pparse('world_bag');


// print page tail
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>
Ich denke, wenn ich mit der assign_block_vars-Methode dem
template-Objekt ein leeres Array zuweise für
switch_allgemein_disabled, ist
<span class="genmed">Allgemeine Items</span>
einmal im Quelltext.


// edit
Es lag am Bindestrich basis-items,
das Template-Objekt hat was gegen Bindestriche.