[Add on] optimisation index.php

Image Forum d'échange de codes et astuces ..
Verrouillé
     
Avatar du membre

Auteur du sujet
zach
Support phpBB Assistance
Support phpBB Assistance
Messages : 1313
Enregistré le : décembre 2010

[Add on] optimisation index.php

Message par zach » dim. 30 oct. 2011 21:29

Salut

une petite optimisation, qui permet de gagner un précieux temps d'affichage en évitant des requêtes assez lourdes souvant inutiles concernant l'affichage des groupes dans la légende, voila ce que phpbb nous charge dans tous les cas :

Code : Tout sélectionner

// Grab group details for legend display
if ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel'))
{
	$sql = 'SELECT group_id, group_name, group_colour, group_type
		FROM ' . GROUPS_TABLE . '
		WHERE group_legend = 1
		ORDER BY group_name ASC';
}
else
{
	$sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type
		FROM ' . GROUPS_TABLE . ' g
		LEFT JOIN ' . USER_GROUP_TABLE . ' ug
			ON (
				g.group_id = ug.group_id
				AND ug.user_id = ' . $user->data['user_id'] . '
				AND ug.user_pending = 0
			)
		WHERE g.group_legend = 1
			AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $user->data['user_id'] . ')
		ORDER BY g.group_name ASC';
}
$result = $db->sql_query($sql);

$legend = array();
while ($row = $db->sql_fetchrow($result))
{
	$colour_text = ($row['group_colour']) ? ' style="color:#' . $row['group_colour'] . '"' : '';
	$group_name = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];

	if ($row['group_name'] == 'BOTS' || ($user->data['user_id'] != ANONYMOUS && !$auth->acl_get('u_viewprofile')))
	{
		$legend[] = '<span' . $colour_text . '>' . $group_name . '</span>';
	}
	else
	{
	  // www.phpBB-SEO.com SEO TOOLKIT BEGIN
		$phpbb_seo->prepare_url('group', $row['group_name'], $row['group_id']);
		// www.phpBB-SEO.com SEO TOOLKIT END
		$legend[] = '<a' . $colour_text . ' href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&g=' . $row['group_id']) . '">' . $group_name . '</a>';
	}
}
$db->sql_freeresult($result);

$legend = implode(', ', $legend);
un bon "left join" (entre autres) réputé pour sa gourmandise de tps d'affichage, le prb est que d'origine que l'on affiche ces groupes ou pas, les requêtes sont lancées, or la nous allons ajouter une option dans l'acp pour désactiver la légende et surtout aussi ses requêtes ....

MOD LEGEND DISPLAY SQL OPTIMISATION

SQL

Code : Tout sélectionner

INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_groups_leg', '0');
Open: includes/acp/acp_board.php
Find:

Code : Tout sélectionner

'load_birthdays'		=> array('lang' => 'YES_BIRTHDAYS',			'validate' => 'bool',	'type' => 'radio:yes_no', 'explain' => true),
Add after:

Code : Tout sélectionner

// mod perso groups legend optimization
'load_groups_leg'		=> array('lang' => 'YES_GROUPSLEGEND',			'validate' => 'bool',	'type' => 'radio:yes_no', 'explain' => false),
// mod perso groups legend optimization
Open: language/fr/acp/board.php

Find : Add before :

Code : Tout sélectionner

// mod perso groups legend optimization
$lang = array_merge($lang, array(
  'YES_GROUPSLEGEND'		=> 'Activer l’affichage de la légende des groupes',
));
Open: index.php

Find :

Code : Tout sélectionner

// Grab group details for legend display
Add before:

Code : Tout sélectionner

// mod perso groups legend optimization
if ($config['load_groups_leg'])
{
Find :

Code : Tout sélectionner

$legend = implode(', ', $legend);
Add after:

Code : Tout sélectionner

// Assign index specific vars
$template->assign_vars(array(
	'LEGEND'		=> $legend,
));
}
Find :

Code : Tout sélectionner

'LEGEND'		=> $legend, déplacé au dessus

Remplacer par :

Code : Tout sélectionner

// 'LEGEND'		=> $legend, déplacé mod perso groups legend optimization
Ensuite dans l'acp > Fonctionnalités du forum l'option est présente :

