Je veux intégrer un agenda externe dans un block de droite,
voila l’include que je fais :
<?php
include('./Agenda/PageAccueil/agenda.php');
?>
Dans mon ancien index.php ça fonctionnait bien, j’ai fait le test avec une page vierge aussi.
Quand je rentre ce code php dans un block, j’ai directement le texte suivant pouruoi ?
Fatal error : Cannot redeclare db_connect() (previously declared in /homepages/15/d141929299/htdocs/includes/database.mysql.inc:55) in /homepages/15/d141929299/htdocs/Agenda/cgi-bin/lib.php3 on line 1
Merci à vous pourtant les identifiants de connexion sont bon puisque ça fonctionne hors contexte drupal ?
Identique pour cette requête :
<?php
include ("./gallerie/external_random.php")
?> alors que ça fonctionne dans mon ancien site.
Sauf que là, j’ai ce message d’erreur :
Fatal error : Cannot redeclare format_date() (previously declared in /homepages/15/d141929299/htdocs/includes/common.inc:1055) in /homepages/15/d141929299/htdocs/gallerie/include/functions.inc.php on line 384
Merci pour votre aide en tout cas c’est la 1ère fois que j’utilise un, CMS et drupal est en train de me convaincre grandement.
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Il faut peut-être que tu déclares la connexion à ta bdd spécifique dans ton settings.php. Ensuite, quand tu veux t’y connecter, tu utilises db_set_active.
+ d’infos ici : How to connect to multiple databases within Drupal
kalis1@drupal.org
112
Cela signifie simplement qu’il y a une collision entre les fonctions définies dans Drupal et celles de l’autre application : PHP n’autorise pas la déclaration d’une fonction si une autre fonction précédement déclarée porte le même nom, c’est ce qu’il appelle «redéclarer une fonction».
Il n’y a pas tellement de solutions propres à ce problème. Une approche serait d’utiliser une sous-requête d’Apache (en utilisant la fonction virtual() de PHP), ou alors de récupérer le contenu directement par une requête HTTP.
Damien Tournoud
808
Justement, je me suis dit que le problème venait surement de là alors j’ai changé les identifiants de connection à la base donnée pour mettre les mêmes que drupal et j’ai importé les requête sql donc mainteannt tout est dans la même base de données. Mais ça ne fonctionne toujours pas.
Je veux bien tester ce que vous me dites, la mais comme c’est en anglais, je pense bien que je vais faire des bourdes, ça se complique grandmeent, je bidouille juste un tout petit peu en php moi.
Et pour le deuxième problème, il y a aucune solution alors, même pas une détournée ? sans avoir à fouiller partout dans le code php, car c’est impossible que je renome toutes les fonctions, je vais avoir des parse error de partout….
drom1
3
Justement, je me suis dit que le problème venait surement de là alors j’ai changé les identifiants de connection à la base donnée pour mettre les mêmes que drupal et j’ai importé les requête sql donc mainteannt tout est dans la même base de données. Mais ça ne fonctionne toujours pas.
Le problème n’est pas sur l’utilisation de telle ou telle base de données. Tes bases de données peuvent parfaitement être distinctes. C’est un problème uniquement PHP. Dans Drupal les fonctions db_connect et format_date ont été définies. Or tu essaies d’exécuter du code extérieur à Drupal qui, lui aussi, définit ces 2 fonctions (et probablement d’autres).
Les messages d’erreur t’indiquent juste les endroits où les fonctions ont été définies.
Je ne connais pas la fonction virtual, donc je ne pourrais pas t’en parler.
Pour corriger ce problème, mon réflexe serait de visiter les fichiers sources PHP de /Agenda et /gallerie pour remplacer les noms de fonctions. Par exemple : db_connect deviendrait age_db_connect dans l’agenda et format_date deviendrait gal_format_date dans la galerie.
C’est une méthode qui marche pas mal tant que la fonction eval n’est pas trop utilisée (dans le genre, je ne m’amuserais pas à l’appliquer avec Drupal…) et qu’on évite les appels du style :
<?phpfunction toto() { echo 'a'; }
function titi() { echo 'b'; }
if(
$user=='bibi') $fonction='toto'; else $fonction='titi';
$fonction(); // Bouh, pas beau ! ;-)?>
Autre possibilité, mais c’est vraiment si tu as de la chance : les fonctions redondantes fonctionnent EXACTEMENT de la même manière. Dans ce cas, il suffit d’englober les définitions de fonction dans un test comme suit :
<?phpif(!function_exists('db_connect')) {
function db_connect(argument1,argument2...) {
...
code de la fonction
...
}
}
?>
Zigazou
194
Autre possibilité, mais c’est vraiment si tu as de la chance : les fonctions redondantes fonctionnent EXACTEMENT de la même manière.
Ce qui est vraiment très peu probable. :)
Damien Tournoud
808
Une des façons de faire, c’est d’utiliser un appel du genre :
<?phpecho file_get_contents("http://[tonhost]/gallerie/external_random.php");
?>
Cela appelle «par l’extérieur» la page http://[ton host]/gallerie/external_random.php et l’intégre dans ton bloc. Cela dit il faudra aussi que tu protège l’accès à cette page pour qu’elle ne puisse pas être utilisée de l’extérieur.
Inconvénient de la méthode : les variables Drupal ne sont pas accessibles depuis la page extérieure.
Damien Tournoud
808
A vraiment merci.
J’ai réussi pour la gallerie, par contre il me met les images les unes aux dessus des autres (à la vertical alors que dans mon fichier que j’inclue, elles sont bien en ligne à la vertical, connaissez vous la balise CSS que je dois modifier pour régler se problème si ça vient des CSS bien sur.
(fichier inclu dans le block tête).
Problème réglé désolé…j’ai enlevé les espace entre l’ouverture de la balise a et img et plus de BR entre chauqye photo bizarre.
Je m’attaque à l’agenda.
Et deuxième problème réglé, agenda rajouté.
Je pense que je devais faire des erreurs toute bête car je n’ai pas modifié toutes les fonctions
En tout cas un grand grand
MErci à vous
Romain
drom1
3