Annonce

#1 2004-08-29 11:32:43

Treddo
Invité

Vote

#####################################
# 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 />&nbsp;<img src="{#lien_collapsed}" alt="&gt;" />&nbsp;<span style="font-weight:bold;">{#stats}</span>
              <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="{#lien_collapsed}" alt="&gt;" />&nbsp;<a href="{#most_visited_url}"><span title="{#most_visited_cat_hint}" style="font-weight:bold;">{#top_number}&nbsp;{#most_visited_cat}</span></a>
              <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="{#lien_collapsed}" alt="&gt;" />&nbsp;<a href="{#recent_url}"><span title="{#recent_cat_hint}" style="font-weight:bold;">{#recent_cat}</span></a> {#icon_short}


Ajouter :

               <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="{#lien_collapsed}" alt="&gt;" />&nbsp;<a href="./meilleurnote.php"><span title="Les mieux notées" style="font-weight:bold;">Les mieux notées</span></a> {#icon_short}
               <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="{#lien_collapsed}" alt="&gt;" />&nbsp;<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.

#2 2004-08-29 11:45:32

dimdim
Membre
Le Roeulx (Belgique)
2004-08-10
13

Re: Vote

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

Code:

$query.= PREFIX_TABLE."images.author, ";

ajoutez

Code:

$query.= PREFIX_TABLE."images.id, ";

après

Code:

// afficher auteur
  $auteur = 'Photographe: <b>'.$row['author'].'</b>';

ajoutez

Code:

// lien vers la photo dans la page picture.php
  $lien_photo = './picture.php?cat='.$row['storage_category_id'].'&amp;image_id='.$row['id'];

remplacez

Code:

echo '<tr><td rowspan="2" width="165" height="165"> <p align="center"><img src="' .$thumbnail_url .'" ';

par

Code:

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)


- dim -

Hors ligne

#3 2004-08-29 12:19:06

Treddo
Invité

Re: Vote

Attention Dimdim, si on applique cette modif, on se retrouve déconnecté puisqu'on retourne sur la page picture sans le numero de session

#4 2004-08-29 16:55:14

Victor
Membre
Paris
2004-03-13
369

Re: Vote

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

#5 2004-08-29 17:19:22

Treddo
Invité

Re: Vote

Tu la perds definitivement ou juste le temps de l'affichage ?

#6 2004-08-29 18:01:23

Victor
Membre
Paris
2004-03-13
369

Re: Vote

Definitivement...
Ma page reste avec un fond blanc...

Hors ligne

#7 2004-08-29 18:54:45

Treddo
Invité

Re: Vote

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

#8 2004-08-29 19:27:38

Victor
Membre
Paris
2004-03-13
369

Re: Vote

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

#9 2004-08-30 14:43:58

Victor
Membre
Paris
2004-03-13
369

Re: Vote

Une idée pour m'aider ??

Hors ligne

#10 2004-08-30 21:33:34

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12644

Re: Vote

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.


Les historiens ont établi que Pierrick était le premier utilisateur connu de Piwigo.

Hors ligne

#11 2004-08-31 13:18:28

treddo
Invité

Re: Vote

Voici une modif qui permet de revenir sur la page picture.php:

Dans category.php après :

// recent pictures
$url = './category.php?cat=recent&amp;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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="{#lien_collapsed}" alt="&gt;" />&nbsp;<a href="./meilleurnote.php"><span title="Les mieux notées" style="font-weight:bold;">Les mieux notées</span></a> {#icon_short}

par :

<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="{#lien_collapsed}" alt="&gt;" />&nbsp;<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'].'&amp;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, '' );

#12 2004-10-27 10:42:17

milou
Invité

Re: Vote

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

#13 2005-07-07 23:37:20

grosbin
Membre
Genève
2004-05-27
16

Re: Vote

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

#14 2005-07-27 10:05:07

grosbin
Membre
Genève
2004-05-27
16

Re: Vote

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 http://ben.lolopage.org/forum/images/smiles/jap.gif

Hors ligne

#15 2005-10-23 11:57:32

grosbin
Membre
Genève
2004-05-27
16

Re: Vote

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

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact