Annonce

#1 2009-11-19 16:48:21

tomdieu
Membre
2006-07-05
55

Exemple de personnalisation de Piwigo

Bonjour à tous.

Tout d'abord merci à toutes l'équipe Piwigo qui me permettent de gérer mon album photo en lignes depuis mon premier APN en 2002 : je suis donc un utilisateur heureux quasiment depuis le début du projet!

A la demande de Pierrick (le fondateur de Piwigo) qui a découvert par hasard notre site et qui trouve que c'est un bon exemple de personnalisation de Piwigo, je m'exécute ;-)

Le site est ici : http://www.tom-et-caro.fr/

C'est avant tout un album photo privé et seul une petite partie (aujourd'hui 480 photos sur les 10722 totales) est publique :
- une catégorie "Portfolio".
- un "blog" qui reprend les description de toutes les catégories.

Je pense que c'est cette partie blog qui est la plus intéressante. Elle est complètement basée sur le plugin PWG Stuffs qui permet de personnaliser les blocs d'affichage. Là le bloc contient presque uniquement un DIV et un bout d'AJAX permettant d'afficher le contenu provenant d'une page dynamique en php dans ce DIV. C'est cette page dynamique qui me permet d'afficher les descriptions des catégories sous forme de blog.

J'ai ainsi une partie blog "publique" avec éventuellement quelques photos insérés directement dans la description. Les utilisateurs autorisés peuvent accéder à l'ensemble de l'album correspondant (privé donc) en cliquant sur l'icône de l'appareil photo à la fin de chaque "article" du blog.

Tom

Hors ligne

#2 2009-11-19 16:54:59

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13331

Re: Exemple de personnalisation de Piwigo

C'est vraiment super intéressant !

Magnifiquement bien réalisé. Vraiment l'idée du blog est très bien trouvée.
Je vais avoir plein de questions je sens ^^

Bonne continuation.


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#3 2009-11-19 22:26:22

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Exemple de personnalisation de Piwigo

wow !
ca serait possible de diffuser le code source de la partie blog ?

Hors ligne

#4 2009-11-20 10:05:55

tomdieu
Membre
2006-07-05
55

Re: Exemple de personnalisation de Piwigo

Pas de problème pour partager, je préférerais ne pas mettre de code php directement sur le forum... Un peu trop méfiant peut être?

Par contre il n'y a pas de MP sur ce forum?

Hors ligne

#5 2009-11-20 10:36:41

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13331

Re: Exemple de personnalisation de Piwigo

tomdieu a écrit:

Pas de problème pour partager, je préférerais ne pas mettre de code php directement sur le forum... Un peu trop méfiant peut être?

Je n'ai pas compris... Si tu peux le partager par MP c'est donc que tu peux en faire profiter. Donc ça revient au même que pour l'afficher.
Ou alors je n'ai pas saisie ^_^


tomdieu a écrit:

Par contre il n'y a pas de MP sur ce forum?

Pas vraiment de "MP" comme sur d'autres forums conventionnels mais dans la colonne de gauche, sous le nom de la personne tu as un liens "courriel" qui est là pour envoyer un message via email. C'est donc notre moyen de communication ;-)

Si tu fais un "courriel" je suis preneur aussi. Non pas que vais mettre en application tout de suite ta technique mais ne sait-on jamais ^^
Merci en tous cas.


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#6 2009-11-20 10:48:28

tomdieu
Membre
2006-07-05
55

Re: Exemple de personnalisation de Piwigo

Y'a quand même une petite différence entre partager du code à la vue de tous et de l'envoyer à quelques personnes (même si je ne vous connais pas ;) )
Après si un spécialiste me confirme qu'il n'y a pas de faille flagrante de sécu dans mon code, je voudrais bien l'afficher ici!

Je vous fais un mail donc.

Hors ligne

#7 2009-11-20 11:13:37

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13331

Re: Exemple de personnalisation de Piwigo

Ok je comprend.

Avec ton accord, je regarde comment bien comprendre la mise en oeuvre de ton sytème de blog pour après, toujours avec ton accord, en publier pourquoi pas un "MOD" (ou au moins une notice de mise en oeuvre ^^).


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#8 2009-11-20 11:14:44

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: Exemple de personnalisation de Piwigo

Pour info.

Exposer du code aux yeux de tous est une garantie de relecture...
Les pluggeurs et membres de l'équipe étant très présents sur les forum, les éventuelles erreurs de coding seront encore plus vite corrigées.

A l'inverse se croire protéger parce qu'on ne publie pas est une erreur majeure.
En réalité les hackers ne regardent pas vraiment le code, ils le survolent et encore pas tous, s'ils voient une faille, ils lancent des scripts paramétrables.

Exemple: Je reçois 50 commentaires par mois sur la même image parce que les sites de sécurité parlent d'une ancienne faiblesse dans notre code. Je passe cette image en Confidentialité "Admin". Je n'ai plus de commentaire pendant 1 mois ou 2 (ou alors au compte-gouttes).  Nous espérons avoir trouvé et de fait corrigé (peut-être) le bug/faille. Mais les sites de sécurité évoquent toujours l'ancienne faiblesse et dans 6 mois je me retrouve encore avec nouveaux 50 commentaires par mois tous plus nuls les uns que les autres et sur une et une seule image.

Heureusement que notre code est publié, ces hackers qui lisent notre code nous expliquent la(les) faille(s). Le code ne serait pas publié, les hackers ne se gêneraient pas pour hacker pour de bon. Depuis 6 ans, que je suis sur le projet, 2/3 sites se sont réellement vu hackés et encore gentiment.

(Ils peuvent concevoir des scripts de test sans voir le code).


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#9 2009-11-20 11:28:21

tomdieu
Membre
2006-07-05
55

Re: Exemple de personnalisation de Piwigo

En effet je n'avais pas réfléchit dans ce sens là... Et je te rejoins finalement.

Je vais donc mettre le code ici, ça sera plus simple et plus utile à tous.

Y'a un peu de code copier directement de Piwigo, du code perso et un peu de commentaires, ...
C'est peut être pas ce qu'il y'a de plus propre, mais ça marche!

J'ai viré 2/3 infos persos... Mais si vous voyez dans le code ci-dessous des trucs susceptibles d'être utilisé à mauvaise escient merci de me le signaler rapidement!

Si vous avez des conseils, remarques, etc... Je suis preneur aussi.

Le fichier blog.php (à "l'anonymisation" près)

Code:

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

// +-----------------------------------------------------------------------+
// | Check Access and exit when user status is not ok |
// +-----------------------------------------------------------------------+
check_status(ACCESS_GUEST);
/*
Rempli le tableau $user

*/

/*****************************************************************/
/* Edito */

if ( isset ($_GET["connected"]) )
{
  $connected = $_GET["connected"] ; // utilisateur connecté
}
else $connected = "false" ;

switch($connected)
{
  case "true" : 
    $connected_bool = true ;
    break;
  case "false" :
  default :
    $connected = "false" ;
    $connected_bool = false ;
    break;
}

$blog_edito = "<p><b>Texte Edito</b><p>";

if( $connected_bool )
  $blog_edito .= "
<p>Texte Edito si utilisateur connecté</p>";

else
  $blog_edito .= "
<p>Texte Edito si utilisateur non connecté</p>";

$blog_edito .= "
<p>Conclusion Edito</p>";

/************************************************************************/

$WHERE_CLAUSE  = 'dir IS NOT NULL '; // on prend pas les album virtuels
$WHERE_CLAUSE .= 'AND id_uppercat IS NOT NULL '; // on ne prend pas les albums racine
$WHERE_CLAUSE .= 'AND LOCATE("<!-- NO BLOG -->", comment) = 0 '; // on ne prend pas si le commentaire contient <!-- NO BLOG -->
$WHERE_CLAUSE .= 'AND name <> REPLACE(dir,"_"," ") '; // on ne prend pas si le titre n'a pas été mofifié

$query = '
SELECT count(*) as nb_articles
FROM '.CATEGORIES_TABLE.'
WHERE '.$WHERE_CLAUSE ;

$result = mysql_fetch_array(pwg_query($query));
$last_page = $result['nb_articles'] - 1;

if ( isset ($_GET["id"]) ) // acces direct a un article
{
  $blog_id = (int) $_GET["id"] ;
  echo "<!-- acces par id : $blog_id -->";
  $blog_page = -1;
  $blog_id_prec = 0;
  $blog_id_suiv = 0;
  $blog_id_last = 0;
  
  $query = '
SELECT id, name, dir, comment
FROM '.CATEGORIES_TABLE.'
WHERE '.$WHERE_CLAUSE.'
ORDER BY dir DESC';
  
  $result = pwg_query($query);
  $billet_name = "";
  $billet_content = "Pas de billet à afficher";
  
  while( $billet = mysql_fetch_array($result) )
  {
    $blog_page ++ ;
    if($billet['id'] == $blog_id)
    {
      $billet_name = $billet['name'];
      $billet_content = "
  <p id=\"blog_titre\">".$billet['name']."</p>
  <p>".$billet['comment']."</p>";
      break;
    }
    $blog_id_prec = $billet['id'] ;
    $blog_id_last = $billet['id'] ;
  }
  
  if( $billet = mysql_fetch_array($result) )
  {
    $blog_id_suiv = $billet['id'] ;
    $blog_id_last = $billet['id'] ;
  }
  else $blog_page = $last_page; 
  
  while( $billet = mysql_fetch_array($result) )
  {
    $blog_id_last = $billet['id'] ;
  }
}
else // acces par page
{
  /* acces direct a une page */

  if ( isset ($_GET["blog_page"]) )
  {
    $blog_page = $_GET["blog_page"] ;
    if($blog_page == "derniere")
    {
      $blog_page = $last_page;
    }
    else
    {
      $blog_page = (int) $blog_page;
    }
  }
  else $blog_page = 0;
  echo "<!-- acces par page : $blog_page -->";
  //echo $blog_page;
  
  
  $blog_id_prec = 0;
  $blog_id_suiv = 0;
  $blog_id_last = 0;
  
  $query = '
  SELECT id, name, dir, comment
  FROM '.CATEGORIES_TABLE.'
  WHERE '.$WHERE_CLAUSE.'
  ORDER BY dir DESC
  LIMIT '.$blog_page.',1';
  
  $result = pwg_query($query);
  
  if( mysql_num_rows($result) != 0 )
  {
    $billet = mysql_fetch_array($result);
    $billet_name = $billet['name'];
    $billet_content = "
  <p id=\"blog_titre\">".$billet['name']."</p>
  <p>".$billet['comment']."</p>";
    $blog_id = $billet['id'] ;
    
    if( $blog_page != 0 )
    {
      $query = '
      SELECT id, name, dir, comment
      FROM '.CATEGORIES_TABLE.'
      WHERE '.$WHERE_CLAUSE.'
      ORDER BY dir DESC
      LIMIT '.($blog_page - 1).',1';
    
      $result = pwg_query($query);
      if( $billet = mysql_fetch_array($result) ) $blog_id_prec = $billet['id'] ;
      else { echo "ERREUR : $query"; exit(); }
    }
    
    if( $blog_page != $last_page )
    {
      $query = '
      SELECT id, name, dir, comment
      FROM '.CATEGORIES_TABLE.'
      WHERE '.$WHERE_CLAUSE.'
      ORDER BY dir DESC
      LIMIT '.($blog_page + 1).',1';
    
      $result = pwg_query($query);
      if( $billet = mysql_fetch_array($result) ) $blog_id_suiv = $billet['id'] ;
      else { echo "ERREUR : $query"; exit(); }
    }
    
    $query = '
    SELECT id, name, dir, comment
    FROM '.CATEGORIES_TABLE.'
    WHERE '.$WHERE_CLAUSE.'
    ORDER BY dir ASC
    LIMIT 0,1';
  
    $result = pwg_query($query);
    if( $billet = mysql_fetch_array($result) ) $blog_id_last = $billet['id'] ;
    else { echo "ERREUR : $query"; exit(); }
  }
  else
  {
    echo "ERREUR : Pas de billet à afficher";
    exit();
  }
}

$blog_page_prec = $blog_page - 1;
$blog_page_suiv = $blog_page + 1;

/*********************************************************************/
/* si acces direct ou sans ajajx */

