Annonce

  •  » Plugins
  •  » Utilisation des favoris en panier virtuel

#1 2005-04-13 11:31:47

torode
honoris causa
Paris
2003-07-31
83

Utilisation des favoris en panier virtuel

Bonjour,
Sur la version 1.4 j'essaye d'utiliser la gestion des favoris en panier virtuel (shopping cart / virtual basket / panier /caddie ...) et d'offrir la possibilité de télécharger toutes les hautes definitions (pwg_high) correspondant aux vignettes affichées en une fois (archive zip). Cela pourrait d'ailleurs fonctionner pour une catégorie complète, par exemple pour télécharger un reportage complet.

J'ai inséré le code ci-dessous à la ligne 116 du fichier /include/category_default.inc.php (incluse dans category.php):

$totalzip = str_replace("thumbnail","pwg_high",str_replace("./","|/var/www/html/photos/","$thumbnail_url"));
echo "$totalzip";

Qui affiche en haut de la page category.php quelque chose comme ça : |/var/www/html/photos/galleries/Vacances/pwg_high/bateau_2.jpg|/var/www/html/photos/galleries/Vacances/pwg_high/bateau_3.jpg
ce qui prouve que j'ai trouvé la bonne variable, mais je n'arrive pas à la récupérer dans template/default/category.html pour la placer au bon endroit puis la passer en référence à un script externe (<a href="panier.php?contenu={PANIER}">Telechargement du panier</a>) dans lequel je créerai une archive avant de la proposer au téléchargement comme dans ce script.

Mes connaissances en php étént limitées, si quelqu'un a une idée, je suis prenneur.
D'avance merci.

Hors ligne

#2 2005-04-14 00:03:17

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

Re: Utilisation des favoris en panier virtuel

Bonjour Torode,

En introduction à ma réponse, je dis "attention". En effet, le caddie est une fonctionnalité de la 1.5 que je suis actuellement en train de développer et dont on peut déjà voir une toute première version sur la dernière build BSF (apparition du caddie en BSF_200503260007). Cette fonctionnalité a pour premier objectif de permettre aux administrateurs de gérer des lots d'éléments de manière plus ergonomique que ce qui existe actuellement... Quoi, vous voulez une capture d'écran ? Bon d'accord : aperçu du caddie en cours de dev, au 13 avril 2005 (durée de vie de l'image courte).

Maintenant, la réponse à ton intéressant problème (mais alors faudra promettre d'écrire un MOD après... ;-)

Déjà, tu n'utilises pas la bonne variable pour ton str_replace, en effet, $thumbnail_url est déjà une transformation à partir de $row['path'], de plus, l'extension du fichier dans pwg_high est la même que l'image taille normale... or $thumbnail_url porte l'extension de la miniature (qui a le droit d'être différente de celle de l'image en taille normale). Bref, il te faut utiliser $row['path']. A part ça, je ne vois pas pourquoi tu remplaces en dur avec un chemin qui est celui par défaut sur RedHat, mais pas forcément partout. Et puis finalement pour dire la vérité, pourquoi tu ne gardes pas le chemin relatif ?

Et puis en fait non, en écrivant je me dis que tu déportes le problème : ce qu'il faut passer à ton script "download_zip.php", c'est la liste des identifiants numériques d'image séparés par des virgules et non leurs chemin : "download_zip.php?list=45,87,245,658". Ce sera dans download_zip.php que tu chercheras les chemins qui correspondent (SELECT path FROM phpwebgallery_images WHERE id IN (45,87,245,658))

Comment créer cette liste d'identifiants proprement? Au début de la boucle while, il faut rajouter la ligne

Code:

$ids_list .= empty($ids_list) ? $row['id'] : ','.$row['id'];

Ensuite il faut donc envoyer cette liste au template dans la variable IDS_LIST (plutôt que PANIER, mais c'est juste mon avis perso, je dis ça, je dis rien c'est pareil) : après la boucle while, il faut placer l'instruction suivante :

Code:

$template->assign_vars(array('IDS_LIST' => $ids_list));

Bon courage, j'espère que tu nous feras un joli MOD avec ça ;-)

NB : Ce code n'a pas été testé et a été écrit uniquement directement sur le forum, si l'un de vos agents était pris ou tué, le département d'état niera avoir eu connaissance de vos agissements.


Historiquement, premier utilisateur connu de Piwigo ;-)

Hors ligne

#3 2005-04-14 11:08:32

torode
honoris causa
Paris
2003-07-31
83

Re: Utilisation des favoris en panier virtuel

z0rglub a écrit:

Maintenant, la réponse à ton intéressant problème (mais alors faudra promettre d'écrire un MOD après... ;-)
...

Bon courage, j'espère que tu nous feras un joli MOD avec ça ;-)

Pas de problème, j'ai toujours "publié" mes trouvailles. Par contre ne me considérant pas comme développeur, si tu veux que je te les envoie avant pour validation, je n'y vois pas d'inconvénient.

Hors ligne

#4 2005-04-14 18:46:51

torode
honoris causa
Paris
2003-07-31
83

Re: Utilisation des favoris en panier virtuel

J'ai suivi tes conseils, mais je me perds dans les requêtes mysql.
Je fais passer, par exemple : panier.php?panier=2,7,3
dans panier.php voici mon code :

Code:

define('PHPWG_ROOT_PATH','./');
include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );

