Bonjour, je viens de me lancer dans l'aventure Joomla! il y a quelques semaines et je dois dire que c'est un CMS vraiment très déroutant.
J'ai pour mission de créer un prototype de site reprenant plusieurs fonctionnalités très spécifiques en relation avec des tables dans une base de données. Du coup, je me suis orienté vers la création de composants, et grâce à ce tutoriel j'ai réussi à mettre en place un composant Hello World fonctionnel. Pas très difficile me direz-vous, il suffit de recopier le code.
Pour répondre à mes besoins, je l'ai ensuite entièrement réécrit, pas évident quand on ne connait pas le MVC à la base et quand on fait du PHP objet pour la première fois. Là où ça semble vraiment se compliquer c'est lorsque le composant fonctionne avec plusieurs tables. J'ai deux scripts sql et JInstaller m'a vraiment l'air capricieux, car quand phpMyAdmin les acceptent sans broncher, Joomla me dis non lors de l'installation du composant, ou alors il me dis oui mais aucune table ne se crée dans la base de données. J'ai l'impression qu'il n'y a pas que le script sql qui joue lors de la création des tables pendant l'installation, mais je ne vois pas quel autre fichier pourrait avoir de l'influence dessus à part le .xml à la racine du composant :
J'ai un script sql de désinstallation très simple :
il est basé sur le modèle de hello world sauf qu'il y a plusieurs tables à effacer, et là je me retrouve avec une erreur lors de la désinstallation du composant par le back-end de Joomla :
Je passe vraiment beaucoup de temps à comparer ce qui ne va pas dans mes fichiers grâce à eclipse helios, à la recherche d'un truc tout bête du genre mauvais appel de fonction mais je ne trouve rien. J'ai vérifié les encodages de mes fichiers sql avec notepad++ et ils sont bien en utf8.
Après cette intense semaine à patauger, je commence à désespérer de trouver la solution, d'autant plus que je commence à voir d'autres problèmes se profiler à l'horizon qui ne sont pas aborder dans le tutoriel hello world. A savoir, comment insérer du code HTML dans un composant pour son affichage front-end, car j'ai par exemple besoin d'insérer une image comportant des liens et des requêtes MySQL. Pour cela, j'ai essayé de modifier le contenu de tous les fichiers index.html du répertoire "site" en espérant qu'ils afficheraient quelque chose en front-end, mais rien... du coup je ne sais toujours pas à quoi ils servent, en plus ils sont envahissants.
Voilà pourquoi je dis que ce CMS est très déroutant pour un non habitué au développement dans le framework joomla.
J'ai auparavant développé avec wordpress, et pour cette fonctionnalité j'aurais simplement insérer le code HTML/php nécessaire dans un modèle de page. C'est une solution moins portable que celle du package.zip d'un composant sous Joomla, et beaucoup moins standardisé, mais aussi beaucoup plus simple et moins contraignante. Je me rassure en me disant qu'il doit y avoir une raison à cette complexité de création de composant Joomla. Il doit surement être plus sécurisé et ça semble plus propre, mais bon encore faut-il réussir à le rendre fonctionnel, et au niveau de l'investissement en temps c'est peut être pas forcément rentable.
J'ai pour mission de créer un prototype de site reprenant plusieurs fonctionnalités très spécifiques en relation avec des tables dans une base de données. Du coup, je me suis orienté vers la création de composants, et grâce à ce tutoriel j'ai réussi à mettre en place un composant Hello World fonctionnel. Pas très difficile me direz-vous, il suffit de recopier le code.
Pour répondre à mes besoins, je l'ai ensuite entièrement réécrit, pas évident quand on ne connait pas le MVC à la base et quand on fait du PHP objet pour la première fois. Là où ça semble vraiment se compliquer c'est lorsque le composant fonctionne avec plusieurs tables. J'ai deux scripts sql et JInstaller m'a vraiment l'air capricieux, car quand phpMyAdmin les acceptent sans broncher, Joomla me dis non lors de l'installation du composant, ou alors il me dis oui mais aucune table ne se crée dans la base de données. J'ai l'impression qu'il n'y a pas que le script sql qui joue lors de la création des tables pendant l'installation, mais je ne vois pas quel autre fichier pourrait avoir de l'influence dessus à part le .xml à la racine du composant :
<install> <!-- s'exécute à l'installation -->
<sql>
<file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
</sql>
</install>
<uninstall> <!-- s'execute à la désinstallation -->
<sql>
<file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
</sql>
</uninstall>
<update> <!-- nouvelle fonctionnalité joomla 1.6, s'exécute lors de la mise à jour -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
<sql>
<file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
</sql>
</install>
<uninstall> <!-- s'execute à la désinstallation -->
<sql>
<file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
</sql>
</uninstall>
<update> <!-- nouvelle fonctionnalité joomla 1.6, s'exécute lors de la mise à jour -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
J'ai un script sql de désinstallation très simple :
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_service`;
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_contact`;
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_contact_service`;
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_commune`;
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_contact_commune`;
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_departement`;
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_contact`;
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_contact_service`;
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_commune`;
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_contact_commune`;
DROP TABLE IF EXISTS `#__page_xxxxxx_contacts_departement`;
JInstaller::Install : erreur SQL Fonction DB échouée avec le numéro d'erreur 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP TABLE IF EXISTS `dev_page_xxxxxx_contacts_service`' at line 1 SQL=DROP TABLE IF EXISTS `dev_page_xxxxxx_contacts_service`;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP TABLE IF EXISTS `dev_page_xxxxxx_contacts_service`' at line 1 SQL=DROP TABLE IF EXISTS `dev_page_xxxxxx_contacts_service`;
Après cette intense semaine à patauger, je commence à désespérer de trouver la solution, d'autant plus que je commence à voir d'autres problèmes se profiler à l'horizon qui ne sont pas aborder dans le tutoriel hello world. A savoir, comment insérer du code HTML dans un composant pour son affichage front-end, car j'ai par exemple besoin d'insérer une image comportant des liens et des requêtes MySQL. Pour cela, j'ai essayé de modifier le contenu de tous les fichiers index.html du répertoire "site" en espérant qu'ils afficheraient quelque chose en front-end, mais rien... du coup je ne sais toujours pas à quoi ils servent, en plus ils sont envahissants.
Voilà pourquoi je dis que ce CMS est très déroutant pour un non habitué au développement dans le framework joomla.
J'ai auparavant développé avec wordpress, et pour cette fonctionnalité j'aurais simplement insérer le code HTML/php nécessaire dans un modèle de page. C'est une solution moins portable que celle du package.zip d'un composant sous Joomla, et beaucoup moins standardisé, mais aussi beaucoup plus simple et moins contraignante. Je me rassure en me disant qu'il doit y avoir une raison à cette complexité de création de composant Joomla. Il doit surement être plus sécurisé et ça semble plus propre, mais bon encore faut-il réussir à le rendre fonctionnel, et au niveau de l'investissement en temps c'est peut être pas forcément rentable.
Commentaire