Perso Web PMI Prog Réseaux sociaux Développement Etudes OS Sécurité Infographie Mobiles Référencement iPhone Apple Scrum

02 nov. 2011

Symfony 2 sous Mac OS X avec MAMP

Horaire de publication 19:29 Icone Auteur Jean-Christophe Duvivier

Mots Clés bundle, framework, Mac, Symfony2, terminal,

Symfony 2 sous Mac OS X

M'étant récemment lancé sur Symfony 2, je me suis heurté à quelques difficultés techniques lors du démarrage du projet. Développant sur Mac OS X, voici quelques erreurs que vous serez peut-être amené à rencontrer si vous vous intéressez à ce framework.

Lire la suite...

16 déc. 2010

PHP Solutions, votre magazine numérique PHP gratuit

Horaire de publication 12:53 Icone Auteur Jean-Christophe Duvivier

Mots Clés Magazine, PHP, PHP Solutions,

PHP Solutions, votre magazine numérique PHP gratuit

À l'heure où les magazines spécialisés dans l'informatique se font rares, j'aimerais vous parler de PHP Solutions, un magazine numérique gratuit entièrement consacré au PHP.

Lire la suite...

Mettre en place un bridge entre Joomla 1.5 et PHPBB 3 avec JFusion

Ayant eu à mettre en place ce type d'installation sur un de mes projets et m'étant heurté à quelques difficultés, j'ai décidé de vous en faire part avec d'espérer résoudre vos problèmes et ainsi optimiser votre temps de travail ;)

Tout d'abord le contexte. Le contexte dans lequel je me trouve est assez précis, aussi il conviendra à certains d'entre vous, mais pas à d'autres (cela dit, les "autres" ne devraient pas avoir de problème avec leur installation en se référant aux tutos de base disponibles sur la toile).

Je vais vous montrer comment mettre en place un brige entre Joomla 1.5 (paramétré en slave) et PHPBB 3 (paramétré en master et accessible via un sous-domaine) grâce au composant JFusion. Dans le meilleur des cas, le dual login avec cette configuration fonctionne dans un sens (Joomla > PHPBB) mais pas dans l'autre. Ou alors cela fonctionne sur IE mais pas sur FF ou Chrome. Bref, grâce à ce tuto, tous ces petits soucis devraient disparaître.

Lire la suite...

29 oct. 2009

PHPBB Gallery, calculer la moyenne des notes obtenues

Horaire de publication 11:12 Icone Auteur Jean-Christophe Duvivier

Mots Clés Dotclear, Forum, PHP, PHPBB, Plugins,

Logo PHPBBÉtant en train de mettre en place un forum PHPBB, je me suis rapidement confronté aux problèmes d'ajout de modules qui, sur PHPBB, sont loin d'être automatisés. Ayant pris l'habitude des installations de plugins sous Dotclear, ça change... Bref. Il m'était nécessaire d'installer un module de gestion de galerie et je me suis tourné vers PHPBB Gallery qui connaît une certaine popularité. Après 60 minutes de procédure d'installation et après avoir découvert les fonctionnalités de cet excellent module, je me suis heurté à quelques difficultés. En effet, ce module étant doté d'un système de notation, je voulais afficher la note moyenne de chaque membre pour toutes les photos qu'il a mis en ligne, afin que chacun sache où se situer en terme de "performance". Malheureusement, cette fonctionnalité n'est pas disponible de base, dans la version 1.0.3. Je l'ai donc développée.

PHPBB Gallery - Moyenne des notes

Voici la procédure :

1. Le traitement

a - Tout d'abord nous allons nous occuper du traitement, c'est à dire le calcul de la moyenne de chaque membre. Pour ceci, rendez-vous à la racine de votre forum et ouvrez le fichier viewtopic.php avec votre éditeur PHP préféré. Cherchez-y le bout de code suivant :

$user_cache[$poster_id] = array(
'joined'		    => '',
'posts'		    => '',

Et remplacez-le par celui-ci :

$user_cache[$poster_id] = array(
'joined'		    => '',
'posts'		    => '',
'rates_average' => '',

On ajoute tout simplement un élément dans le tableau user afin d'y renseigner la moyenne des notes. Ici, on est dans le cas où l'utilisateur qui poste n'a pas de compte, on ne lui attribue donc pas de valeur.

b - Ensuite, recherchez ce code :

$user_sig = '';
// We add the signature to every posters entry because enable_sig is post dependant
if ($row['user_sig'] && $config['allow_sig'] && $user->optionget('viewsigs'))
{
	$user_sig = $row['user_sig'];
}

Et placez-y juste avant (donc au début du else) le code suivant :

// Moyenne des notes
$sql_rates_average = 'SELECT ROUND(AVG(m),1) AS rates_average, rate_image_id FROM 
(SELECT rate_image_id, AVG(rate_point) as m FROM '.GALLERY_RATES_TABLE.' GROUP BY rate_image_id) AS td WHERE 
rate_image_id IN (SELECT image_id FROM '.GALLERY_IMAGES_TABLE.' WHERE image_user_id = '.$poster_id.')';
$result_rates_average = $db->sql_query($sql_rates_average);
$row_rates_average = $db->sql_fetchrow($result_rates_average);
$user_rates_average = $row_rates_average['rates_average'];
$db->sql_freeresult($result_rates_average);

C'est tout simplement la requête SQL qui va récupérer les notes de toutes les photos de chaque utilisateur et va en faire la moyenne. À noter que la moyenne est calculée en fonction des moyennes de chaque photo et non pas en fonction de toutes les notes reçues par l'utilisateur.

c - Ensuite, recherchez ce code :

$user_cache[$poster_id] = array(
'joined'		=> $user->format_date($row['user_regdate']),
'posts'		=> $row['user_posts'],

Et remplacez-le par celui-ci :

$user_cache[$poster_id] = array(
'joined'			=> $user->format_date($row['user_regdate']),
'posts'			=> $row['user_posts'],
'rates_average' 	=> $user_rates_average,

Comme dans l'étape a, cette étape consiste à rajouter un élément dans le tableau de l'utilisateur afin de lui attribuer sa moyenne de notes. Il s'agit ici des utilisateurs enregistrés, on peut donc leur attribuer une valeur.

d - Enfin, recherchez ce code :

'POSTER_JOINED'		=> $user_cache[$poster_id]['joined'],
'POSTER_POSTS'		=> $user_cache[$poster_id]['posts'],

Et remplacez-le par le code suivant :

'POSTER_JOINED'		=> $user_cache[$poster_id]['joined'],
'POSTER_POSTS'		=> $user_cache[$poster_id]['posts'],
'POSTER_RATES_AVERAGE'	=> $user_cache[$poster_id]['rates_average'],

Ici, on attribue simplement une référence texte à la valeur de la moyenne des notes, afin de l'afficher dans le squelette (c'est une gestion de template ordinaire).

Maintenant que la moyenne de chaque membre est calculée, il reste à l'afficher au bon endroit.

2. L'affichage

e - Tout d'abord, rendez-vous dans le fichier language > fr > common.php et recherchez ce bout de code :

'READING_FORUM'			=> 'Consulte les sujets dans %s',
'READING_GLOBAL_ANNOUNCE'	=> 'Consulte une annonce globale',

Et remplacez-le par celui-ci :

'RATES_AVERAGE'			=> 'Moyenne des notes',
'READING_FORUM'			=> 'Consulte les sujets dans %s',
'READING_GLOBAL_ANNOUNCE'	=> 'Consulte une annonce globale',

Encore une fois, on attribue une référence à une chaîne de caractère afin de l'afficher dans le squelette.

f - Ensuite, rendez-vous dans styles > votre style (prosilver par exemple) > template > viewtopic_body.html et recherchez ce bout de code :

<!-- IF postrow.POSTER_POSTS != '' --><dd><strong>{L_POSTS}:</strong> {postrow.POSTER_POSTS}</dd><!-- ENDIF -->

et remplacez-le par celui-ci :

<!-- IF postrow.POSTER_POSTS != '' --><dd><strong>{L_POSTS}:</strong> {postrow.POSTER_POSTS}</dd><!-- ENDIF -->
<!-- IF postrow.POSTER_RATES_AVERAGE != '' --><dd><strong>{L_RATES_AVERAGE}:</strong> 
{postrow.POSTER_RATES_AVERAGE}</dd><!-- ENDIF -->

Ici, on renseigne tout simplement nos références dans notre squelette, ce qui permet d'afficher toutes nos informations.

La manipulation est terminée ! Théoriquement, vous devriez voir la moyenne des notes de chaque membre en dessous leur avatar (comme sur l'image en haut du billet), sous réserve qu'ils aient posté des photos et que celles-ci aient été notées ;).

Si vous avez des questions et/ou des remarques, n'hésitez pas !

31 déc. 2008

Noobslide, un slideshow pour vos photos

Horaire de publication 12:37 Icone Auteur Jean-Christophe Duvivier

Mots Clés Application, Frameworks, Masques, Mootools, Slideshow,

Icone MootoolsAprès quelques jours de silence, j'ai envie de vous faire découvrir noobslide, un Slideshow basé sur le Frameworks Mootools. "Découvrir" sous-entend "mini tuto", je vais me contenter d'une brève présentation qui je l'espère vous poussera à l'utiliser ;)

Sans plus attendre je vous invite sur le site efectorelativo.net qui propose 8 exemples d'utilisation de noobslide. Les effets sont variés et beaux visuellement.

1. Mise en place des scripts :

La mise en place du Slideshow est vraiment très simple.

Tout d'abord il faut inclure le script Mootools, et le script noobslide :

<script type="text/javascript" src="site/js/mootools.js"></script>
<script type="text/javascript" src="site/js/noobslide.js"></script>

Ensuite, insérez le script spécifique à votre modèle de noobslide dans le head. Il sera exécuté au chargement de votre page. Pour le modèle 1, cela donne ça :

window.addEvent('domready',function(){
 
var nS1 = new noobSlide({
box: $('box1'),
items: [0,1,2,3],
size: 480,
autoPlay: true
});
 
});

Vous pouvez récupérer le code correspondant à votre modèle directement dans le code source du site efectorelativo.net.

2. Mise en place des styles:

Au niveau des styles, il faut intégrer la feuille de style suivante (n'oubliez pas de supprimer les styles des modèles qui ne vous servent pas)

/* Sample 1*/
#box1{
	position:absolute;
}
#box1 span{
	display:block;
	float:left;
}
 
/* Sample 2*/
#box2{
	position:absolute;
}
#box2 span{
	display:block;
	float:left;
}
 