$panier=$_GET['panier'];

$tab = explode(",", $panier);
for ($i=0; $i < count($tab) ; $i++) {
echo "<br>$tab[$i]<br>";
$query = "SELECT path FROM phpwebgallery_images where id = $tab[$i]";
$result = mysql_query($query);
echo $result;}

j'obtiens :

Code:

2
Resource id #20
7
Resource id #21
3
Resource id #22

Dont je ne sais pas quoi faire. Si je rédige ma requête d'une autre manière:

Code:

$result = mysql_fetch_array(mysql_query($query));
print_r($result) ;

j'obtiens :

Code:

2
Array ( [0] => ./galleries/SECURITY/bonduelle_20040409_1.jpg [path] => ./galleries/SECURITY/bonduelle_20040409_1.jpg )
7
Array ( [0] => ./galleries/SECURITY/bonduelle_20040409_2.jpg [path] => ./galleries/SECURITY/bonduelle_20040409_2.jpg )
3
Array ( [0] => ./galleries/SECURITY/vg_20041020_10.jpg [path] => ./galleries/SECURITY/vendeeglobe_20041020_10.jpg )

Je suis "content", je vois le path mais ne sais pas comment le récupérer! Comme tu le vois, mes compétences en MySQL sont limitées! J'ai fait une formation php/MySQL de 7 jours en février mais manque de pratique et d'expérience. Peux-tu m'indiquer un fichier de PWG dont je pourrais m'inspirer, ou me donner un tuyau.

Merci d'avance.

Hors ligne

#5 2005-04-14 19:35:46

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

Re: Utilisation des favoris en panier virtuel

fais plus simple :

Code:

$query = 'SELECT path
  FROM '.IMAGES_TABLE.'
  WHERE id IN ('.$_GET['panier'].')
;';
$result = pwg_query($query);

while ($row = mysql_fetch_array($result))
{
  echo $row['path'].'<br />';
}

Là, niveau sécurité, c'est pas top... parce qu'on ne vérifie pas ce que contient $_GET['panier'].

En deuxième étape, il faudra vérifier que $_GET['panier'] ne contient que des numéros séparés par des virgules.


Historiquement, premier utilisateur connu de Piwigo ;-)

Hors ligne

#6 2005-04-15 17:34:25

torode
honoris causa
Paris
2003-07-31
83

Re: Utilisation des favoris en panier virtuel

Voila ce que j'ai testé avec succès :

Code:

<?php
//--------------------------------------------------------------------- include
define('PHPWG_ROOT_PATH','./');
include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );

// Récupération du nom de la photo variable
$panier=$_GET['panier'];

// Test de l'argument
$er = "^[[:digit:]\,]+$" ;
if (ereg($er,$panier))
{
  // Création d'un nom de fichier temporaire unique pour l'archive zip
  $tmpzip = str_replace("@","-",'./tmp/'.strtolower($_SERVER[UNIQUE_ID]).'.zip');

  $query = 'SELECT path
    FROM '.IMAGES_TABLE.'
    WHERE id IN ('.$_GET['panier'].')
  ;';
  $result = pwg_query($query);

  while ($row = mysql_fetch_array($result))
  {
    $photo = dirname($row['path']).'/pwg_high/'.basename($row['path']);
    exec("zip -j $tmpzip $photo");
  }
  // Ouvre le fichier
  $fp = fopen($tmpzip, 'r');
  $zip = basename($tmpzip);
  // Envoi des en-têtes
  header("Content-Type: application/zip");
  header("Content-Disposition: attachment; filename=$zip");
  // Envoi du contenu du fichier
  fpassthru($fp);
  // Suppression du fichier .zip temporaire
  if (file_exists("$tmpzip")) {
    unlink("$tmpzip");
    } else {
      die("Echec unlink");
  }
} else {
    // Message d'erreur en cas de l'argument du style ;rm -rf *
  echo "Erreur nom de fichier<br><br><br>Cliquez sur le bouton \"Retour\" de votre navigateur.<br><br><br>Please click on the \"Back\" button of your browser." ;
}
exit;
?>

Dis-moi si tu trouves quelque chose à corriger, il existe peut-être un moyen plus simple de générer un nom aléatoire unique.
Bon week-end.

Hors ligne

#7 2005-08-16 16:06:59

Fetide
Invité

Re: Utilisation des favoris en panier virtuel

Waoh, il est super ce mod :-)

Je l'ai installé sur la 1.4.1... et comme indiqué dans l'install, ça ne marche pas (undefined index, undefined variable...).

Mais je suis pris d'un doute : il est spécifié au départ qu'il faut modifier /template/default/picture.tpl, alors qu'aucune modification n'est réellement proposée. Est-ce que ça peut venir de là ?

#8 2005-08-17 20:26:52

Fetide
Invité

Re: Utilisation des favoris en panier virtuel

Pour confirmer : même problème sur la 1.4.0RC3. Dommage...

#9 2005-10-13 12:54:51

torode
honoris causa
Paris
2003-07-31
83

Re: Utilisation des favoris en panier virtuel

Salut,

Désolé pour ma réponse tardive.
Essaye plutôt le MOD : http://download.gna.org/phpwebgallery/M … ualbasket/

Hors ligne

  •  » Plugins
  •  » Utilisation des favoris en panier virtuel

Pied de page des forums

Propulsé par FluxBB

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