Přihlásit se

Pokud používáte novou Joomlu! 1.5.2 a ještě nemáte k dispozici šablonu psanou přesně pro tuto verzi CMS Joomla, jistě jste zažili problémy s registrací uživatelů, kdy se po úspěšné registraci zobrazí místo zprávy znova registrační formulář a návštěvník vašich stránek je pak zmaten, protože neví jestli se mu registrace podařila. K odstranění tohoto problému stačí jenom pár zásahů do kódu Joomly.

Konkrétně se jedná o komponentu com_user, která se nachází v adresáři /components/com_user/. Zde je nutné upravit tři soubory, a to controller.php, views/register/view.html.php a views/register/tmpl/default.php.

 

Začneme souborem controller.php, kde si na přibližně 197 řádku najdeme funkci register_save(), ve které provedeme přidání následujícího kódu za řádek 226, tak aby tento úsek vypadal následovně:

if (!$user->bind( JRequest::get('post'), 'usertype' )) {



// JError::raiseError( 500, $user->getError());



echo '<div class="error">';



echo JText::_($user->getError());



echo '</div>';



$this->register();



return false;



}



Zde jsme zakomentovali řádek JError:raiseError, a místo toho chybu vypisujeme normálně na obrazovce nad registračním formulářem, protože v opačném případě se nám zobrazí chybová stránka s hláškou v angličtině.

Další změna se bude týkat řádku 267, tedy závěru funkce:

//TODO :: this needs to be replace by raiseMessage



echo '<div class="\'notice\'">';



echo $message;



echo '</div>';



JError::raiseNotice('', $message);



//$this->register();



Tato část je právě zodpovědná za zobrazení informace o úspěšné registraci, kterou vypisujeme mezi tag <div>. Poslední řádek($this->register()) zakomentujeme, protože jinak by se zobrazil registrační formulář, který úspěšně zaregistrovaný uživatel nepotřebuje.

Dále přichází na řadu soubor views/register/view.html.php, ve kterém pouze zakomentujeme řádek 42(přidáme před něj //):

//JHTML::_('behavior.formvalidation');

Tento řádek totiž volá js, který slouží k ověřování toho jestli jsme dobře zadali registrační informace. Způsob implementovaný v Joomle 1.5 ale nefunguje se starými šablonami a proto si kontrolní js, který funguje s oběma typy šablon vložíme do souboru views/register/tmpl/default.php.

Tři řádky původní js funkce Window.onDomReady k ověřování hesla zakomentujeme a místo toho vložíme novou js funkci:

         function submit_regi() {



var form=document.josForm;



var r=new RegExp("[\<|\>|\"|\'|\%|\;|\(|\)|\&]", "i");



var r1=new RegExp("^\S[\S ]{2,98}\S$","i");



var r2=new RegExp("^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$","i");







if (form.name.value == "") {



alert( "<?php echo addslashes( html_entity_decode(JText::_("REGWARN_NAME")) );?>" );



} else if (form.username.value == "") {



alert( "<?php echo addslashes( html_entity_decode(JText::_("REGWARN_UNAME")) );?>" );



} else if (r.exec(form.username.value) || form.username.value.length < 3) {



alert( "<?php echo ( addslashes( html_entity_decode(JText::_("VALID_AZ09_USER"))));?>" );



} else if (form.email.value == "") {



alert( "<?php echo addslashes( html_entity_decode(JText::_("INVALID_EMAIL_ADDRESS")) );?>" );



} else if (!r2.exec(form.email.value)) {



alert( "<?php echo addslashes( html_entity_decode(JText::_("INVALID_EMAIL_ADDRESS")) );?>" );



} else if (form.password.value.length < 6) {



alert( "<?php echo addslashes( html_entity_decode(JText::_("REGWARN_PASS")) );?>" );



} else if (form.password2.value == "") {



alert( "<?php echo addslashes( html_entity_decode(JText::_("REGWARN_VPASS2")) );?>" );



} else if ((form.password.value != "") && (form.password.value != form.password2.value)){



alert( "<?php echo addslashes( html_entity_decode(JText::_("REGWARN_VPASS2")) );?>" );



} else if (r1.exec(form.password.value)) {



alert( "<?php echo addslashes( html_entity_decode(JText::_("REGWARN_PASS")) );?>" );



} else {



form.submit();



}







}







Poslední změna v tomto souboru se týká záměny řádku:

<button class="button validate" type="submit"><?php echo JText::_('Register'); ?></button>



za

<input type="button" class="button" onClick="submit_regi();" value="<?php echo JText::_('Register'); ?>"></input>



Jelikož nám v js funkci pro ověřování hesla přibyly některé nové řetězce je nutné vložit do jazykového souboru komponenty - language/cs-CZ/cs-CZ.com_user.ini - třeba někde na konec tyto řádky:

REGWARN_NAME=Prosím zadejte vaše jméno.



REGWARN_UNAME=Zadejte prosím uživatelské jméno.



VALID_AZ09_USER=Prosím zadejte platné uživatelské jméno, obsahující 0-9,a-z,A-Z

Po této drobné úpravě by již registrace měla fungovat i pro starší šablony. Pokud si na úpravu sami netroufáte v sekci Ke stažení je dispozici patch pro Joomlu 1.5.2 , který stačí rozbalit v hlavním adresáři Joomly.