#61 2009-05-25 00:38:36

repie38
Former Piwigo Team
grenoble
2006-05-23
678

Re: Intégration de la galerie dans une structure existante

http://fr.piwigo.org/forum/viewtopic.ph … 54#p109054

tu as un bon debut de piste ici ;)

Hors ligne

#62 2009-05-25 00:48:58

Julien PROVOST
Membre
2009-05-24
12

Re: Intégration de la galerie dans une structure existante

Merci pour ta réponse,

mais j'ai déjà essayé ce que tu avais proposé. Je ne suis quand même pas du genre à poser une question sans avoir lu le fil au prélable.
Mon problème si je l'utilise tel quel c'est que le code php n'est pas géré, et là est tout mon problème.
J'ai essayé en mettant include à la place de file_get_contents, mais cela ne fonctionne pas, et comme j'ai vu que tu avais dit que les fichiers php à inclure ne devait contenir que du code html, je me suis résigné à poser la question.

Merci,

Hors ligne

#63 2009-05-25 02:21:23

repie38
Former Piwigo Team
grenoble
2006-05-23
678

Re: Intégration de la galerie dans une structure existante

ok, c'etait pour etre sur qu'on reparte du meme point ;)
effectivement, avec file_get_contents(), uniquement du html.
en fait il faut donner du html brut au extension du template, mais le plugin permet d'integrer du php.
donc l'include est la solution, mais pour cela il faut que le contenu de ce fichier renvoi le html au plugin (et le plugin aux extension de template),
et non pas qu'il fasse d' echo.
il faut donc une fonction qui retourne (return $truc) le html fini de ton site (ou partie)

quelque chose du genre :

function Piwigo_embeder(){
  $this->pe_head_element="<script>ici tes scripts et /ou tes css</script>";
  include ('../head.php'),  //url de tes includes
  $this->pe_header=array(
    TaFonctionQuiRetourneDuHtml($parametresibesoin),
    TaFonctionQuiRetourneDuHtml2($parametresibesoin),    
  );
  $this->pe_foot=array(
    file_get_contents('../foot.php'),
    file_get_contents('..toto'),
  );
}

attention toutefois, il est tard et je n'ai peut etre pas les yeux en face des trous :D
en fonction de comment est construit ton site en php, il y'a peut etre une autre option :
fopen de ta page d'accueil par exemple, puis coupage de celle ci pour les partie qui t'interesse, et renvoi dans les template extension ...

Dernière modification par repie38 (2009-05-25 02:25:39)

Hors ligne

#64 2009-05-25 08:17:47

Julien PROVOST
Membre
2009-05-24
12

Re: Intégration de la galerie dans une structure existante

Bonjour,

Merci, je vais regarder du côté de return. Je ne connaissais pas, j'apprends un peu au fur et à mesure de mes besoins et je n'en avais jamais eu besoin. Donc merci pour cette piste, j'ai regarder dans mon bouquin "pour les n*ls" et je vois comment l'utiliser je vais donc m'y attacher à le pause de ce midi.

Sinon, concernant la structure de mon site, il est construit comme suit :

<body>
    <div id="fixedcontainer">
        <div id="menu">
        Contenu du menu (liste et listes de listes)
        </div>
        <div id="news">
        Contenu de mes news
        </div>
    </div>
    <div id="floatcontainer">
        <div id="header">
            Mon header
        </div>
        <div id="content_page">
        Le contenu de mes pages
        </div>
    <div id="footer">
            Mon footer
        </div>
    </div>
</body>

Pour générer une page classique, je pars d'une page php, par exemple page.php de laquelle j'appelle :
declaration.inc.php dans laquelle je crée mes liens et construit le bloc <head> de la page finale,
menu.inc.php qui contient mon menu (dynamique en fonction de la page active),
news.inc.php qui contient comme son nom l'indique des news relatives au site en général,
header.inc.php, mon header qui est pour l'instant statique, mais je je souhaiterais rendre dynamique,
footer.inc.php qui contient diverses infos telles le temps de génération de la page, les liens W3C, ...

page.cont.php qui contient le contenu principal de la page

