Captcha
- rokerkony
- Člen | 122
ahoj zkouším tuto Captchu, ale bohužel mi to skončí při volání metody
addCaptcha…
Call to undefined method AppForm::addCaptcha().
nevíte, kde by mohla být chyba? třídu mám v /libs/Nette/Extras/Forms/Captcha.php
a můj presenter vypadá takto:
<?php
class Front_BookPresenter extends BasePresenter
{
public function actionDefault($catlink, $link) {
class_exists('Captcha');
$form = new AppForm($this, 'guestBookForm');
$form->addCaptcha('captcha', 'Antispam')
->setTextColor(Image::rgb(255, 0, 0))
->addRule(Form::VALID, 'Opište správně písmena z obrázku.');
.......
...
dělám něco špatně?
- jasir
- Člen | 746
rokerkony napsal(a):
ahoj zkouším tuto Captchu, ale bohužel mi to skončí při volání metody addCaptcha…
Call to undefined method AppForm::addCaptcha().
Ahoj, AppForm (resp. předek FormContainer) nemá addCaptcha. Buď si jí tam přidej pomocí extension method nebo přidej captchu takto:
<?php
$captcha = new Captcha(...);
$captcha->doConfigStuff();
...
$mujform['mojecaptcha']=$captcha;
?>
Editoval jasir (15. 5. 2009 9:53)
- pmg
- Člen | 372
Děkuji, že jsi třídu vyzkoušel. Ta metoda Form::addCaptcha
se přidá v metodě Captcha::init
; možná jsi nezkopíroval
konec kódu, kde se statický konstruktor volá.
/** call static constructor */
Captcha::init();
Jinak bych chtěl ještě upozornit:
- Konstanta
NETTE_DIR
v novějších revizích myslím není, takže to asi bude chtít upravit. - Došlo k přejmenování indexů barev z
r
,g
,b
nared
,green
,blue
. - Upravil bych to v kódu, ale třída pak nebude zpětně kompatibilní;
takže zatím čekám.
Nette::Image
v tomto ohledu také není zpětně kompatibilní.
Myslím, že třída poslouží jako dobrý základ, bohužel ale nestíhám sledovat změny v Nette, takže ji nemohu udržovat aktuální. Měl jsem připravený archiv se soubory, že ho dám na stažení, ale momentálně už zase není aktuální. Když tak pošlu mailem – napište si.
- rokerkony
- Člen | 122
Captcha::init();
v souboru mam a i presto mi to addCaptcha
nepridalo :-( takze jsem to resil pres extension method, jak mi poradil
jasir :-)
jj NETTE_DIR
i r,g,b
bylo zmeneno, ale par upravami
se to da zprovoznit.
To mi zas tak problem nedelalo, ale mrzi me ta nutnost vypnout javascriptovou
validaci :-( da se to uz nejak obejit?
- jasir
- Člen | 746
Poznámka k Captcha::init()
– to vypadá na copy/paste
error – (2× se opakuje stejný kód).
<?php
public static function init()
{
if (!function_exists('Form_prototype_addCaptcha')) {
function Form_prototype_addCaptcha() {
$args = func_get_args();
return call_user_func_array(array(__CLASS__, 'addCaptcha'), $args);
}
}
if (!function_exists('Form_prototype_addCaptcha')) {
function Form_prototype_addCaptcha() {
$args = func_get_args();
return call_user_func_array(array(__CLASS__, 'addCaptcha'), $args);
}
}
}
?>
Asi to má být nějak takto:
<?php
public static function init()
{
if (!function_exists('Form_prototype_addCaptcha')) {
function Form_prototype_addCaptcha() {
$args = func_get_args();
return call_user_func_array(array(__CLASS__, 'addCaptcha'), $args);
}
}
AppForm::extensionMethod('addCaptcha', 'Form_prototype_addCaptcha');
}
?>
(tedy doufám, už je docela pozdě v noci… nebo ráno?…)
- pmg
- Člen | 372
Jo, teď jste na to kápli. To byla další věc, která se v Nette
změnila. Takhle dřív extension method fungovala: přes prototypy. Ale
koukám, že v API se prototypy pořád
ještě dohledávají, jen je asi potřeba zavolat ručně
ObjectMixin::extensionMethod();
.
A vypadá to, že nový způsob podporuje dědičnost. Takže by mělo
fungovat toto (asi dát na konec souboru Captcha.php
):
Form::extensionMethod('addCaptcha', array('Captcha', 'addCaptcha'));
Editoval pmg (16. 5. 2009 10:27)
- romansklenar
- Člen | 655
Nebude lepší smazat celé vlákno a vytvořit diskusi provázanou přímo se stránkou v dokumentaci ať se nevytváří duplicitní vlákna?
- pmg
- Člen | 372
Nemám nic proti, připomínky z tohoto vlákna jsou už ve třídě zakomponované. Jen bych tomu ještě dal den, aby to někdo nehledal. Dík za předvyplnění příspěvku. :-)
https://forum.nette.org/…form-control
Editoval pmg (18. 6. 2009 7:38)
- Podvečerníček
- Člen | 15
Zdravím!
Kdysi jsem udělal jednoduché rozšíření CAPTCHA do audio podoby.
- Demo ukázka: http://test.dgstudio.cz/testcaptcha.php
- Zdrojáky: http://test.dgstudio.cz/…ocaptcha.zip
„How-to“ je úplně primitivní – využívá se toho, že soubor
‚slepený‘ z více MP3 se chová opět jako MP3. Ukázka má k dispozici a
využívá mp3ky pro každé písmenko základní (anglické) abecedy a každou
číslici (na tyto znaky je captcha omezeno, ale doufám, že to zas tak moc
nevadí), ty pak operativně spojí a odešle na výstup (předtím samozřejmě
pošle hlavičky, že se jedná o MP3ku).
Stručně řečeno – kód je na pár řádků (hlavní cyklus na jeden
řádek).
Samotný captcha kód se pak pamatuje v session proměnné, jejíž název se skládá z řetězce „captcha“ a za ním následuje nějaké číslo. S tímto číslem (jako URL parametr ‚id‘) se pak zavolá soubor, který má na starosti generování mp3ky.
Příklad:
<?php
$_SESSION['captcha1']='kxd021';
$_SESSION['captcha2']='xy7720';
?>
v HTML pak:
- <a href=„audiocaptcha.php?id=1“>odkaz na 1. captcha kód</a>
- <a href=„audiocaptcha.php?id=2“>odkaz na 2. captcha kód</a>
Rád bych to dal „do pléna“ – budu jen rád, když se Nettí captcha rozroste o audio podobu.
Daný příklad je ale (pro jednoduchost) řešený dost „na tvrdo“ – bude tedy akorát třeba přepsat jej do objektového stylu, s danými konvencemi, plus některé věci, které daný příklad předpokládá (jako například s MP3kami), udělat nastavitelné uživatelem.
Když se k tomu (někdy později) přidá i nějaký flashový přehravač, bude z toho nakonec komplexní a sexy captcha-komponenta, podporující webovou přístupnost!
all: co na to říkáte?
Editoval Podvečerníček (3. 8. 2009 23:30)
- Podvečerníček
- Člen | 15
hrach napsal(a):
bohužel, dnešní roboti umí ze zvuku vyčíst celý text.. a to i z takových zvuků, které jsou rušeny nějakým šumem, atp…
Ano, přibližně stejně to platí i pro obrázky. Ale neznamená to, že by se CAPTCHA měly přestat používat, že?
Chápu, že na některých stránkách můžou mít s spambotama problémy a pak to řeší jiným kalibrem, ale na těch nových projektech, které v Nette vznikly bych tipoval, že se žádné spamovací nájezdy nekonají.
Taky jde o to, nenechat naše nevidomé spoluobčany ve štychu, když čas od času narazí na captchu.
Editoval Podvečerníček (9. 7. 2009 21:59)
- Podvečerníček
- Člen | 15
Já asi mluvím tatarsky nebo co :-)
Myšlenka dne je zdokonalit současnou captcha komponentu o audio podobu! Popsal jsem, jak, dal jsem odkaz na demo, dal jsem odkaz na zdrojáky.
Chopí se toho někdo? Já jsem zatím v Nette začátečník, jinak by to už dávno bylo.
Editoval Podvečerníček (3. 8. 2009 23:38)
- pmg
- Člen | 372
Aha, já jsem zatím v tatarštině začátečník, tak jsem nepochopil, že jde o feature request. :-)
Klidně se toho chop, třeba se rovnou přiučíš, jak věci pracují. Sám s audiem neumím a flash nemám.
A přesuňme prosím tuto diskusi do nového threadu.
- Podvečerníček
- Člen | 15
Škoda slov.
No nic, no – beru všechno zpět a demo a link na zdroják mažu.
Děkuji všem za nezměrný entusiasmus.