/* Sample 3*/
#box3{
	position:absolute;
}
#box3 span{
	display:block;
	float:left;
}
 
/* Sample 4*/
#box4{
	position:absolute;
}
#box4 div{
	width:480px;
	height:240px;
	float:left;
	background:#eee;
}
 
#box4 h3, #box4 p, #box4 ul{
	padding:5px 10px;
}
#box4 p{
	text-indent:16px;
}
#box4 img{
	width:200px;
	width:150px;
	float:left;
	margin:0 10px 10px 15px;
}
#info4{
	background:#fff !important;
	color:red !important;
	cursor:default
}
 
/* Sample 5*/
#box5{
	position:absolute;
	width:240px;
}
#box5 span{
	display:block;
}
#info5{
	bottom:0;
}
 
/* Sample 6*/
#box6{
	position:absolute;
	width:240px;
}
#box6 span{
	display:block;
}
#handles6_1{
	float:left
}
#handles6_2{
	float:right
}
.mask6{
	position:absolute;
	left:50%;
	margin-left:-120px;
	width:240px;
	height:180px;
	overflow:hidden;
}
.sample6 .buttons{
	clear:both;
	text-align:center;
}
 
/* Sample 7*/
#box7{
	position:absolute;
}
#box7 span{
	display:block;
	float:left;
}
 