Les fichiers *.inc.php sont dans un repertoire _inc_ à la racine de mon site
Le fichier page.cont.php sont dans un sous-repertoire _cont_ du répertoire où se situe page.php (J'ai fait un essai avec des fichiers de Piwigo et dans ce cas, ils vaut mieux laisser les fichiers *.php et *.cont.php dans le même répertoire. J'avais renommer les fichiers php de la racine pour lesquelles je souhaitais une intégration dans le style de mon site (comments, identificaion, index, picture, ...) en .cont.php) et créer des pages php du même nom avec la structure classique. Le résultat était visuellement correct sous Firefox, mis à part quelques conflits de CSS mais ça c'est pas bien grave, je verrais plus tard. Mais la source était vraiment très moche (2 blocs head), et en cherchant un peu plus je n'ai pas réussi à insérer mon code usuel après le bloc head de Piwigo.

Pour les pages de l'album Piwigo, je souhaite garder la même structure de page, mais elle peut être construite de manière différente, d'où ma réflexion précédente : intégration de Piwigo dans ma structure existante ou bien intégration de ma structure existante dans Piwigo. Je pense que la deuxième solution est plus simple, en raison du nombre de variables manipulées (titre de page, ... , refresh en mode diaporama (cf. le lien de  mon premier post), ...)
Mais les pages *.inc.php se situent toujours au même endroit, l'utilisation de fichiers *.cont.php est alors inutile.

Je pense qu'avec ton indication concernant le return je devrais pouvoir m'en sortir, mais si une autre solution te semble plus appropriée j'en serais ravi et testerais les deux (ou plus) méthodes.

Encore merci à toi pour ton aide, et à toute l'équipe pour votre magnifique outil.
Bonne journée

Hors ligne

#65 2009-05-25 08:44:07

repie38
Former Piwigo Team
grenoble
2006-05-23
678

Re: Intégration de la galerie dans une structure existante