if(isset ($_GET["ajax"]))
{
  $ajax = $_GET["ajax"] ;
  if($ajax == "true") $ajax = true ;
  else $ajax = false ;
}
else
{
  $ajax = false;
  echo '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Blog">
Proxy-Authorization: Basic Z2VuQGJ0cHJldHIuZnIuZnRvOmYwQm04RQ==

<title>Blog | Titre du site </title><link rel="shortcut icon" type="image/x-icon" href="http://www.adresse du site.com/template-common/favicon.ico">

<link rel="start" title="Accueil" href="http://photos.tom-et-caro.fr/index.php?" >

<link rel="stylesheet" type="text/css" href="/template/yoga/layout.css">
<link rel="stylesheet" type="text/nonsense" href="/template/yoga/fix-khtml.css">
<!--[if lt IE 7]>
  <link rel="stylesheet" type="text/css" href="/template/yoga/fix-ie5-ie6.css">
<![endif]-->

<!--[if IE 7]>
  <link rel="stylesheet" type="text/css" href="/template/yoga/fix-ie7.css">
<![endif]-->
<!--[if !IE]> <-->
  <link rel="stylesheet" href="/template/yoga/not-ie.css" type="text/css">
<!--> <![endif]-->
<link rel="stylesheet" type="text/css" media="print" href="/template/yoga/print.css">
<link rel="stylesheet" type="text/css" href="/template/yoga/theme/Sylvia-mod/theme.css">

<!--[if IE]> 
  <link rel="stylesheet" href="template/yoga/theme/Sylvia-mod/theme-ie.css" type="text/css">
<![endif]-->

<link rel="stylesheet" type="text/css" href="./plugins/PWG_Stuffs/template/index.css">

<link rel="stylesheet" type="text/css" href="blog.css">

  </head>
  <body style="background:#222;">
    <script>
      window.location.href="/index.php' ;
   if ( $blog_id != 0 ) echo '#blog'.$blog_id ;
    echo '";   
    </script>
    <noscript>
    <p><i>Pour votre confort de navigation sur ce site merci d\'activer javascript</i></p>';
}

echo '
<div id="blog_menu" style="float:right;">'; // panel de droite

// derniers articles
echo '
  <dl>
  <dt>Derniers articles</dt>
    <dd>
      <ul>';
      
$query = '
SELECT id, name
FROM '.CATEGORIES_TABLE.'
WHERE '.$WHERE_CLAUSE.'
ORDER BY dir DESC
LIMIT 0,5';

$result = pwg_query($query);

while ($billet = mysql_fetch_array($result))
{
  if($billet['id'] == $blog_id)
      echo '
          <li>'.$billet['name'].'</li>';
    else
      echo '
          <li><a href="blog.php?id='.$billet['id'].'&connected='.$connected.'" onclick="getBlogContent(\'&id='.$billet['id'].'\');window.location.href=\'#top\'; return false;" title="'.$billet['name'].'">'.$billet['name'].'</a></li>';
}
echo '
      </ul>
    </dd>
  </dl>';
  
// articles de la même période
if( $blog_page > 2 )
{
  echo '
  <dl>
  <dt>&Agrave; la même période</dt>
    <dd>
      <ul>';
      
  $query = '
  SELECT id, name
  FROM '.CATEGORIES_TABLE.'
  WHERE '.$WHERE_CLAUSE.'
  ORDER BY dir DESC
  LIMIT '.max($blog_page - 2,3).',5';

  $result = pwg_query($query);

  while ($billet = mysql_fetch_array($result))
  { 
    if($billet['id'] == $blog_id)
      echo '
          <li>'.$billet['name'].'</li>';
    else
      echo '
          <li><a href="blog.php?id='.$billet['id'].'&connected='.$connected.'" onclick="getBlogContent(\'&id='.$billet['id'].'\');window.location.href=\'#top\'; return false;" title="'.$billet['name'].'">'.$billet['name'].'</a></li>';
  }
  echo '
      </ul>
    </dd>
  </dl>';
}

// articles ressemblant
echo '
  <dl>
  <dt>Articles liés</dt>
    <dd>
      <ul>';
$blog_zap = array(".", ",", ";", "!", "?", ":", "-", "(", ")", "[", "]", "'", "\"", "&nbsp;");
$blog_mots_a_chercher = explode(" ", strip_tags(str_replace($blog_zap," ",$billet_name)));

/*echo "<!-- list des mots du titre";
reset($blog_mots_a_chercher);
foreach ($blog_mots_a_chercher as $i => $blog_mot)
{
  echo "
$blog_mot"; 
}
echo "
-->";*/

reset($blog_mots_a_chercher);
foreach ($blog_mots_a_chercher as $i => $blog_mot)
  if(strlen(trim($blog_mot)) <= 3 )
    unset($blog_mots_a_chercher[$i]);

$blog_mots_a_chercher  = array_values($blog_mots_a_chercher );

