#####################################
# MOD permettant de voter pour une photo #
# Désolé je ne parle pas un mot d'anglais #
# Si vous voulez voir ce que ca donne, je l'ai mis #
# place sur mon site http://galerie1.free.fr #
# Attention, ca e marche pas pour les visiteurs #
#####################################
Voici les modifs à ajouter derrière les lignes suivante dans "picture.php":
// calculation of width and height
if ( $page['width'] == "" )
{
$taille_image = @getimagesize( $lien_image );
//$original_width = $taille_image[0];
$original_height = $taille_image[1];
}
else
{
$original_width = $page['width'];
$original_height = $page['height'];
}
// SOURCE POUR LE VOTE----------------------------------------------
if ( $user['is_the_guest'])
{
//Ici je mets des petites images pour les visiteurs
// et il ne peuvent pas voter
$picture_size = get_picture_size( $original_width, $original_height,
150, 150 );
$final_width = $picture_size[0];
$final_height = $picture_size[1];
}
else
{
$picture_size = get_picture_size( $original_width, $original_height,
$user['maxwidth'], $user['maxheight'] );
$final_width = $picture_size[0];
$final_height = $picture_size[1];
if ( isset( $_POST['vote'] ))
{
$date=date("Y/m/d H:i:s");
mysql_query("INSERT INTO ".PREFIX_TABLE."pc_vote(Vote_Id,Vote_Id_Image,Vote_Id_User,Vote_Choix,Vote_Date)
VALUES('', " .$_GET['image_id']. ",'" .$user['username']. "'," .$_POST['note']. ",'$date')");
echo mysql_error();
}
$query = 'SELECT Vote_ID_Image';
$query.= ' FROM '.PREFIX_TABLE.'pc_vote';
$query.= ' WHERE Vote_ID_Image = ' .$_GET['image_id'];
$query.= " AND Vote_ID_User = '" .$user['username'] . "'";
$result = mysql_query( $query );
$row = mysql_fetch_array( $result,MYSQL_ASSOC );
if ( $row['Vote_ID_Image'])
{
$query = 'SELECT Vote_Choix';
$query.= ' FROM '.PREFIX_TABLE.'pc_vote';
$query.= ' WHERE Vote_ID_Image = ' .$_GET['image_id'];
$result = mysql_query( $query );
$NbVotant = 0;
$voteresultat = 0;
while ( $row = mysql_fetch_array( $result ) )
{
$NbVotant = $NbVotant + 1;
$voteresultat = $voteresultat + $row['Vote_Choix'];
}
if ($NbVotant == 0)
{
$voteresultat = 0;
}
else
{
$voteresultat = round($voteresultat / $NbVotant, 2);
}
$vtp->addSession( $handle, 'voteeff' );
$vtp->setGlobalVar( $handle, 'vote', $voteresultat );
$vtp->setGlobalVar( $handle, 'nbvote', $NbVotant );
$vtp->closeSession( $handle, 'voteeff' );
}
else
{
$vtp->addSession( $handle, 'vote' );
$vtp->setGlobalVar( $handle, 'form_action', str_replace( '&', '&', $_SERVER['REQUEST_URI'] ) );
$vtp->closeSession( $handle, 'vote' );
}
}
// FIN SOURCE POUR LE VOTE------------------------------------------
Il faut aussi mettre en commentaire les lignes qui suivent le le code original cité plus haut :
//$picture_size = get_picture_size( $original_width, $original_height,
// $user['maxwidth'], $user['maxheight'] );
//$final_width = $picture_size[0];
//$final_height = $picture_size[1];
Voici ensuite ce qu'il faut rajouter dans le fichier "picture.vtp" après les lignes suivantes
<!--/VTP_modification-->
{#frame_end}
<div style="text-align:center;">{#back}</div>
Mon sources :
<!--VTP_vote-->
<div style="text-align:center;margin-bottom:5px;">
<form name="form" method="post" action="{#form_action}">
<p><select size="1" name="note">
<option selected value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
<input type="submit" name="vote" value="Votez" lang="fr" />
</p>
</div>
<!--/VTP_vote-->
<!--VTP_voteeff-->
<div class="NBvote">
</BR>
<span style=font-size:10pt;>
<font color=yellow face=verdana>
Nb Votant : {#nbvote}
Resultat : {#vote}/10</div>
</p></font>
</BR>
</div>
<!--/VTP_voteeff-->
Bon ensuite il faut allez dans la partie administration des tables et executer la requette suivante:(attention, changer phpwebgallery par le nom de votre table)
CREATE TABLE `phpwebgallery_pc_vote` (
`Vote_Id` int(11) unsigned NOT NULL auto_increment,
`Vote_Id_Image` mediumint(8) unsigned NOT NULL default '0',
`Vote_Id_User` varchar(15) NOT NULL default '',
`Vote_Choix` int(1) unsigned NOT NULL default '0',
`Vote_Date` datetime NOT NULL default '0000-00-00 00:00:00',
UNIQUE KEY `Vote_Id` (`Vote_Id`),
UNIQUE KEY `Vote_Clef_IdImag_IdUser` (`Vote_Id_Image`,`Vote_Id_User`),
KEY `Vote_Id_Image` (`Vote_Id_Image`,`Vote_Id_User`)
) TYPE=MyISAM;
------------------------------------------------------------------------
Voici après deux petites modif pour avoir 100 photos les mieux notées et les 100 photos les plus controversées
vous pourrez donc mettre l'une ou l'autre ou les deux si ca vous interresse. Merci à dimdim d'avoir rajouté l'auteur dans le tableau
------------------------------------------------------------------------
1> dans .\template\default\category.vtp après les lignes suivantes :
<!--/VTP_favorites-->
<br /> <img src="{#lien_collapsed}" alt=">" /> <span style="font-weight:bold;">{#stats}</span>
<br /> <img src="{#lien_collapsed}" alt=">" /> <a href="{#most_visited_url}"><span title="{#most_visited_cat_hint}" style="font-weight:bold;">{#top_number} {#most_visited_cat}</span></a>
<br /> <img src="{#lien_collapsed}" alt=">" /> <a href="{#recent_url}"><span title="{#recent_cat_hint}" style="font-weight:bold;">{#recent_cat}</span></a> {#icon_short}
Ajouter :
<br /> <img src="{#lien_collapsed}" alt=">" /> <a href="./meilleurnote.php"><span title="Les mieux notées" style="font-weight:bold;">Les mieux notées</span></a> {#icon_short}
<br /> <img src="{#lien_collapsed}" alt=">" /> <a href="./controverse.php"><span title="Les plus controversées" style="font-weight:bold;">Les plus controversées</span></a> {#icon_short}
2> créer un fichier .\controverse.php pour les + controversées avec ceci comme code:
<?php
$title = "Les Notes";
include_once( './include/init.inc.php' );
initialize_category();
//----------------------------------------------------- template initialization
include('include/page_header.php');
$handle = $vtp->Open( './template/'.$user['template'].'/category.vtp' );
initialize_template();
//------------------------------------------------------------------
//Les meilleurs
//------------------------------------------------------------------
$array_cat_directories = array();
$query = "SELECT ".PREFIX_TABLE."pc_vote.Vote_Id_Image, ";
$query.= "COUNT( ".PREFIX_TABLE."pc_vote.Vote_Choix ) AS Note_Votes, ";
$query.= "AVG( ".PREFIX_TABLE."pc_vote.Vote_Choix ) AS Note_Moyenne, ";
$query.= "STD( ".PREFIX_TABLE."pc_vote.Vote_Choix ) AS Note_Ecart, ";
$query.= "MIN( ".PREFIX_TABLE."pc_vote.Vote_Choix ) AS Note_Min, ";
$query.= "MAX( ".PREFIX_TABLE."pc_vote.Vote_Choix ) AS Note_Max, ";
$query.= PREFIX_TABLE."images.name, ";
$query.= PREFIX_TABLE."images.author, ";
$query.= PREFIX_TABLE."images.file, ";
$query.= PREFIX_TABLE."images.filesize, ";
$query.= PREFIX_TABLE."images.tn_ext, ";
$query.= PREFIX_TABLE."images.storage_category_id ";
$query.= "FROM ".PREFIX_TABLE."pc_vote ";
$query.= "INNER JOIN ".PREFIX_TABLE."images ON ".PREFIX_TABLE."pc_vote.Vote_Id_Image = ".PREFIX_TABLE."images.id ";
$query.= "GROUP BY `Vote_Id_Image`";
$query.= "ORDER BY Note_Ecart DESC LIMIT 0,100";
$result = mysql_query( $query );
while ( $row = mysql_fetch_array( $result ) )
{
// retrieving the storage dir of the picture
if ( !isset($array_cat_directories[$row['storage_category_id']]))
{
$array_cat_directories[$row['storage_category_id']] =
get_complete_dir( $row['storage_category_id'] );
}
$cat_directory = $array_cat_directories[$row['storage_category_id']];
$file = get_filename_wo_extension( $row['file'] );
// thumbnail url
$thumbnail_url = $cat_directory;
$thumbnail_url.= 'thumbnail/'.$conf['prefix_thumbnail'];
$thumbnail_url.= $file.'.'.$row['tn_ext'];
// afficher auteur
$auteur = 'Photographe: <b>'.$row['author'].'</b>';
echo '<p align="center">';
echo '<table border>';
echo '<tr><td rowspan="2" width="165" height="165"> <p align="center"><img src="' .$thumbnail_url .'" ';
echo '<br />';
echo '<br />';
echo ''.$auteur ;
echo '</td></p>';
echo '<td width="300"><p align="center">';
if ($row['name'] != '')
{
echo $row['name'] ;
}
else
{
echo $row['file'] ;
}
echo '</p></td></tr>';
echo '<tr><td width="300">';
echo '<blockquote>';
echo '<br /><br /> Nb Votes = ' .$row['Note_Votes'] ;
echo '<br /> Moyenne = ' .round($row['Note_Moyenne'] ,2) ;
echo '<br /> Ecart = ' .round($row['Note_Ecart'] ,2) ;
echo '<br /> Min = ' .$row['Note_Min'] ;
echo '<br /> Max = ' .$row['Note_Max'] .'</td>';
echo '</blockquote>';
echo '</td> </tr>';
echo '</table>';
echo '</p>';
}
include('include/page_tail.php');
?>
3> créer un fichier ./meilleurnote.php pour les mieux notées identique au précédent sauf la ligne :
$query.= "ORDER BY Note_Ecart DESC LIMIT 0,100";
qu'il faut remplacer par :
$query.= "ORDER BY Note_Moyenne DESC LIMIT 0,100";
Voila ca marche si vous voulez + ou moins de photos vous changez la LIMIT.
Et pour obtenir le lien de la miniature vers la photo dans la page picture.php, après avoir appliqué le mod de Treddo ci-dessus:
Dans votre page meilleurnote.php (et également les même modifs dans la page controverses.php)
après
$query.= PREFIX_TABLE."images.author, ";
ajoutez
$query.= PREFIX_TABLE."images.id, ";
après
// afficher auteur $auteur = 'Photographe: <b>'.$row['author'].'</b>';
ajoutez
// lien vers la photo dans la page picture.php $lien_photo = './picture.php?cat='.$row['storage_category_id'].'&image_id='.$row['id'];
remplacez
echo '<tr><td rowspan="2" width="165" height="165"> <p align="center"><img src="' .$thumbnail_url .'" ';
par
echo '<tr><td rowspan="2" width="165" height="165"><p align="center"><a href="' .$lien_photo .'"><img src="' .$thumbnail_url .'"</a> ';
Dernière modification par dimdim (2004-08-29 11:48:58)
Hors ligne
Attention Dimdim, si on applique cette modif, on se retrouve déconnecté puisqu'on retourne sur la page picture sans le numero de session
Merci beaucoup Treddo pour ce mod, ça marche parfaitement, même si j'ai du faire quelques modifs car j'ai une version antérieure de PWG à la tienne (enfin je pense...)
Persiste un problème:
Quand je clique sur Les mieux notées, la page s'affiche très bien mais je perds mon template, et je me retrouve avec une page avec fond blanc... ce qui n'est pas très agréable...
Une solution ?
Merci d'avance
Dernière modification par Victor (2004-08-29 16:59:12)
Hors ligne
As tu bien laissé les lignes suivantes dans le fichier meilleurnote.php ?
//----------------------------------------------------- template initialization
include('include/page_header.php');
$handle = $vtp->Open( './template/'.$user['template'].'/category.vtp' );
initialize_template();
Oui, mais ça me donné une erreur et j'ai donc testé ça :
//----------------------------------------------------- template initialization
$vtp = new VTemplate;
$handle = $vtp->Open( './template/'.$user['template'].'/picture.vtp' );
initialize_template();
$tpl = array( 'back','submit','comments_title','comments_del','delete',
'comments_add','author','slideshow','slideshow_stop',
'period_seconds' );
templatize_array( $tpl, 'lang', $handle );
$vtp->setGlobalVar( $handle, 'user_template', $user['template'] );
$vtp->setGlobalVar( $handle, 'text_color', $user['couleur_text'] );
Hors ligne
In fact, I won't call the feature "vote" but "rate". When you vote, you make a choice between several possibilities, that's not the case here, you give a rate to a picture.
Hors ligne
Voici une modif qui permet de revenir sur la page picture.php:
Dans category.php après :
// recent pictures
$url = './category.php?cat=recent&expand='.$page['expand'];
$vtp->setGlobalVar( $handle, 'recent_url', add_session_id( $url ) );
inserer :
// Meilleur notes
$url = './meilleurnote.php?';
$vtp->setGlobalVar( $handle, 'meilleurnote_url', add_session_id( $url ) );
dans category.vtp changer la ligne que j'avais mise dans ma modif :
<br /> <img src="{#lien_collapsed}" alt=">" /> <a href="./meilleurnote.php"><span title="Les mieux notées" style="font-weight:bold;">Les mieux notées</span></a> {#icon_short}
par :
<br /> <img src="{#lien_collapsed}" alt=">" /> <a href="{#meilleurnote_url}"><span title="Les mieux notées" style="font-weight:bold;">Les mieux notées</span></a> {#icon_short}
Dans meilleurnote.php apres la modif que tu as ajouté :
// lien vers la photo dans la page picture.php
$lien_photo = './picture.php?cat='.$row'storage_category_id'].'&image_id='.$row['id'];
il faut rajouter :
$lien_photo = add_session_id($lien_photo);
Si vous voulez Historiser le clic sur ce lien, il suffit de mettre dans le fichier meilleurnote.php avant :
include('include/page_tail.php');
la ligne suivante :
pwg_log( 'category', 'Les meilleurs notes, '' );
Bonjour à tous ! je viens d'ajouter vos script pour le systeme de vote Bravo !
par contre il est impossible de revenir en arrière quand on clic sur "Les images les lpus controversées" !!
pourriez-vous m'aider ou me dire comment supprimer le lien vers cette page .. je suis débutant !
merci à tous
Salut, j'ai un petit problème ...
J'essaye tant bien que mal de faire passer le submit via du javascript, mais ça veut pas du tout !
<input onclick="document.form.submit()" type="radio" value="3" name="note">2 </input>
Je précise que je comprend mal les templates, ainsi que l'action "form_action" qui passe par je ne sait quel formatage ...
Dernière modification par grosbin (2005-07-07 23:40:23)
Hors ligne
Re, je me permet de revenir, afin de savoir s'il était possible d'afficher cette page des mieux notées / plus controversées, en affichage normal pour la version 1.3, merci d'avance pour celui qui aura un élément de réponse
Hors ligne
Hép hép, je n'arrive pas à appliquer de méthode javascript qui envoie le formulaire de vote en cliquant sur les boutons ..
Je ne sais pas comment gérer le #form_action ..
Merci à celui qui saura me répondre ;)
Hors ligne