tout depend comment sont construit les fichiers php.
si chacun des fichiers appelés pour 1 page (y compris les include) renvoi directement (via des echo) le html (le html brut : structure, et le contenu dynamique),
alors ce sera beaucoup de travail pour utiliser la premiere methode.
en revanche, si tu appele un fichier php (celui dont on tape l'adresse) qui lui recupere le html pour lui meme l'afficher ce sera simple.

la deuxieme solution (avec fopen) serait de recuperer le html généré par une des pages dynamiques, et de faire du traitement de chaine de caractere pour recuperer ce dont tu as besoin (par exemple, recuper tout ce qui contenu entre <div id="truc"> et le prochain </div>)

ce sont 2 approche différentes pour faire la meme chose.

Hors ligne

#66 2009-05-25 11:52:17

Julien PROVOST
Membre
2009-05-24
12

Re: Intégration de la galerie dans une structure existante

Merci,

donc dans mon cas, comme toutes (ou presque) les pages appelées contiennent du code php et renvoient du code html via des echo, il serait sans doute plus simple d'utiliser la fonction fopen.

Sinon, je pensais créer une fonction générique permettant de retourner du code html en lui donnant comme paramètre l'adresse du fichier php initial, plutôt que de créer une fonction pas page php initiale. Puis j'appellerai cette fonction via le code que tu as donné, mais cela reviens dans doute à peu près à la même chose que d'utiliser fopen, mais non optimisé.

Par contre, tu parles de traitement de chaîne de caractère, cela veut-il dire que la chaîne récupérée va être très "moche"?
Je vais regarder ça tout à l'heure, et je vous tiens au courant.

Hors ligne

#67 2009-05-25 13:59:54

Julien PROVOST
Membre
2009-05-24
12

Re: Intégration de la galerie dans une structure existante

J'ai essayé avec fopen mais mon problème est actuellement : comment générer le html à partir du contenu php ?

Par exemple, voici un morceau de mon fichier menu.inc.php :
<div id="menu">
    <ul>
        <li><a <?php if ($ActiveMenu=="Accueil") {?>class="actif"<?php } ?> href="<?php echo ($RelRoot."index.php") ?>">Accueil<span>Retour &agrave; la page d'accueil</span></a>
        </li>
        <li><a <?php if ($ActiveMenu=="Album") {?>class="actif"<?php } ?> href="<?php echo ($RelRoot."album/index.php") ?>">Album photo<span>Venez nous d&eacute;couvrir en photos</span></a>
        </li>
    </ul>
</div>

Où la variable $ActiveMenu aura été préalablement définie, dans le cas de Piwigo elle vaudra "Album"

Je n'arrive pas à générer le code html correspondant.
J'ai fait quelques recherches mais je ne trouve pas de réponse à mon problème.

Merci et bonne après-midi,

Hors ligne

#68 2009-05-25 19:37:07

Julien PROVOST
Membre
2009-05-24
12

Re: Intégration de la galerie dans une structure existante

Bonsoir,

Ca y est j'ai réussi à intégrer du code html dans les pages Piwigo. Mes erreurs venaient du fait que je donnais les adresses en relatif, alors qu'il faut les données avec l'adresse conplète pour que le code php soit traduit en html.
Dites-moi si je me trompe !

J'ai donc crée un fonction php2html($adr) que voici :
<?php
function php2html($adr) // Donner l'adresse depuis la racine du site
{
    $htmlcode=""; //lecture du fichier
    $fp = fopen("http://".$_SERVER['SERVER_NAME']."/".$adr,"r"); // Ouvrir le fichier via le protocole http
    while (!feof($fp)) { //Parcourir toutes les lignes
        $htmlcode .= fgets($fp, 8192); // Lire le contenu de la ligne
    }
    return $htmlcode;
}
?>

Cette fonction est écrite dans un fichier php2html.lib.php situé dans un répertoire où je stocke diverses librairies.
Je l'appelle donc juste avant la classe que tu avais proposée, et voici la fin de mon fichier main.inc.php

include ("../_lib_/php2html.lib.php");
   
class Piwigo_embeder
{
    var $header_album;
    var $fixed_menu;
    var $fixed_news;

    function Piwigo_embeder(){
        $this->header_album=array(
            php2html('_inc_/header_album.inc.php')
            );
        $this->fixed_menu=array(
            php2html('_inc_/menu.inc.php')
            );
        $this->fixed_news=array(
            php2html('_inc_/news.inc.php')
            );

    }
    function pe_do_it(){
        global $template;
        $template->assign('header_album',$this->header_album);
        $template->assign('fixed_menu',$this->fixed_menu);
        $template->assign('fixed_news',$this->fixed_news);
    }
}
$obj = new Piwigo_embeder();
add_event_handler('loc_begin_page_header', array(&$obj, 'pe_do_it') );
//add_event_handler('get_admin_plugin_menu_links', array(&$obj, 'plugin_admin_menu') );
//set_plugin_data($plugin['id'], $obj);
?>

Ainsi le code des différentes parties est bien inséré au bon endroit.

Mais, car il y a un mais, les varaibles que je déclare dans le fichier index.php (de Piwigo) ne sont pas prise en compte lors de la génération du code html. Du coup, mon menu a le bon look, mais les liens (entre autres) ne sont pas correctement générés. Dans la source j'ai le message "<b>Notice</b>:  Undefined variable: RelRoot ..." qui est pourtant défini dans index.php, dans page_header.php et dans php2html.lib.php.

Comment puis-je faire pour que ces variables soient effectivement prises en compte ?
Je sais que je suis aux limites du lien avec Piwigo, mais sans doute avez-vous plus de connaissance en PHP que moi, et comprenez mieux le problème que je cherche à résoudre que sur d'autre forums plus généraux.

Merci d'avance

Hors ligne

#69 2009-05-25 23:04:02

repie38
Former Piwigo Team
grenoble
2006-05-23
678

Re: Intégration de la galerie dans une structure existante

Julien PROVOST a écrit:

Bonsoir,

Ca y est j'ai réussi à intégrer du code html dans les pages Piwigo. Mes erreurs venaient du fait que je donnais les adresses en relatif, alors qu'il faut les données avec l'adresse conplète pour que le code php soit traduit en html.
Dites-moi si je me trompe !

c'est bien ca ;)

Julien PROVOST a écrit:

Mais, car il y a un mais, les varaibles que je déclare dans le fichier index.php (de Piwigo) ne sont pas prise en compte lors de la génération du code html. Du coup, mon menu a le bon look, mais les liens (entre autres) ne sont pas correctement générés. Dans la source j'ai le message "<b>Notice</b>:  Undefined variable: RelRoot ..." qui est pourtant défini dans index.php, dans page_header.php et dans php2html.lib.php.

Comment puis-je faire pour que ces variables soient effectivement prises en compte ?

et dans _inc_/menu.inc.php ? RelRoot est défini ?

Hors ligne

#70 2009-05-26 00:10:32

Julien PROVOST
Membre
2009-05-24
12

Re: Intégration de la galerie dans une structure existante

Bonsoir,

Non RelRoot n'est pas défini dans menu.inc.php. J'ai compris le problème des variables, mais je ne peux pas toutes les redéclarer dans le menu, c'est pas le principe. Le menu doit être construit en fonction de variable défini de manière générale.

Du coup, j'ai testé une autre méthode sans avoir à modifier le code de Piwigo.
Toujours en utilisant la fonction fopen.

Je renomme les fichiers php de la racine de Piwigo que je souhaite intégrer dans ma structure commune en *.pwg.php au lieu de *.php.
J'ai modifier en conséquence le fichier include/section_init.inc.php :
j'ai remplacé script_basename() par ereg_replace(".pwg","",script_basename()) dans l'ensemble du fichier

Je crée un fichier integration.php à la racine de l'album Piwigo. Dans ce fichier je vais mes déclarations de variables pour le menu ..., je fais les include des fichiers présents dans la structure commune. En voici le contenu :

Code:

<?php
  /* Definition de $RelRoot permettant d'ecrire des liens relatifs plus facilement */
  $Adr = $_SERVER['PHP_SELF'];
  $Dir = explode('/',$Adr);
  $RelRoot = str_repeat("../",sizeof($Dir)-2);
  /* FIN Definition de $RelRoot permettant d'ecrire des liens relatifs plus facilement */

  /* Inclusion du fichier de declaration */
  include($RelRoot."_inc_/declaration_nohead.inc.php");
?>
<div id="fixedcontainer">
    <?php include($RelRoot_inc."menu.inc.php"); ?>
    <?php include($RelRoot_inc."news.inc.php"); ?>
  </div> <!-- fixedcontainer -->
  
  <div id="floatcontainer">
    <?php include($RelRoot_inc."header_album.inc.php"); ?>
    <div id="Piwigocontainer">
      Contenu Piwigo
    </div> <!-- Piwigocontainer -->
    <?php include($RelRoot_inc."footer_album.inc.php"); ?>
  </div> <!-- floatcontainer -->
</body>
</html>

Le contenu de l'album doit s'insérer à la la place de "Contenu Piwigo"

Pour ça, je crée les fichiers *.php du même nom que ce que je venais de renommer et j'y insère le code suivant :

Code:

<?php
  /* Depart compteur temps generation PHP */
  $StartTime = microtime(true);
  
  /* Indiquer ici le sous-menu actif, exemple : $ActiveMenu = "index";  (Voir menu.inc.php) */
  $ActiveMenu = "Album";
  
  /* Definition de $RelRoot permettant d'ecrire des liens relatifs plus facilement */
  $Adr = $_SERVER['PHP_SELF'];
  $Dir = explode('/',$Adr);
  $RelRoot = str_repeat("../",sizeof($Dir)-2);
  /* FIN Definition de $RelRoot permettant d'ecrire des liens relatifs plus facilement */

  /* Inclusion du fichier de declaration */
  include($RelRoot."_inc_/declaration_nohead.inc.php");

  /* Integration de la partie PIWIGO */
  /* Declaration */
  $adrPWG = "http://".$_SERVER['SERVER_NAME'].ereg_replace(".php",".pwg.php",$_SERVER['REQUEST_URI']);
  /* Lecture et traitement */
  $handle = @fopen($adrPWG, "r");
  if ($handle) { // Si le fichier existe
    $HTMLCode=""; // Créer une chaîne vide
    while (!feof($handle)) {
      $buffer = fgets($handle, 4096); // Lire le contenu de la ligne
      if(ereg("<body",$buffer)){ // Détection de début de body = fin de head
        $HTMLCode .= $buffer;
        $BlocHEAD = $HTMLCode;
        $HTMLCode="";
      }
      elseif(ereg("</body",$buffer)){ // Détection de fin de body
        $BlocPWG = $HTMLCode;
        $HTMLCode="";
        $HTMLCode .= $buffer;
      }
      else{
        $HTMLCode .= $buffer;
      }
    }
    fclose($handle);
  }
  
  /* Integration de la partie commune */
  /* Declaration */
  $albumfolder="/album/";
  $adrCOM = "http://".$_SERVER['SERVER_NAME'].$albumfolder."integration.php?StartTime=".$StartTime;
  /* Lecture et traitement */
  $handle = @fopen($adrCOM, "r");
  if ($handle) { // Si le fichier existe
    $HTMLCode=""; // Créer une chaîne vide
    while (!feof($handle)) {
      $buffer = fgets($handle, 4096); // Lire le contenu de la ligne
      if(ereg("Contenu Piwigo",$buffer)){ // Détection de la chaine "Contenu Piwigo"
        $BlocINTEGRATION_1 = $HTMLCode;
        $HTMLCode="";
      }
      else{
        $HTMLCode .= $buffer;
      }
    }
    $BlocINTEGRATION_2 = $HTMLCode;
    fclose($handle);
  }
  
  /* Agencement et renvoi des blocs */
  $FinalHTMLCode = "";
  $FinalHTMLCode .= $BlocHEAD;
  $FinalHTMLCode .= $BlocINTEGRATION_1;
  $FinalHTMLCode .= $BlocPWG;
  $FinalHTMLCode .= $BlocINTEGRATION_2;
  
  echo $FinalHTMLCode;
?>

Ce qui me permet d'entrecroiser l'entête générée par Piwigo, puis mes menu et news fixes ainsi que mon header, puis le contenu de l'album, et enfin mon footer.

J'ai modifier le fichier header.tpl pour y ajouter ma feuille de style commune, mais j'aurais pu le faire via le même principe que précedemment.

Le résultat visuel est parfait (hormis les priorités/conflits css que je n'ai pas encore réglés, mais ça c'est moins gênant. Il y a juste un problème de police, sinon les couleurs et dimensions des cadres me semblent bonnes). Ceux qui doit être fixe est fixe, mon header est bien tout en haut, mon footer tout en bas, ...
Le diaporama fonctionne, ...
La source html générée est aussi correcte (elle n'est pas valide W3C car j'étais parti en XHTML 1.1).

Malheureusement, je ne peux plus m'identifier. Sans doute un problème de sessions PHP (problème précedemment evoqué par VDigital), mais là je n'y connais absolument rien. Je ne pense pas que cela vienne de ma modification dans section_init.inc.php. Donc je ne sais pas s'il est possible de trouver une solution simple à cela.

Si ce n'est pas le cas, je crois que je vais laisser tomber cette intégration, car toutes les pistes envisagées m'amènent à un nouveau problème !
Quoi que, c'est comme cela que l'on progresse !

Encore merci,

PS : J'avais bien crée un compte, il est toujours là d'après phpMyAdmin, et je ne peux pas créer non plus de nouveau compte, ni recevoir de mail pour modifier le mot de passe.

Dernière modification par Julien PROVOST (2009-05-26 00:22:32)

Hors ligne

#71 2009-05-26 07:49:17

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

Re: Intégration de la galerie dans une structure existante

Julien PROVOST a écrit:

PS : J'avais bien crée un compte, il est toujours là d'après phpMyAdmin, et je ne peux pas créer non plus de nouveau compte, ni recevoir de mail pour modifier le mot de passe.

Autres topics, merci.


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

#72 2009-05-27 22:15:54

Julien PROVOST
Membre
2009-05-24
12

Re: Intégration de la galerie dans une structure existante

Bonsoir,

J'ai finalement trouvé une solution "convenable" que j'ai détaillé ici : http://fr.piwigo.org/forum/viewtopic.ph … 75#p112375

Merci à repie38 pour son aide.

Hors ligne

#73 2009-12-28 13:28:51

jehanon
Membre
2009-12-28
43

Re: Intégration de la galerie dans une structure existante

intéressant, je vais relire tout ca au calme

merci beaucoup

Hors ligne

#74 2009-12-28 14:34:10

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

Re: Intégration de la galerie dans une structure existante

Intégration ???

Les liens indiqués dans le topic en question me font penser à un bricolage mais pas à une réelle intégration.
Alors qu'on sait très bien faire en standard.

Tant que je n'ai pas de lien vers la "structure existante", je ne sais pas trop que conseiller.

Etant l'auteur de PiwigoPress, je voudrais bien savoir quel type d'intégration est envisagé.

(Un bricolage empêchera une évolution des logiciels, alors qu'une intégration adaptée et prévue des 2 côtés laisse présager des évolutions sans difficultés).


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

#75 2009-12-28 14:38:46

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Re: Intégration de la galerie dans une structure existante

VDigital a écrit:

Tant que je n'ai pas de lien vers la "structure existante", je ne sais pas trop que conseiller.

J'ai cru comprendre que la "structure existante" ... n'existait encore qu'à l'état de concept. Toutes les solutions sont donc, sinon possibles, du moins envisageables ;)

Hors ligne

Pied de page des forums

Propulsé par FluxBB

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