2010-08-16 5 views
1

Je suis les leçons sur le développement de composants dans le livre "Learning Joomla! 1.5 Extension Development". J'ai suivi exactement les instructions du chapitre, créant un composant que j'appelle "carrousel". J'ai seulement créé le backend d'administration, et je suis en mesure d'afficher le formulaire pour créer une nouvelle entrée ou modifier une entrée existante, mais je ne peux pas enregistrer ou appliquer des modifications. En cliquant sur les boutons "Enregistrer", "Appliquer" et "Annuler", cela ne m'amène qu'à la page d'index Admin, mais pas de modification dans la base de données. Cependant, si j'ajoute des entrées directement dans la base de données en utilisant SQL, je suis en mesure d'en afficher une liste dans l'interface d'administration correctement. J'utilise Joomla 1.5.20, PHP 5.2.3 et MySQL 5.0.41 sous Windows XP. Vous pouvez télécharger un fichier zip du dossier "com_carousel" (que j'ai dans le dossier "administrator/components") from here. J'ai également enregistré correctement le composant dans la base de données, de sorte que je suis capable de le voir sous le menu "Composants" dans le back-end. Voici le SQL que j'utilise pour créer la table "jos_carousel":Développement de composants Joomla: Enregistrer, appliquer et annuler les boutons de la barre d'outils ne fonctionne pas

CREATE TABLE `jos_carousel` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`title` VARCHAR(255) NOT NULL , 
`description` TEXT NOT NULL , 
`published` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' 
) ENGINE = innodb; 

Aidez-nous s'il vous plaît.

Mfg, Simon

+0

Idée rapide: avez-vous cherché à voir s'il y avait des errata pertinentes pour le livre? http://www.packtpub.com/support?nid = 996 & view_name = support_page & view_display_id = block_1 & view_args = & view_path = support & view_base_path = null & view_dom_id = 1 & pager_element = ... il y a 23 corrections soumises à ce livre que vous pouvez voir sur cette page. –

+1

Vous devriez vraiment envisager d'utiliser une approche MVC pour développer un composant pour Joomla, voici un excellent tutoriel - http://www.joomladevuser.com/tutorials/components – Martin

+0

Matt - a traversé l'errata, mais aucun n'affecte mon code . Martin, je sais qu'une approche MVC serait la meilleure pour développer mon composant, mais je voulais d'abord comprendre les bases de très bas niveau du développement de composants avant de m'embêter avec l'architecture MVC. –

Répondre

2

J'ai pris le temps de déboguer votre extension et j'ai trouvé la raison du comportement étrange que vous éprouvez. Vous ne transmettez pas la variable $ option au formulaire d'édition. Par conséquent, lorsque le formulaire est soumis, Joomla ne sait pas quel composant doit être chargé pour traiter la demande et c'est pourquoi il affiche simplement la page d'administration principale. La manière la plus simple de résoudre ce problème consiste à ajouter manuellement 'com_carousel' au champ masqué dans le formulaire d'édition (fonction editCarousel() dans admin.carousel.html.php).

Remplacer

<input type="hidden" name="option" value="<?php echo $option; ?>" /> 

Avec

<input type="hidden" name="option" value="com_carousel" /> 

Si vous voulez vraiment utiliser la variable $ option vous devez le transmettre à partir du fichier admin.carousel.php.

Il y a encore des choses qui ne fonctionnent pas (principalement la publication/suppression), mais cela est traité plus loin dans le livre. Une fois que vous avez terminé avec Learning Joomla! Développement de l'extension votre meilleur pari est de lire Mastering Joomla.... Je suis sur le point de finir de le lire et cela a été une ressource inestimable pour moi.

Bonne chance à tous vos Joomla! extensions :)

+0

Merci beaucoup Silvo. Votre réponse trie tout, et maintenant les boutons Enregistrer, Appliquer et Annuler fonctionnent comme prévu. Je viens d'ajouter l'option $ aux arguments pour editCarousel() dans admin.carousel.html.php et l'appel de fonction dans admin.carousel.php, qui est en fait comment il aurait dû être selon le livre. C'est incroyable comment une si simple omission peut complètement gâcher tout. Merci encore, dommage que je ne puisse pas voter :-) –

1

Je ne sais pas si c'est le problème, mais dans votre interrupteur principal que vous appelez saveCarousel avec un seul paramètre:

case "apply"://NOT WORKING! 
    case "save"://NOT WORKING! 
     saveCarousel($option); 
     break; 

et dans la définition de la fonction, il a deux paramètres:

Essayez d'ajouter la variable $ task à l'appel de la fonction à l'intérieur du commutateur et faites-nous savoir si cela a changé quoi que ce soit ...
+0

Il doit supprimer la variable $ task de la définition de la fonction, elle n'est pas nécessaire. – Martin

+0

Aussi dans cette fonction - fonction editCarousel ($ option) sur cette ligne $ id = $ cid [0]; vous devriez lancer un int pour éviter d'éventuelles attaques par injection SQL, par ex. $ id = (int) $ cid [0]; – Martin

+0

Suppression de la tâche $ dans la définition de la fonction. Toujours pas de changement: impossible de mettre à jour un enregistrement ou d'ajouter un nouvel enregistrement dans la base de données. Merci pour le conseil sur l'injection sql Martin. –

Questions connexes