Pagina 1 van 1

MOD-pagina bouwen

Geplaatst: 08 apr 2004, 17:26
door Hans Kamp
Hoe bouw je een MOD-pagina? Je hebt een tabel die je wilt tonen met een door de gebruiker gekozen stijl.

Stel ik heb de volgende SQL-opdracht:

Code: Selecteer alles

CREATE TABLE `phpbb_diablo2_character` ( 
  `char_name` varchar(255) NOT NULL default '', 
  `level` int(11) NOT NULL default '0', 
  ... 
  PRIMARY KEY  (`char_id`) 
) TYPE=MyISAM AUTO_INCREMENT=1 ; 

CREATE TABLE `phpbb_diablo2_char_class` ( 
  `class_name` varchar(255) NOT NULL default '', 
  ... 
  PRIMARY KEY  (`class_id`) 
) TYPE=MyISAM AUTO_INCREMENT=8 ; 
 
...

SELECT dc.char_name, dc.level, dcc.class_name  
FROM  phpbb_diablo2_character dc, phpbb_diablo2_char_class dcc 
WHERE dc.user_id = GebruikersID
AND dc.class_id = dcc.class_id;
GebruikersID is het ID-nummer van de gebruiker die ingelogd is. De eis voor het bekijken van de gecombineerde tabel is dat je ingelogd bent. Gasten krijgen een inlogscherm voorgeschoteld en moeten eerst inloggen voordat ze de tabel kunnen zien.

Hoe bouw je een .PHP- en een .TPL bestand op rond de informatie die door de bovenstaande SELECT-opdracht wordt weergegeven?

Later wil ik een pagina toevoegen waarin een ingelogde gebruiker een karakter kan toevoegen. Hij kan de naam en de klasse van het karakter aangeven.

Geplaatst: 08 apr 2004, 18:19
door mosymuis
Op je SQL verhaal heb ik even geen commentaar, het lijkt me weinig logisch maar je zult wel weten waar je mee bezig bent. ;)

Wat betreft die nieuwe pagina's:
http://www.phpbb.com/phpBB/viewtopic.php?t=142506

Geplaatst: 08 apr 2004, 18:41
door Hans Kamp
Bedankt, Mosymuis. Ik zal je t.z.t. laten weten of ik nog vragen heb. Het is in elk geval een goed begin.

Wat dat SQL betreft: ik vergat te vermelden dat de tabel phpbb_diablo2_character een veld class_id heeft die verwijst naar de klasse van het karakter.

Geplaatst: 08 apr 2004, 19:23
door Hans Kamp
Ik heb (gebruik makend van je bovenstaande link het volgende in elkaar gefabriekt):

1. Ik heb de volgende SQL uitgevoerd... Ik begin heel eenvoudig met twee personen in een NAW-lijst, je kent dat wel, naam, adres, woonplaats:

Code: Selecteer alles

CREATE TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  `naam` varchar(255) NOT NULL default '',
  `adres` varchar(255) NOT NULL default '',
  `postcode` varchar(255) NOT NULL default '',
  `woonplaats` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;

#
# Gegevens worden uitgevoerd voor tabel `test`
#

INSERT INTO `test` VALUES (1, 'Hans', 'Wilhelminastraat 60', '7511 DP', 'Enschede');
INSERT INTO `test` VALUES (2, 'Pietje Puk', 'Langestraat 1234', '1000 AA', 'Lutjebroek');
2. Ik heb het bestand naw.php gescreven m.b.v. de templates die te vinden waren bij het topic dat je me gaf. Het bestand is:

Code: Selecteer alles

<?php 

// standard hack prevent 
define('IN_PHPBB', true); 
$phpbb_root_path = './'; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 

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

// set page title 
$page_title = $lang['Index'];

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

// read naw

$sql = "select * from test";

if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Kan geen NAW-gegevens vinden', '', __LINE__, __FILE__, $sql);
}

while( $row = $db->sql_fetchrow($result) )
{
	echo "Naam: " . $row["naam"];
	echo "Adres: " . $row["adres"];
	echo "Postcode: " . $row["postcode"];
	echo "Woonplaats: " . $row["woonplaats"];
	echo "";
}


// assign template 
$template->set_filenames(array( 
        'body' => 'naw.tpl') 
); 

$template->pparse('body'); 

// standard page footer 
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 

?>
3. In root/templates/fiblack3d/naw.tpl staat:

Code: Selecteer alles

<HTML>
CONTENT GOES HERE
<HTML>
De echo-opdrachten heb ik gebruikt om het uitlezen uit de database te testen, hetgeen dus gelukt is...

http://www.diablo2forum.nl//screenshots/naw.jpg