#thumbs7{
	position:relative;
	width:486px;
	clear:both;
	height:41px;
	overflow:hidden;
	margin-top:200px;
}
#thumbs7 .thumbs, #thumbs_handles7, #thumbs_mask7{
	position:absolute;
	top:0;
	width:100%;
	height:41px;
}
#thumbs7 .thumbs div, #thumbs_handles7 span{
	display:block;
	width:60px;
	height:41px;
	margin:0;
	float:left;
	cursor:pointer;
}
#thumbs7 .thumbs div img{
	width:54px;
	float:right;
}
#thumbs_handles7 span{
	background:url(thumb_invisible.gif) no-repeat;
}
#thumbs_mask7{
	width:1200px;
	background:url(thumbs_mask.gif) no-repeat center top;
}
 
/* Sample 8*/
#box8{
	position:absolute;
}
#box8 div{
	width:480px;
	float:left;
}
#box8 .buttons{
	text-align:left
}
#box8 .next{
	float:right
}
.sample8 .buttons{
	text-align:center;
	clear:both;
}
.sample8 .mask1{
	border-top:1px solid #ccc;
	border-bottom:1px solid #ccc;
}
 
/* ********************************** */
 
.thumbs{
	width:54px;
}
.thumbs div{
	display:block;
	width:54px;
	height:41px;
	margin:3px 0;
	cursor:pointer;
}
 
.thumbs div img{
	display:block;
	width:100%;
	height:100%;
	border:none
}
 
.info{
	width:240px;
	height:50px;
	background:#000;
	position:absolute;
}
.info p, .info h4{
	color:#fff;
	padding:3px 8px;
	font-family:Arial;
}
.info h4{
	font-size:14px;
}
.info h4 a{
	float:right;
	background:#fff;
	color:#000;
	font-size:10px;
	padding:0 3px;
	text-decoration:none
}
 
.mask1{
	position:relative;
	width:480px;
	height:180px;
	overflow:hidden;
}
.mask2{
	position:relative;
	width:240px;
	height:180px;
	overflow:hidden;
}
.mask3{
	position:relative;
	width:480px;
	height:240px;
	overflow:hidden;
}
 
span img{
	display:block;
	border:none;
}

3. Mise en place du squelette :

Encore une fois, il va vous falloir fouiner dans le code source du site efectorelativo.net. Pour le modèle 1, on aurait ce squelette :

<h2>Sample 1</h2>
<div class="sample">
	<div class="mask1">
		<div id="box1">
			<span><img src="img1.jpg" alt="Photo" /></span>
			<span><img src="img2.jpg" alt="Photo" /></span>
			<span><img src="img3.jpg" alt="Photo" /></span>
 
			<span><img src="img4.jpg" alt="Photo" /></span>
			<span><img src="img5.jpg" alt="Photo" /></span>
			<span><img src="img6.jpg" alt="Photo" /></span>
			<span><img src="img7.jpg" alt="Photo" /></span>
			<span><img src="img8.jpg" alt="Photo" /></span>
		</div>
	</div>
</div>

Et voilà, votre Slideshow est en principe opérationnel ;) Il ne vous reste plus qu'à l'adapter à votre application, chose qui se révèle être beaucoup plus complexe que la mise en place. Il vous faudra gérer les positions des masques et des images ;)

13 déc. 2008

Exporter le résultat d'une requête SQL en CSV et XLS

Horaire de publication 12:30 Icone Auteur Jean-Christophe Duvivier

Mots Clés PHP, SQL,

Je vous propose un petit script PHP afin d'exporter facilement vos données SQL en .CSV ou .XLS. C'est simple, compréhensible, et surtout, facile à mettre en place ;)

<?php
// Inclusion des paramètres de connexion à votre base de données
require_once('config.php');
 
// Titre des colonnes de votre fichier .CSV ou .XLS
$fichier = "Nom; Prenom; Mail; Adresse";
$fichier .= "\n";
 
// Requête SQL
$sql = "SELECT * FROM personnes";
$req = mysql_query($sql);
 
// Enregistrement des résultats ligne par ligne
while($row = mysql_fetch_object($req))
{
   $fichier .= "".$row->nom.";".$row->prenom.";".$row->mail.";".$row->adresse."\n";
}
 