Image

:vivepa:

Avatar du membre

EnYgmA
Administrateur phpBB Assistance
Administrateur phpBB Assistance
Messages : 8645
Enregistré le : avril 2010
Hébergeur(s) : Monarobase
Localisation : Lyon
Contact :

Re: [Add on] optimisation index.php

Message par EnYgmA » lun. 31 oct. 2011 06:58

Thx mon grand :cool:
Conditions générales de services - Conditions générales de support - C.G.U
Merci de mettre un titre de sujet explicite pour toutes vos demandes de support
Référencement gratuit - Forum informatique

Avatar du membre

Auteur du sujet
zach
Support phpBB Assistance
Support phpBB Assistance
Messages : 1313
Enregistré le : décembre 2010

Re: [Add on] optimisation index.php

Message par zach » mar. 1 mai 2012 09:06

:vivepa: on peut aussi "alléger les requêtes d'affichage" de cette façon

Code : Tout sélectionner

// mod perso groups legend optimization
if ($config['load_groups_leg'])
{
// Grab group details for legend display
$sql = 'SELECT group_id, group_name, group_colour, group_type, group_legend
		FROM ' . GROUPS_TABLE . '
		WHERE group_legend = 1
		AND group_type <> 2 
		ORDER BY group_name ASC';

$result = $db->sql_query($sql);

$legend = array();
while ($row = $db->sql_fetchrow($result))
{
	$colour_text = ($row['group_colour']) ? ' style="color:#' . $row['group_colour'] . '"' : '';
	$group_name = ($row['group_type'] == 3) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];

	  // www.phpBB-SEO.com SEO TOOLKIT BEGIN
		$phpbb_seo->prepare_url('group', $row['group_name'], $row['group_id']);
		// www.phpBB-SEO.com SEO TOOLKIT END
		$legend[] = '<a' . $colour_text . ' href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&g=' . $row['group_id']) . '">' . $group_name . '</a>';
}
$db->sql_freeresult($result);

$legend = implode(', ', $legend);

// Assign index specific vars
$template->assign_vars(array(
	'LEGEND'		=> $legend,
));
}
de cette manière on conserve la nouvelle option acp pour supprimer les requêtes et le non affichage de la légende groupe, mais si on met l'option pour permettre l'affichage de la légende groupe

on aura alors une requête simplifiée (sans le left join) qui sera toujours aussi souple, puisqu'elle affichera uniquement les groupes ou l'option d'affichage est cochée (acp > option du groupe), et par sécurité exclura aussi dans tous les cas les groupes cachés

et petite cerise sur le gâteau, si l'on veux l'affichage de la description de chaque groupe, au passage de la souris sur le lien, comme ceci :

Image

on remplacera alors par ceci :

Code : Tout sélectionner

// mod perso groups legend optimization
if ($config['load_groups_leg'])
{
// Grab group details for legend display
$sql = 'SELECT group_id, group_name, group_desc, group_colour, group_type, group_legend
		FROM ' . GROUPS_TABLE . '
		WHERE group_legend = 1
		AND group_type <> 2 
		ORDER BY group_name ASC';

$result = $db->sql_query($sql);

$legend = array();
while ($row = $db->sql_fetchrow($result))
{
	$colour_text = ($row['group_colour']) ? ' style="color:#' . $row['group_colour'] . '"' : '';
	$group_name = ($row['group_type'] == 3) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
  
	  // www.phpBB-SEO.com SEO TOOLKIT BEGIN
		$phpbb_seo->prepare_url('group', $row['group_name'], $row['group_id']);
		// www.phpBB-SEO.com SEO TOOLKIT END
		$legend[] = '<a' . $colour_text . ' href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&g=' . $row['group_id']) . '" title="'.$row['group_desc'].'">' . $group_name . '</a>';
}
$db->sql_freeresult($result);

$legend = implode(', ', $legend);

// Assign index specific vars
$template->assign_vars(array(
	'LEGEND'		=> $legend,
));
}
:kiss1:

nb : ne pas reporter les 3 lignes "//http://www.phpBB-SEO.com SEO TOOLKIT" pour les non concernés bien sur

Verrouillé

Retourner vers « Codes , Astuces , Add-ons »