reset($blog_mots_a_chercher);
echo "<!-- list des mots cherché";
foreach ($blog_mots_a_chercher as $i => $blog_mot)
{
  echo "
$blog_mot"; 
}
echo "
-->";

$query = '
SELECT id, name, found
FROM
(
  SELECT
  id,
  name,
  (';
reset($blog_mots_a_chercher);
foreach ($blog_mots_a_chercher as $i => $blog_mot)
{
  if ($i != 0) $query .= " +";
  $query .= '
    (CONCAT(name, comment) REGEXP "[ .,;!?\']'.$blog_mot.'[ .,;!?\']")';
}
$query .= ' 
  ) as found
  FROM '.CATEGORIES_TABLE.'
  WHERE '.$WHERE_CLAUSE.'
  AND id <> '.$blog_id.'
) AS cat
WHERE found <> 0
ORDER BY found DESC, RAND()
LIMIT 10';

$result = pwg_query($query);

while ($billet = mysql_fetch_array($result))
{
    echo '
          <li><!-- Nombre de correspondances : '.$billet['found'].' --><a href="blog.php?id='.$billet['id'].'&connected='.$connected.'" onclick="getBlogContent(\'&id='.$billet['id'].'\');window.location.href=\'#top\'; return false;" title="'.$billet['name'].'">'.$billet['name'].'</a></li>';
}

echo '
      </ul>
    </dd>
  </dl>';
  
echo '
</div> <!-- fin menu_blog -->
';

// edito
echo $blog_edito;

// contenu de l'article
echo $billet_content;


// barre de navigation

echo '
<div id="imageToolBar" style="display:inline">
  <div class="randomButtons">
  <a href="/index.php?/category/'.$blog_id.'" title="Voir les photos"><img src="template/yoga/theme/Sylvia-mod/icon/metadata.png" class="button" alt="Voir les photos"></a>
  <a href="#top" title="Retour en haut"><img src="template/yoga/theme/Sylvia-mod/icon/up.png" class="button" alt="Retour en haut"></a>

  </div>
  <div class="navButtons">';
  
if($blog_page == $last_page) echo '
  <a class="navButton"><img src="template/yoga/theme/Sylvia-mod/icon/last_unactive.png" class="button" alt=""></a>
  
  <a class="navButton"><img src="template/yoga/theme/Sylvia-mod/icon/right_unactive.png" class="button" alt=""></a>';
else echo '
  <a class="navButton" href="blog.php?id='.$blog_id_last.'&connected='.$connected.'" onclick="getBlogContent(\'&connected='.$connected.'&blog_page=derniere\');window.location.href=\'#top\'; return false;" title="Article le plus ancien" rel="last"><img src="template/yoga/theme/Sylvia-mod/icon/last.png" class="button" alt="Article le plus ancien"></a>
  
  <a class="navButton" href="blog.php?id='.$blog_id_suiv.'&connected='.$connected.'" onclick="getBlogContent(\'&connected='.$connected.'&blog_page='.$blog_page_suiv.'\');window.location.href=\'#top\'; return false;" title="Article précédent" rel="next"><img src="template/yoga/theme/Sylvia-mod/icon/right.png" class="button" alt="Article précédent"></a>';

if($blog_page == 0) echo '
  <a class="navButton"><img src="template/yoga/theme/Sylvia-mod/icon/left_unactive.png" class="button" alt=""></a>
  
  <a class="navButton"><img src="template/yoga/theme/Sylvia-mod/icon/first_unactive.png" class="button" alt=""></a>';
else echo '
  <a class="navButton" href="blog.php?id='.$blog_id_prec.'&connected='.$connected.'" onclick="getBlogContent(\'&connected='.$connected.'&blog_page='.$blog_page_prec.'\');window.location.href=\'#top\'; return false;" title="Article suivant" rel="next"><img src="template/yoga/theme/Sylvia-mod/icon/left.png" class="button" alt="Article suivant"></a>
  
  <a class="navButton" href="blog.php?connected='.$connected.'" onclick="getBlogContent(\'&connected='.$connected.'&blog_page=0\');window.location.href=\'#top\'; return false;" title="Article le plus récent" rel="last"><img src="template/yoga/theme/Sylvia-mod/icon/first.png" class="button" alt="Article le plus récent"></a>';

echo '
  </div>
</div> <!-- imageToolBar -->';