// Déclaration du type de contenu
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=Personnes.csv"); // Remplacer .csv par .xls pour exporter en .XLS
print $fichier;
exit;
?>

Si vous remarquez une erreur qui s'est glissée dans le script ou si vous avez une question, n'hésitez pas à m'en faire part à la suite de ce sujet ;)

02 déc. 2008

Envoyer des emails de type texte et HTML avec pièces jointes en PHP

Horaire de publication 19:13 Icone Auteur Jean-Christophe Duvivier

Mots Clés HTML, Mail, PHP,

Le but de ce tuto est de vous donner toutes les cartes afin que vous puissiez envoyer des emails de type "texte" ou "HTML" via PHP. Il ne se veut pas exhaustif, mais suffisamment complet pour répondre à la demande d'au moins 90% d'entre vous. J'estime que seules les personnes expérimentées auront besoin de créer des applications plus complexes (je généralise, mais c'est majoritairement le cas).

Ce tuto se veut succin mais pertinent. J'irai droit au but. L'envoi de Mail requiert la connaissance de paramètres, d'une syntaxe particulière... Soit vous l'apprenez par cœur, soit vous mettez ce tuto en marque page, il se révélera très pratique ;) Trêve de blabla. On y va.

1. Envoi de mail texte

L'envoi de mail se fait grâce à la fonction mail(). Elle prend au minimum 3 paramètres : le destinataire, le sujet et le message.

<?php
/*---- Déclaration des paramètres ----*/
$destinataire = "destinataire@gmail.com"; // Pour plusieurs destinataires, les séparer par une virgule
$sujet = "Tuto - Envoi de mail";
 
/*---- Déclaration du message ----*/
$message = "Mon Message";
 
/*---- Envoi du mail ----*/
mail($destinataire, $sujet, $message);
?>

Grâce à un 4ème paramètre (optionnel), l'entête, il vous est possible de renseigner davantage d'informations, tels que l'adresse email de l'expéditeur, ou encore la priorité du mail.

<?php
/*---- Déclaration des paramètres ----*/
$destinataire = "destinataire@gmail.com"; // Pour plusieurs destinataires, les séparer par une virgule
$expediteur = "contact@jchristophe.fr";
$sujet = "Tuto envoi de mail";
 
/*---- Déclaration de l'entête ----*/
$entete = "From: $expediteur \n"; // Adresse de l'expéditeur
$entete .= "Reply-to: $expediteur \n"; // Adresse de réponse
$entete .= "Cc: destinataire1@gmail.com \n"; // Destinataire(s) en copie cachée
$entete .= "Bcc: destinataire2@gmail.com \n"; // Destinataire(s) en mode caché
$entete .= "X-Priority: 1 \n"; // Priorité du mail. 5 = basse, 3 = normal, 1 = urgent
 
/*---- Déclaration du message ----*/
$message = "Mon Message"; // Pour sauter une ligne, écrire : \n
 
/*---- Envoi du mail ----*/
mail($destinataire, $sujet, $message, $entete);
?>

2. Envoi de mail html

Pour envoyer un mail au format HTML, il suffit de déclarer le Content-Type du mail dans son entête. Vous pourrez ensuite utiliser toutes vos balises HTML dans votre message.

<?php
/*---- Déclaration des paramètres ----*/
$destinataire = "destinataire@gmail.com"; // Pour plusieurs destinataires, les séparer par une virgule
$expediteur = "contact@jchristophe.fr";
$sujet = "Tuto envoi de mail";
 
/*---- Déclaration de l'entête ----*/
$entete = "From: $expediteur \n"; // Adresse de l'expéditeur
$entete .= "Reply-to: $expediteur \n"; // Adresse de réponse
$entete .= "Cc: destinataire1@gmail.com \n"; // Destinataire(s) en copie cachée
$entete .= "Bcc: destinataire2@gmail.com \n"; // Destinataire(s) en mode caché
$entete .= "X-Priority: 1 \n"; // Priorité du mail. 5 = basse, 3 = normal, 1 = urgent
$entete .= "Content-Type: text/html \n"; // Type du mail : HTML
 
