Все о Joomla 1.5

...заметки Котофеича

 
  • Increase font size
  • Default font size
  • Decrease font size

Home Вопрос-ответ severum принцип работы onBeforeStoreUser (и hpregistration)
2009.02.21 14:43:48
severum

Я учусь писать (изменять) расширения джумлы, но не всегда понимаю идеологию.
Плугин hpregistration позволяет добавить и обработать tincaptcha в регистрацию пользователя.
Он добавляет onBeforeStoreUser  в котором выполняется проверка 

$captchk = plgSystemTincaptcha::check(JRequest::getVar('captcha', '', 'post'));
if ($isnew && $captchk !== true && $mainframe->isSite())
{
  JError::raiseWarning(0, $captchk);
  return false;
}

т.е. подразумевается что если код с картинки введен неправильно то регистрация не произойдет.
Но при этом нашел что onBeforeStoreUser в самой джумле вызывается в двух местах примерно таким образом
$dispatcher->trigger( 'onBeforeStoreUser', array( $old->getProperties(), $isnew ) );
После чего следующими строчками каода данные пользователя успешно сохраняются в любом случае.

Правильно ли я понимаю, что без изменения основного кода сам плугин заранее бесполезен? И все такие ситуации решаются  хаками?

И следует писать примерно так ($dispatcher->trigger сможет вернуть значение?)
$res = $dispatcher->trigger( 'onBeforeStoreUser', array( $old->getProperties(), $isnew ) );
if($res){
... 

Спасибо.

 

Попробовал..
$res = $dispatcher->trigger( 'onBeforeStoreUser', array( $old->getProperties(), $isnew ) );
не возвращает ничего..
Можно передать через глобальную переменную результат, но может можно както более правильно? 


Еще стандартная форма при регистрации пользователя не запоминает поля если чтото вбито неправильно.



  
 

admin
2009.03.14 01:22:57

Что-что я запутался в вопросе. Функция $captchk = plgSystemTincaptcha::check(JRequest::getVar('captcha', '', 'post')); вернет true если цифры с капчи введены верно.
Функция
$dispatcher->trigger( 'onBeforeStoreUser', array( $old->getProperties(), $isnew ) );
отправляет на обработку плагину нужные данные (в частности те, что ввел пользователь в форме). Я лишь не понял в чем проблема.

 
 
severum
2009.07.07 19:24:24

еще раз натунклся и вспомнил.
вмысл в том что в www\libraries\joomla\user\user.php
есть такой код
...
// Fire the onBeforeStoreUser event.
JPluginHelper::importPlugin( 'user' );
$dispatcher =& JDispatcher::getInstance();
$dispatcher->trigger( 'onBeforeStoreUser', array( $old->getProperties(), $isnew ) );

//Store the user data in the database
if (!$result = $table->store()) {
$this->setError($table->getError());
}
...

т.е. в результате при сохранении пользователя пофиг какие проверки что вернули. пользователь всеравно будет создан.

 
 
Комментировать
Логин:

E-mail:

  Введите текст изображенный на картинке:
 




Стопор для двери. Стопор ограничитель дверей.