Après la mise à niveau vers Joomla 3.5, mon site/extension/formulaire personnalisé captcha a cessé de fonctionner. Il ne s'affiche pas et aucune erreur n'est générée nulle part.
Qu'est-il arrivé?
Eh bien, ce n'est pas une question très simple à répondre, et d'autres ont déjà essayé de l'expliquer.
À savoir:
Numéro GitHub # 9544
Poste similaire dans Joomla.StackExchange.com
Joomla Forum Related Post
Ce qui s’est réellement passé, c’est que certains détails du captcha par défaut inclus dans Joomla ont changé et que les développeurs de formulaires personnalisés n’utilisant pas une méthode donnée pour l’inclure dans leurs formulaires , doivent mettre à jour leur code.
Tout d’abord, , assurez-vous d’utiliser la dernière version de l’extension qui ne fonctionne plus .
Si vous êtes sûr à 100% de cela, vous devrez contacter le développeur de formulaire personnalisé et l'informer du problème. Inclure un lien vers cette page peut les aider.
Si vous pensez avoir suffisamment confiance en PHP, vous pouvez essayer de vous plonger dans le code de formulaire personnalisé et de suivre les instructions données aux développeurs, ci-dessous, jusqu'à ce qu'une mise à jour soit publiée par le développeur de formulaire personnalisé.
Le code du plugin ReCaptcha a changé. Plus précisément, la fonction onInit
a été modifiée dans le fichier plugins/captcha/recaptcha/recaptcha.php
. Ce problème se produira certainement dans votre formulaire si vous avez suivi les instructions de cette réponse StackOverflow .
De nombreux développeurs ont suivi cette évidemment pas si bien idée, au lieu d’utiliser le JFormField
s, y compris Virtuemart, HikaShop et moi-même.
Curieusement, l'option $id
Incluse dans cette fonction n'est plus utilisée. À la place, le fichier media/plg_captcha_recaptcha/js/recaptcha.min.js
A été introduit pour fournir une fonction de rappel au script Google ReCaptcha:https://www.google.com/recaptcha/api.js?onload=JoomlaInitReCaptcha2&render=explicit
Pour certains si tout va bien raison, l'équipe Joomla a codé en dur la classe de champs attendue dans le fichier recaptcha.js pour qu'elle soit g-recaptcha
Et a cessé d'utiliser le champ id
. Ainsi, comme indiqué également dans les liens fournis, aucun champ sans cette class
et un attribut data-sitekey
Avec la clé publique ReCaptcha comme valeur ne fonctionnera pas.
Heureusement, la solution est très simple. Utilisez plutôt la classe JCaptcha
.
$captcha_plugin = JFactory::getConfig()->get('captcha');
if ($captcha_plugin != '0') {
$captcha = JCaptcha::getInstance($captcha_plugin);
$field_id = 'your_old_and_useless_id';
print $captcha->display($field_id, $field_id, 'g-recaptcha');
}
Et bien sûr, une version à une ligne. Yay!!
print (JFactory::getConfig()->get('captcha') != '0') ? JCaptcha::getInstance(JFactory::getConfig()->get('captcha'))->display('old_field_id', 'old_field_id', 'g-recaptcha') : '';