MOD-pagina bouwen

Hulp nodig bij een modificaties of op zoek naar een MOD? Bekijk ons archief. Support wordt helaas niet meer verleend.
Forumregels

Sinds 1 januari 2009 wordt phpBB2 niet meer ondersteund.
Onderstaande informatie is verouderd en dient uitsluitend als archief.
phpBB2.0.x
Gesloten
Hans Kamp
Berichten: 470
Lid geworden op: 17 jan 2004, 08:39
Locatie: Enschede

MOD-pagina bouwen

Bericht door Hans Kamp » 08 apr 2004, 17:26

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.

Gebruikersavatar
mosymuis
Berichten: 6940
Lid geworden op: 05 feb 2003, 14:00
Locatie: Amsterdam
Contacteer:

Bericht door mosymuis » 08 apr 2004, 18:19

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

Hans Kamp
Berichten: 470
Lid geworden op: 17 jan 2004, 08:39
Locatie: Enschede

Bericht door Hans Kamp » 08 apr 2004, 18:41

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.

Hans Kamp
Berichten: 470
Lid geworden op: 17 jan 2004, 08:39
Locatie: Enschede

Bericht door Hans Kamp » 08 apr 2004, 19:23

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.

Gebruikersavatar
mosymuis
Berichten: 6940
Lid geworden op: 05 feb 2003, 14:00
Locatie: Amsterdam
Contacteer:

Bericht door mosymuis » 08 apr 2004, 19:27

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. ;)

Hans Kamp
Berichten: 470
Lid geworden op: 17 jan 2004, 08:39
Locatie: Enschede

Bericht door Hans Kamp » 08 apr 2004, 22:26

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.

Hans Kamp
Berichten: 470
Lid geworden op: 17 jan 2004, 08:39
Locatie: Enschede

Bericht door Hans Kamp » 09 apr 2004, 11:04

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

MarlyNL
Berichten: 454
Lid geworden op: 06 feb 2004, 22:14
Locatie: Achterhoek
Contacteer:

Bericht door MarlyNL » 22 sep 2004, 07:16

Hallo,
Ga je jou mod ook te downloaden zetten?

Gesloten