Maar nu komt het: Ik wil de zaak graag in mooie PHPBB-tabellen en op de wijze zoals de rest van het forum geprogrammeerd is. Nu is mijn vraag hoe dat mechanisme werkt.

Geplaatst: 08 apr 2004, 19:27
door mosymuis
Dat leer je vanzelf als je delen uit de bestaande TPL's copy-paste, op die manier maak je geen fouten in de classes en tabelstructuur. ;)

Geplaatst: 08 apr 2004, 22:26
door Hans Kamp
Zo, ik heb nu het een en ander voor elkaar gekregen. Voor de lurkers de volgende bestanden:

In naw.php staat:

Code: Selecteer alles

<?php 

// standard hack prevent 
define('IN_PHPBB', true); 
$phpbb_root_path = './'; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 

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

// set page title 
$page_title = $lang['Index'];

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

// read naw

$sql = "select * from test";

if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}

$template->assign_vars(array(
	'L_NAAM' => 'Naam',
	'L_ADRES' => 'Adres',
	'L_POSTCODE' => 'Postcode',
	'L_WOONPLAATS' => 'Woonplaats')
);

$i = 0;

while( $row = $db->sql_fetchrow($result) )
{
	$naam = $row['naam'];
	$adres = $row['adres'];
	$postcode = $row['postcode'];
	$woonplaats = $row['woonplaats'];

	$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
	$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];

	$template->assign_block_vars('naamregel', array(
		'ROW_COLOR' => $row_color,
		'ROW_CLASS' => $row_class,

		'NAAM' => $naam,
		'ADRES' => $adres,
		'POSTCODE' => $postcode,
		'WOONPLAATS' => $woonplaats));

	$i = $i + 1;
}

// assign template 
$template->set_filenames(array( 
        'body' => 'naw.tpl') 
); 

$template->pparse('body'); 

// standard page footer 
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 

?>
In templates/fiblack3d/naw.tpl staat

Code: Selecteer alles

<table width="100%" cellpadding="2" cellspacing="1" border="0" class="forumline">
<tr>
	<th>{L_NAAM}</th>
	<th>{L_ADRES}</th>
	<th>{L_POSTCODE}</th>
	<th>{L_WOONPLAATS}</th>
</tr>

<!-- BEGIN naamregel -->
<tr>
<td class="{naamregel.ROW_CLASS}" align="center">{naamregel.NAAM}</td>
<td class="{naamregel.ROW_CLASS}" align="center">{naamregel.ADRES}</td>
<td class="{naamregel.ROW_CLASS}" align="center">{naamregel.POSTCODE}</td>
<td class="{naamregel.ROW_CLASS}" align="center">{naamregel.WOONPLAATS}</td>
<!-- END naamregel -->
</table>
Het resultaat is te zien op

http://www.diablo2forum.nl/naw.php

In

Code: Selecteer alles

$template->assign_vars(array( 
   'L_NAAM' => 'Naam', 
   'L_ADRES' => 'Adres', 
   'L_POSTCODE' => 'Postcode', 
   'L_WOONPLAATS' => 'Woonplaats') 
gebruik ik tabelkoppen. Voor het gemak gebruik ik stringconstanten.

In

Code: Selecteer alles

   $template->assign_block_vars('naamregel', array( 
      'ROW_COLOR' => $row_color, 
      'ROW_CLASS' => $row_class, 

      'NAAM' => $naam, 
      'ADRES' => $adres, 
      'POSTCODE' => $postcode, 
      'WOONPLAATS' => $woonplaats)); 
staat een stuk dat steeds herhaald wordt. Het staat ook in de while-lus die per gevonden regel in de SQL-tabel doorlopen wordt.

"naamregel" is een blokvariabele. In het .TPL bestand wordt het herhalende gedeelte geplaatst tussen <!-- BEGIN naamregel --> en <!-- END naamregel -->

Daartussen staan velden tussen accolades. De blokvariabele wordt daarbinnen gevolgd door een punt en een labelvariabele.

{naamregel.NAAM} is steeds de naam die gevonden wordt. Dat verandert natuurlijk per rij.

Geplaatst: 09 apr 2004, 11:04
door Hans Kamp
Ik heb trouwens een rare fout.

Ik heb twee .PHP-bestanden. De inhoud is identiek. De ene heet diablo2_characters2.php en de ander heet diablo2_characters.php.

Ik upload ze.

De ene werkt goed, en de andere geeft een foutmelding:
phpBB : Critical Error

Could not connect to the database
Rara, hoe kan dat???

Deze fout is alweer opgelost...

Geplaatst: 22 sep 2004, 07:16
door MarlyNL
Hallo,
Ga je jou mod ook te downloaden zetten?