Écrire une réponse

Veuillez écrire votre message et l'envoyer

Cliquez dans la zone sombre de l'image pour envoyer votre message.

Retour

Résumé de la discussion (messages les plus récents en premier)

VDigital
2009-12-28 16:06:45

Quand tu écris

"appeler les vignettes de la galerie  choisie  qui passeront dans un container (div) du site
<?php piwigoGalerie('afrique'); ?>"

Ce genre de fonction n'existe pas en standard dans Piwigo car la syntax <?php ..... ?> n'est pas le standard.

Néanmoins il est facile de les  implémenter. Ce que je fais déjà et vais continuer de faire dans PiwigoPress en me basant sur l'appel des API de Piwigo.
Si tu veux voir comment fonctionnent les API, sur ta galerie, tu lances ..../tools/ws.htm sur ton navigateur.
Et tu pourras t'amuser avec toutes les combinaisons possibles ou imaginables.

L'API n'est pas fait pour se substituer à Piwigo mais pour offrir des moyens simples d'intégration dans d'autres applications (Web (PiwigoPress et WordPress), ou locales (pLoader en est un exemple)).

jehanon
2009-12-28 15:24:56

et donc ce serait faisable avec

VDigital
2009-12-28 15:22:00

Je crois que tu as déjà eu une réponse t'indiquant que nous utilisions un moteur de template: Smarty

smarty.net

jehanon
2009-12-28 14:46:56

pour moi (mes besoins) une intégration ,  si on regarde cette page http://fr.piwigo.org/demo/  , c'est avoir toutes les catégories (afrique, Amerique, etc...)  en sous menu d'un site existant appelée par exemple par galerie.php, ou en survol avec un include gallleryMenu , aucune recherches , aucunes spéciales

et appeler la galerie  http://fr.piwigo.org/demo/index.php?/category/Africa  au cœur du site avec un include  ou un truc du genre <?php piwigol('Afrique'); ?>  Afrique étant récupéré dans l'url

pour l'admin un lien à part peu importe

donc en gros

appeler les categories qui passeront dans le sous menu ou un élément du menu
<?php piwigoMenuCat(); ?>

appeler les vignettes de la galerie  choisie  qui passeront dans un container (div) du site
<?php piwigoGalerie('afrique'); ?>

appeler la photo choisie  qui passera dans un container (div) du site
<?php piwigoGalerieById(20); ?>

tosca
2009-12-28 14:38:46

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

VDigital
2009-12-28 14:34:10

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).

jehanon
2009-12-28 13:28:51

intéressant, je vais relire tout ca au calme

merci beaucoup

Julien PROVOST
2009-05-27 22:15:54

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.

VDigital
2009-05-26 07:49:17

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.

Julien PROVOST
2009-05-26 00:10:32

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.

repie38
2009-05-25 23:04:02

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 ?

Julien PROVOST
2009-05-25 19:37:07

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

Julien PROVOST
2009-05-25 13:59:54

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,

Julien PROVOST
2009-05-25 11:52:17

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.

repie38
2009-05-25 08:44:07

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.

Pied de page des forums

Propulsé par FluxBB

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