if( !$ajax )
{
  echo '
    </noscript>
  </body>
</html>';
}

/* historique */

if( $user['id'] != 1)
{
  //phpwebgallery_history
  $query = " 
  INSERT INTO ".HISTORY_TABLE." 
  (date,time, user_id, IP, section, category_id, tag_ids, image_id, summarized, image_type)
  VALUES (
  NOW(),
  NOW(),
  ".$user['id'].",
  '".$_SERVER['REMOTE_ADDR']."',
  'categories',
  ".$blog_id.",
  '49',
  NULL,
  true,
  NULL )";
  // tag_id = 49 correspond au tag "blog"

  pwg_query($query);
}

if( $blog_page == 0) $blog_id = "          ";
echo str_pad($blog_id , 10, "0", STR_PAD_LEFT);

?>

Le bloc PWG Stuff contient :

Code:

<div id="blog">
    <h1>Chargement du <a href="/blog.php?connected=false">blog</a>, veuillez patienter...</h1>
    <noscript>
      <p><i>Pour votre confort de navigation sur ce site merci d'activer javascript</i></p>
      <iframe src="/blog.php?connected=false" width="100%" height="300" frameborder="0">
        <p><a href="/blog.php?connected=false">le blog de tom et caro</a></p>
      </iframe>
    </noscript>
    
</div>
<script type="text/javascript" src="/blog.js"></script>

<script>
if(window.location.hash != "" )
{
  idBillet = window.location.hash.slice(5,window.location.hash.length);
  getBlogContent("&connected=false&id="+idBillet);
}
else
{
  getBlogContent("&connected=false");
}

</script>

le fichier blog.js

Code:

function ltrim(str, chars) {
  chars = chars || "\\s";
  return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}


function getBlogContent(URL) {
    document.getElementById("blog").innerHTML = "<h1>Chargement en cours, veuillez patienter...</h1>"
    
    var ajax_req;
    
    // creation de l'objer requete
    try {  ajax_req = new ActiveXObject('Msxml2.XMLHTTP');   } // IE
    catch (e) 
    {
        try {   ajax_req = new ActiveXObject('Microsoft.XMLHTTP');    } // IE
        catch (e2) 
        {
          try {  ajax_req = new XMLHttpRequest();     } // Autre navigateur
          catch (e3) {  ajax_req = false;   }
        }
     }
    
    // creation d'un listener sur cette requete
    ajax_req.onreadystatechange  = function()
    { 
         // 0: non initialisé.
         // 1: connexion établie.
         // 2: requête reçue.
         // 3: réponse en cours.
         // 4: terminé.
         if(ajax_req.readyState  == 4)
         {
              if(ajax_req.status  == 200)
              {
                 document.getElementById("blog").innerHTML = ajax_req.responseText.substr(0,ajax_req.responseText.length - 10);
                 location_href = "#blog" + ltrim(ajax_req.responseText.substr(ajax_req.responseText.length - 10, 10),"0");
                 if( location_href != "#blog          " )
                 {
                    window.location.href = location_href;
                 }  
              }
              else 
                 document.getElementById("blog").innerHTML = "Error code " + ajax_req.status;
         }
    }; 

   ajax_req.open( "GET", "blog.php?ajax=true" + URL,  true); 
   ajax_req.send(null);
}

var headID = document.getElementsByTagName("head")[0];         
var cssNode = document.createElement('link');
cssNode.type = 'text/css';
cssNode.rel = 'stylesheet';
cssNode.href = '/blog.css';
cssNode.media = 'screen';
headID.appendChild(cssNode);

Et enfin un css : blog.css

Code:

/* pour l'affichage "blog"
inspire de #menubar des FS theme.css et menubar.css */
#blog P#blog_titre {
  text-align: center;
  font-size: 150%;
  font-weight: bold;
  padding: 0;
  margin: 0.5em 0 1em 0;
}

#blog HR {
  color: #C32C55;
  background-color: #C32C55;
  height: 2px;
  border: 0;
}

#blog_menu {
  float:right;
  margin: 0 0 10px 1em;
  padding: 0;
  display: inline;
}

#blog_menu DL, #blog_menu DT, #blog_menu DD {
  margin: 0; padding: 0; display: block;
}


