BEGIN itemRow - template-Objekt

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Sv€n
Mitglied
Beiträge: 10
Registriert: 20.05.2007 14:23

BEGIN itemRow - template-Objekt

Beitrag 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);
?>
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Sehr gut..... *thumbs up*
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Sv€n
Mitglied
Beiträge: 10
Registriert: 20.05.2007 14:23

Beitrag 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.
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“