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)).
et donc ce serait faisable avec
Je crois que tu as déjà eu une réponse t'indiquant que nous utilisions un moteur de template: Smarty
smarty.net
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); ?>
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 ;)
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).
intéressant, je vais relire tout ca au calme
merci beaucoup
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.
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.
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 :
<?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 :
<?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.
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 ?
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
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 à 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é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,
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.
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.