/*---- Déclaration du message ----*/
$message = "<html><body>";
$message .= "<strong>Mon Texte Gras</strong><br />";
$message .= "<font color=\'#ff0000\'>Mon Texte Rouge</font>";
$message .= "</body></html>",
 
/*---- Envoi du mail ----*/
mail($destinataire, $sujet, $message, $entete);
?>

Concernant l'affichage des images, n'oubliez pas de renseigner l'url complète de votre image, que vous avez, au préalable, hébergé sur un serveur ;)

3. Envoi de mail avec pièce(s) jointe(s)

<?php
/*---- Déclaration des paramètres ----*/
$destinataire = "contact@jchristophe.fr"; // Pour plusieurs destinataires, les séparer par une virgule
$expediteur = "contact@jchristophe.fr";
$sujet = "Tuto envoi de mail";
 
$delimiteur = md5(uniqid(rand())); // Création d'un numéro unique, qui délimitera les différents blocs du mail
 
$piecejointe = "candidat.pdf"; // Déclaration du fichier à envoyer en tant que pièce jointe
$contenupiecejointe = file_get_contents($piecejointe); // Récupération du contenu du fichier
$contenupiecejointe = chunk_split(base64_encode($contenupiecejointe)); // Conversion du fichier : respect du format RFC 2045
$typepiecejointe = filetype($piecejointe); // Récupération du type du fichier
 
/*---- Déclaration de l'entête ----*/
$entete = "From: $expediteur \n";
$entete .= "Reply-to: $expediteur \n";
$entete .= "Cc: destinataire1@gmail.com \n";
$entete .= "Bcc: destinataire2@gmail.com \n";
$entete .= "X-Priority: 1 \n";
$entete .= "MIME-Version: 1.0 \n";
$entete .= "Content-Type: multipart/mixed; boundary=\"$delimiteur\" \n"; // Déclaration du type du mail et du délimiteur
$entete .= " \n";
 
/*---- Déclaration du message ----*/
$message = "--$delimiteur \n"; // Séparation du bloc "entete" et du bloc "message" par notre délimiteur
$message .= "Content-Type: text/html; charset=\"iso-8859-1\" \n"; // Déclaration du type du message ainsi que la charte de codage
$message .= "Content-Transfer-Encoding:8bit\n"; // Déclaration du type de codage
$message .= "\n";
$message .= "<strong>Mon Texte Gras</strong><br />";
$message .= "<font color=\"#ff0000\">Mon Texte Rouge</font>";
$message .= "\n";
 
/*---- Insertion de la pièce jointe ----*/
$message .= "--$delimiteur \n"; // Séparation du bloc "message" et du bloc "pièce jointe" par notre délimiteur
$message .= "Content-Type: $typepiecejointe; name=\"$piecejointe\" \n"; // Déclaration du type et du nom de la pièce jointe
$message .= "Content-Transfer-Encoding: base64 \n"; // Déclaration du type de codage
$message .= "Content-Disposition: attachment; filename=\"$piecejointe\" \n"; // attachment = pièce jointe = fichier à sauvegarder
$message .= "\n";
$message .= $contenupiecejointe." \n"; // Insertion du fichier
$message .= "\n";
$message .= "--$delimiteur"; // Délimitation de la fin de la pièce jointe, et du mail
 
/*---- Envoi du mail ----*/
mail($destinataire, $sujet, $message, $entete);
?>

Et voilà ! Je pense avoir été assez précis, explicite et pertinent. Cependant, si vous avez des questions sur des éléments relatifs à l'envoi de mail en PHP présents, ou pas, dans ce tuto, je me ferai un plaisir de répondre dans la limite de mes compétences ;)

N'hésitez pas à réagir ;)

- page 1 de 2

Propulsé par Dotclear - Hebergé par PlanetHoster - Thème Green Mantis par jchristophe
© jchristophe.fr 2008 - 2009
Valide CSS 2.1 CSS 2.1 Valide XHTML 1.0 XHTML Strict 1.0 Flux RSS RSS