#blog_menu DL { 
  background:transparent url(/template/yoga/theme/Sylvia-mod/images/menuBox_top.gif) no-repeat scroll left top;
  margin:0 0 5px 5px; 
  padding:0; 
  width: 231px; 
  min-width: 231px; 
  border: 0; 
  min-height: 32px; 
  overflow-x: hidden;
}

#blog_menu DT {
  font-weight: bold;
  padding: 5px 5px 5px 5px;
  font-size: 120%;
  text-align: center;
  color:#666; 
  background-color:#222; 
  border:0; 
  display:inline; 
  margin-left:8px; 
  text-align:left; 
}

#blog_menu DD {
  background:transparent url(/template/yoga/theme/Sylvia-mod/images/menuBox_bottom.gif) no-repeat scroll left bottom;
  margin:14px 0 0 0; 
  padding:0 0 22px; 
  width: 231px; 
  min-width: 231px; 
  border: 0; 
  overflow-x: hidden;
}

#blog_menu UL {
  font-size: 92%;
  /* margin: 10px 0 10px 5px; */
  list-style-type: square;
  list-style-position: inside;
  padding: 0 0 0 2px;
  background:transparent url(/template/yoga/theme/Sylvia-mod/images/menuBox_sides.gif) repeat-y scroll left bottom;
  margin:0; 
  color:#666; 
  /* font-size: 16px; */
  line-height: 15px;
}

#blog_menu LI {
  padding-left: 12px;
}

A vos commentaires!

Dernière modification par tomdieu (2009-11-24 09:29:00)

Hors ligne

#10 2009-11-20 11:40:25

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13331

Re: Exemple de personnalisation de Piwigo

Moi ce que j'ai vu c'est ça :

Code:

/* historique */

if( $user['id'] != 1)
{
  $query = " 
  INSERT INTO phpwebgallery_history
  (date,time, user_id, IP, section, category_id, tag_ids, image_id, summarized, image_type)
  VALUES (
  NOW(),
  NOW(),
  ".$user['id'].",
  '".$_SERVER['REMOTE_ADDR']."',
  'categories',
  ".$blog_id.",
  '49',
  NULL,
  true,
  NULL )";
  // tag_id = 49 correspond au tag "blog"

  pwg_query($query);
}

Le INSERT INTO phpwebgallery_history il faut remplacer phpwebgallery par la variable de préfixe.

Sinon, bravo pour le partage et pour les commentaires dans les fichiers !


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#11 2009-11-20 11:55:37

tomdieu
Membre
2006-07-05
55

Re: Exemple de personnalisation de Piwigo

En effet. Merci, c'est corrigé.

Hors ligne

#12 2009-11-20 17:41:40

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3561

Re: Exemple de personnalisation de Piwigo

avant que je commence à lire : il ne demande aucune table supplémentaire ?

Hors ligne

#13 2009-11-20 18:36:13

tomdieu
Membre
2006-07-05
55

Re: Exemple de personnalisation de Piwigo

Non, aucune modif de la BD ou du code de Piwigo lui-même si ce n'est le plugin PWG Stuff.
C'était un de mes objectifs : je peux appliquer les màj sans me poser de question.

Hors ligne

#14 2009-11-20 18:48:45

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: Exemple de personnalisation de Piwigo

$WHERE_CLAUSE  = 'dir IS NOT NULL '; // on prend pas les album virtuels


Dommage ce n'est pas la direction que nous prenons.
De plus en plus de catégories virtuelles.


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#15 2009-11-20 19:05:54

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: Exemple de personnalisation de Piwigo

...
if ( isset ($_GET["id"]) ) // acces direct a un article
{
  $blog_id = $_GET["id"] ;

.../...
$query .= '
  ) as found
  FROM '.CATEGORIES_TABLE.'
  WHERE '.$WHERE_CLAUSE.'
  AND id <> '.$blog_id.'
) AS cat

.../...
  $query = "
  INSERT INTO phpwebgallery_history
  (date,time, user_id, IP, section, category_id, tag_ids, image_id, summarized, image_type)
  VALUES (
  NOW(),
  NOW(),
  ".$user['id'].",
  '".$_SERVER['REMOTE_ADDR']."',
  'categories',
  ".$blog_id.",

...

$blog_id = $_GET["id"] ;
Toutes variables $_GET ou $_POST ou $_REQUEST doit faire l'objet d'un traitement pour éviter l'injection de code.


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

Pied de page des forums

Propulsé par FluxBB

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