Ja also... die Idee mit der Rechenaufgabe ist ja nicht neu..
Das tolle an J 1.5 ist: Du brauchst 'eigentlich' keine Corehäcks mehr....
Die Theorie:
Das ganze ist über ein System plugin zu lösen.
1) Es gibt die Klasse JResponse die Dir mit der Funktion getBody() den gesamten Inhalt des <body>s liefert.
in onAfterRender() suchst Du dann nach dem Absendeknopf im Kontaktformular und klebst davor Deine Rechenaufgabe.
2) Der Controller aus com_contact deklariert einen onValidateContact() Trigger den Du in Deinem Plugin implementieren kannst und - falls einer nicht 1+1 zusammenzählen kann (oder will) bei einer JExeption (z.B.) den ganzen Vorgang abbricht.
Da der Code nicht allzu lang ist poste ich ihn hier einmal (als Kommentar auf Deiner Seite bestimmt net so gut)
Verbesserungsvorschläge sind willkommen
..
PHP-Code:
class plgSystem.... extends JPlugin
{
function plgSystem....(& $subject, $config)
{
parent::__construct($subject, $config);
}
function onAfterRender()
{
$spamchecknr1 = mt_rand(1, 20);
$spamchecknr2 = mt_rand(1, 20);
$searchString = '<button class="button validate" type="submit">';
$addString = '';
$addString .= '<input type="hidden" name="spamcheckresult" value="'.base64_encode($spamchecknr1 + $spamchecknr2).'" />';
$addString .= '<label for="spamcheck">Spamcheck*: '.$spamchecknr1.' plus '.$spamchecknr2.' = </label>';
$addString .= '<input type="text" name="spamcheck" id="spamcheck" size="5" class="inputbox required" value="" />';
$addString .= '<br />';
$body = JResponse::getBody();
$body = str_replace($searchString, $addString.$searchString, $body);
JResponse::setBody($body);
}//function
function onValidateContact( $contact, $post )
{
$spamcheckresult = base64_decode(JRequest::getVar( 'spamcheckresult','','post' ));
$spamcheck = JRequest::getVar( 'spamcheck','','post' );
$ret = true;
if((is_nan($spamcheckresult)) || ($spamcheckresult != $spamcheck))
{
JError::raiseWarning(100, JText::_('You have not resolved our spamcheck'));
$ret = new JException('Spamcheck');
}
return $ret;
}//function
}//class
Und zum ausprobieren auch nochmal als installierbares Plugin.
Lesezeichen