Pagina 1 van 1

Templates, Variabelen, Blockvariabele

Geplaatst: 24 jan 2005, 16:37
door djrandall
Hoi mede phpbb-ers.

Wat fijn dat je weer de moeite hebt genomen om mijn probleem eens door te spitten. Hoewel probleem, het is meer een tekort aan kennis. En ik hoop dat jullie mij gaan helpen de juiste kennis te vergaren. Ik wil namelijk echt eens gaan duiken in de wereld van de phpbb templates en wat er allemaal mee kan.

Een paar dingen zijn me gelijk opgevallen. ( Ik ga in dit geval even uit van Smartors EzPortal). In Portal.php staan een aantal gedefinieerde variabelen:

Code: Selecteer alles

$template->assign_vars(array(
	'WELCOME_TEXT' => $CFG['welcome_text'],
	'TOTAL_POSTS' => sprintf($l_total_post_s, $total_posts),
Ik zie nu in het template portal_body.tpl dat deze variabelen in het template aangeroepen kunnen worden d.m.v.

Code: Selecteer alles

{WELCOM_TEXT}
en

Code: Selecteer alles

{TOTAL_POSTS}
Tot zover duidelijk.....
Nu zie ik ook dat in "loops"

Code: Selecteer alles

$template->assign_block_vars('recent_topic_row', array(
		'U_TITLE' => append_sid("viewtopic.$phpEx?" . POST_POST_URL . '=' . $recent_topic_row[$i]['post_id']) . '#' .$recent_topic_row[$i]['post_id'],
		'L_TITLE' => $recent_topic_row[$i]['topic_title'],
wordt gebruikt. Als de query geen resultaten oplevert wordt de loop niet doorlopen en dus array dus niet gevuld.
In de template heeft dat als resultaat dat alles tussen:

Code: Selecteer alles

		  <!-- BEGIN 'recent_topic_row -->
		  <br />
		  <!-- END 'recent_topic_row -->
niet zichtbaar is.
Is mijn inzicht tot op heden correct? Ik hoop het wel.
Het is namelijk zo dat leden in hun profiel op mn site kunnen instellen welke blokken ze willen zien. Dat is heel leuk, maar ik heb het zo gedaan, dat het:
1. Niet netjes geprogrammeerd is
2. Volgens mij daarom dus langzaam
3. Niet >1 stylen vriendelijk.

Tijd om dat eens om te bouwen dus.

Voorbeeld met een "wie waren de laatste 24 online MOD":

portal.php:

Code: Selecteer alles

// Start add - Last visit MOD
$lastvisit = "";
if ( $showwieonline==1 ) {
$time_now=time();
$time1Hour=$time_now-3600;
$minutes = date('is', $time_now);
$hour_now = $time_now - (60*($minutes[0].$minutes[1])) - ($minutes[2].$minutes[3]); 
$dato=create_date('H', $time_now,$board_config['board_timezone']);
$timetoday = $hour_now - (3600*$dato); 
$sql = 'SELECT session_ip, MAX(session_time) as session_time FROM '.SESSIONS_TABLE.' WHERE session_user_id="'.ANONYMOUS.'" AND session_time >= '.$timetoday.' AND session_time< '.($timetoday+86399).' GROUP BY session_ip';
if (!$result = $db->sql_query($sql)) message_die(GENERAL_ERROR, "Couldn't retrieve guest user today data", "", __LINE__, __FILE__, $sql); 
while( $guest_list = $db->sql_fetchrow($result))
{ 
	if ($guest_list['session_time'] >$time1Hour) $users_lasthour++;
}
$guests_today = $db->sql_numrows($result);
$sql = 'SELECT user_id,username,user_allow_viewonline,user_level,user_lastlogon FROM ' . USERS_TABLE . ' WHERE user_id!="'.ANONYMOUS.'" AND user_session_time >= '.$timetoday.' AND user_session_time< '.($timetoday+86399).' ORDER BY username'; 
if (!$result = $db->sql_query($sql)) message_die(GENERAL_ERROR, "Couldn't retrieve user today data", "", __LINE__, __FILE__, $sql); 
while( $todayrow = $db->sql_fetchrow($result)) 
{ 
	$style_color = ""; 
	if ($todayrow['user_lastlogon']>=$time1Hour)
	{
		$users_lasthour++;
	}
	switch ($todayrow['user_level'])
	{
		case ADMIN :
		      $todayrow['username'] = '<b>' . $todayrow['username'] . '</b>'; 
      		$style_color = 'style="color:#' . $theme['fontcolor3'] . '"';
			break;
		case MOD :
		      $todayrow['username'] = '<b>' . $todayrow['username'] . '</b>'; 
      		$style_color = 'style="color:#' . $theme['fontcolor2'] . '"';
			break;
	}
 	$users_today_list.=( $todayrow['user_allow_viewonline'])?' <a title="' . create_date($board_config['default_dateformat'], $todayrow['user_lastlogon'], $board_config['board_timezone']) . '" href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $todayrow['user_id']) . '"' . $style_color .'>' . $todayrow['username'] . '</a>,' : (($userdata[user_level]==ADMIN) ? ' <a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $todayrow['user_id']) . '"' . $style_color .'><i>' . $todayrow['username'] . '</i></a>,' : '');
	if (!$todayrow['user_allow_viewonline']) $logged_hidden_today++;
	else $logged_visible_today++;
}
if ($users_today_list) 
{
	$users_today_list[ strlen( $users_today_list)-1] = ' '; 
} else
{
	$users_today_list = $lang['None'];
}
$total_users_today = $db->sql_numrows($result)+$guests_today;

$users_today_list = $lang['Registered_users'].' ' . $users_today_list;
$l_today_user_s = ($total_users_today) ? ( ( $total_users_today == 1 )? $lang['User_today_total'] : $lang['Users_today_total'] ) : $lang['Users_today_zero_total'];
$l_today_r_user_s = ($logged_visible_today) ? ( ( $logged_visible_today == 1 ) ? $lang['Reg_user_total'] : $lang['Reg_users_total'] ) : $lang['Reg_users_zero_total'];
$l_today_h_user_s = ($logged_hidden_today) ? (($logged_hidden_today == 1) ? $lang['Hidden_user_total'] : $lang['Hidden_users_total'] ) : $lang['Hidden_users_zero_total'];
$l_today_g_user_s = ($guests_today) ? (($guests_today == 1) ? $lang['Guest_user_total'] : $lang['Guest_users_total']) : $lang['Guest_users_zero_total'];
$l_today_users = sprintf($l_today_user_s, $total_users_today);
$l_today_users .= sprintf($l_today_r_user_s, $logged_visible_today); 
$l_today_users .= sprintf($l_today_h_user_s, $logged_hidden_today); 
$l_today_users .= sprintf($l_today_g_user_s, $guests_today);

$userl_last_hour = ($users_lasthour)?sprintf($lang['Users_lasthour_explain'],$users_lasthour):$lang['Users_lasthour_none_explain'];

$lastvisit = "<!-- Start add - Last visit MOD -->
<table width='100%' cellpadding='2' cellspacing='1' border='0' class='forumline'>
 <tr>
  <td class='catHead' height='25'><span class='genmed'><b>Wie waren online de afgelopen 24 uur</b></span></td>
 </tr>
 <tr>
  <td class='row1' align='left'><span class='gensmall'>".$l_today_users."&nbsp;".$user_last_hour."<br />".$users_today_list."</br></span></td>
 </tr>
</table>	
<!-- End add - Last visit MOD -->";
}
// End add - Last visit MOD

$template->assign_vars(array(
	'LASTVISIT' => $lastvisit,
portal_body.tpl:

Code: Selecteer alles

{LASTVISIT}
Nu wil ik dit dus beter doen door de Statische HTML weer terug te plaatsen in de tpl file, maar daar dus een block variabele van te maken. Dat die dus idd ook niet wordt weergegeven op het moment dat de user dat niet wenst!

Wie wil me helpen door een simpel voorbeeld te geven? Wie wil me helpen me meer inzicht te geven hierin?

Bedankt voor je aandacht en je eventuele inzet.

Geplaatst: 25 jan 2005, 16:38
door Luuk
het eerste gedeelte wat je hebt getypt klpot volgens mij allemaal :wink:

Ik weet niet of je die mod voor het laten zien van gebruikers zelf hebt gemaakt, maar het is niet helemaal handig gescript. Vooral het eerste gedeelte voor de tijd. Misschien heb je hier dan wat aan http://www.phpbbhacks.com/download/770
Die kun je verbouwen naar wat je wilt hebben.
Je moet dan wel nog na de check of iemand het op ja heeft staan iets als

Code: Selecteer alles

$template->assign_block_vars('switch_last_visit', array());
plaatsen in de code, dan kun je in het tpl <!-- BEGIN switch_last_visit --> en <!-- END ... --> gebruiken. Als een gebruiker de switch op nee heeft gezet wordt de html tussen de twee stukken genegeerd (zelfde als bij de switch van user_logged_in ).