26

(65 ответов, оставленных в Вопросы по работе с системой)

Спасибо Вам большое!
Так значит если я впишу эти поля вне foreach, ничего, можно так оставить?

27

(65 ответов, оставленных в Вопросы по работе с системой)

вместо

                            {foreach from=$fm->getStructure() item=item}
                                <tr class="{cycle values=$hl name="order"}">
                                    <td>{$item.current_val}</td>
                                </tr>
                            {/foreach}

вставить это?

<td class="otitle">1</td><td><input type="text" name="userfields_arr[]" value="{$elem.userfields_arr[0]}" class="maxWidth"></td>
                                    <td class="otitle">2</td><td><input type="text" name="userfields_arr[]" value="{$elem.userfields_arr[1]}" class="maxWidth"></td>

28

(65 ответов, оставленных в Вопросы по работе с системой)

Сделал так, но соответственно выводится 4 поля, их выносить вне foreach?

<td class="otitle">{$item.title}</td><td><input type="text" name="userfields_arr[]" value="{$elem.userfields_arr[0]}" class="maxWidth"></td>
                                    <td class="otitle">{$item.title}</td><td><input type="text" name="userfields_arr[]" value="{$elem.userfields_arr[1]}" class="maxWidth"></td>

29

(65 ответов, оставленных в Вопросы по работе с системой)

Не работает по прежнему. После обновления страницы едет верстка. ошибки не показываются

                            {assign var=fm value=$elem->getFieldsManager()}
                            {foreach from=$fm->getStructure() item=item}
                                <tr class="{cycle values=$hl name="order"}">
                                    <td class="otitle">{$item.title}</td><td><input type="text" name="userfields_arr[0]" value="{$elem.userfields_arr.current_val[0]}" class="maxWidth"></td>
                                    <pre>{var_dump($elem.userfields_arr)}</pre>
                                    <!--<td>{$item.current_val}</td>-->
                                </tr>
                            {/foreach}

http://storage2.static.itmages.ru/i/16/0722/s_1469178010_9705198_008dc41ee4.png

30

(65 ответов, оставленных в Вопросы по работе с системой)

array(1) {
  ["current_val"]=>
  array(2) {
    [0]=>
    string(2) "11"
    [1]=>
    string(2) "12"
  }
}
array(1) {
  ["current_val"]=>
  array(2) {
    [0]=>
    string(2) "11"
    [1]=>
    string(2) "12"
  }
}

31

(65 ответов, оставленных в Вопросы по работе с системой)

ну у меня выводит array в input sad

32

(65 ответов, оставленных в Вопросы по работе с системой)

Поправите?

        if (isset($_POST['userfields_arr'])){ //Если нужное поле пришло из запроса
          $myarray = array(
             'userfields_arr' => $_POST['userfields_arr']
          );
            $order['userfields'] = serialize($myarray);
          foreach ( $myarray as $key => $value ) {
              $userfields_arr = $order['userfields'];
            
          }
       
        }

33

(65 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

Ну у Вас в POST 2 поля приходят. Соответственно, в массиве для сохранения нужно указать 2 поля.

$myarray = array(
    'current_val' => $_POST['current_val'],
    'name второго поля' => $_POST['name второго поля']
);

Это понятно, но name то у них одинаковый получается. Вот посмотрите на скрине
http://storage8.static.itmages.ru/i/16/0721/s_1469102240_9667939_62e22677e8.png

34

(65 ответов, оставленных в Вопросы по работе с системой)

вставил только я вместо $order записал $elem вывелось следующее.
Но запись происходит только из одного поля(показал на скрине). А как из разделить?
http://storage5.static.itmages.ru/i/16/0721/s_1469097212_8337718_77b7676f47.png

array(1) {
  ["current_val"]=>
  string(2) "19"
}

array(1) {
  ["current_val"]=>
  string(2) "19"
}

35

(65 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

А чему $myarray у Вас переменная равна? И почему, если вы отправляете переменную с именем current_val у Вас проверка на $_POST['userfields']?

Сейчас подправил, но все же

    public static function ormBeforeWriteShopOrder ($data) {
        
        // @var \Shop\Model\Orm\Order
         
        $order = $data['orm'];//Получаем объект заказа
        $flag = $data['flag'];//флаг

        $myarray = $order['current_val'];
        if (isset($_POST['current_val'])){ //Если нужное поле пришло из запроса
          $order['userfields'] = serialize($myarray);
       
        }
    }

36

(65 ответов, оставленных в Вопросы по работе с системой)

Что то не срабатыает, не подскажите?
Ввожу данные в поле->нажимаю сохранить->идет сохранение.
Делаю var_dump($_POST['userfields']); ничего не вижу
Смотрю консоль firebag там:

-----------------------------29948320313281
Content-Disposition: form-data; name="current_val"

12

Но если обновляю страницу, записи пропадают, что не так?

    public static function ormBeforeWriteShopOrder ($data) {
        
        // @var \Shop\Model\Orm\Order
         
        $order = $data['orm'];//Получаем объект заказа
        $flag = $data['flag'];//флаг


        if (isset($_POST['userfields'])){ //Если нужное поле пришло из запроса
          $order['userfields'] = serialize($myarray);
        }

    }

37

(65 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

Постучитесь в онлайн консультант

Добрый день. Не могли бы Вы еще раз написать пожалуйста какие поля использовать.

$order["orm"] = не помню что тут

38

(41 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

Ну всё дело в том я так думаю, про то что я говорил, что нужно проверять на флажок приходящий из поста о том, что нужно генерировать пароль.
Вы можете свой код закомментировать и попробовать туже схему. Я думаю всё будет как надо. Т.е. Вам не хватает проверок на то, что именно сейчас делается с пользователем. Попробуйте завардампить объекты в Вашем коде и приходящий POST или GET запрос, чтобы проанализировать.

Думаю я с этим уже не справлюсь. Давайте  тогда по другому решим этот вопрос

39

(41 ответов, оставленных в Вопросы по работе с системой)

Заметил следующий баг. Если выйти из профиля и попытатся зайти, пишет неверный e-mail или пароль. А если не вводить пароль то авторизовывает. И это только с теми аккаунтами, которые зарегистрированы данным методом(автоматическим паролем)

40

(41 ответов, оставленных в Вопросы по работе с системой)

Да, так работает smile И сразу же исчесла проблема с переадрисацией на страницу регистрации. Теперь все как надо, сразу авторизовывает.
Только почему то регистрация работает, если только заккоментирована вот эта строчка из user.inc.php

Checker' => array(array(__CLASS__, 'checkOpenPassword'), '')

Не хватает какой то проверки?

41

(41 ответов, оставленных в Вопросы по работе с системой)

Не помогло, все равно не показывает пароль. Единственное что стало, так это два письма приходить
Можно конечно сделать так, но им тогда хеш будет зашифрованный пароль присылаться.
Какой еще есть вариант?

$user['openpass'] = $user['pass'] = $user::cryptPass(\RS\Helper\Tools::generatePassword(6));

42

(41 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

Попробуйте в Вашем хуке beforeWrite выполнить сразу после установки openpass

/**
* Действия перед записью объекта пользователя
* 
* @param array $data - Массив  с данными
*/
public static function ormBeforeWriteUsersUser($data){
     /**
     * @var \User\Model\Orm\User
     */
     $user = $data['orm'];
     $flag  = $data['flag']; //Флаг insert или update
     if ($flag==$user::INSERT_FLAG){ //Делаем только на создание (insert)
          $my_autologin = \RS\Http\Request::commonInstance()->request('my_autologin', TYPE_INTEGER, false); //Получаем флаг из запроса
          if ($my_autologin){ //Если флаг стоит

              $user['pass'] = $user::cryptPass(\RS\Helper\Tools::generatePassword(6));
          }

     }
}

Я думаю, тогда 100% всё будет как надо.

Вот сейчас пароль записывается в БД, но на почту поле пароль приходит пустое.

Что же получается нужен хук после записи обьекта?Вот я его создал, но допустил ошибку и выдает ошибку 500 при регистрации

    /**
    * Действия после записи объекта
    * 
    * @param string $flag - insert или update
    */
public static function ormAfterWriteUsersUser($data){
    /**
     * @var \User\Model\Orm\User
     */
     $user = $data['orm'];
     $flag  = $data['flag']; //Флаг insert или update
             if ($flag == self::INSERT_FLAG && \Setup::$INSTALLED && !$this['no_send_notice']) {
            
            // Уведомление пользователю
            $user = new \Users\Model\Notice\UserRegisterUser;
            $user->init($this, $this['openpass']);
            \Alerts\Model\Manager::send($user); 
            
        }

} 

43

(41 ответов, оставленных в Вопросы по работе с системой)

Вставляю следующий код в свою форму но пароль не записывается в бд. где искать ошибку

             <tr>
                    <td class="key">Пароль:</td>
                    <td class="value">
                        <input type="checkbox" name="my_autologin" checked value="1" id="my-autologin">
                        <label for="my-autologin">Получить автоматически на e-mail</label>
                        <div class="help">Нужен для проверки статуса заказа, обращения в поддержку, входа в кабинет</div>
                        <div id="manual-login" style="display:none">
                            <div class="inline f">
                                <input name="openpass" value="" maxlength="70"  size="18" type="password" />
                                <div class="help">Пароль</div>
                            </div>
                            <div class="inline">
                                <input name="openpass_confirm" value="" maxlength="70"  size="18" type="password" />
                                <div class="help">Повтор пароля</div>
                            </div>
                        </div>
                    </td>
                </tr>

44

(41 ответов, оставленных в Вопросы по работе с системой)

Да именно так, но если смотреть в var_dump то
["pass"]=>
      NULL

в базу ничего не передается, почему?

значит мне в форму регистрации нужно вставить данный код?
а что тогда использовать вместо? <input type="checkbox" name="reg_autologin" {if $order.reg_autologin}checked{/if} value="1" id="reg-autologin">

                <tr>
                    <td class="key">Пароль:</td>
                    <td class="value">
                        <input type="checkbox" name="reg_autologin" {if $order.reg_autologin}checked{/if} value="1" id="reg-autologin">
                        <label for="reg-autologin">Получить автоматически на e-mail</label>
                        <div class="help">Нужен для проверки статуса заказа, обращения в поддержку, входа в кабинет</div>
                        <div id="manual-login" {if $order.reg_autologin}style="display:none"{/if}>
                            <div class="inline f">
                                {$order.__reg_openpass->formView(['form'])}
                                <div class="help">Пароль</div>
                            </div>
                            <div class="inline">
                                {$order.__reg_pass2->formView()}
                                <div class="help">Повтор пароля</div>
                            </div>
                            <div class="inline">
                                <div class="form-error">{$order->getErrorsByForm('reg_openpass', ', ')}</div>
                            </div>
                        </div>
                    </td>
                </tr>

45

(41 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

Ну вот значит всё работает. openpass записывается Ваш созданный пароль который генерируется.
Вам осталось проверить ещё на приходящую из запроса Вашу галочку. Что у Вас не работает?

А для чего проверять на это галочку?
А на каком же тогда этапе пароль должен записываться в поле pass?
Не понимаю что то я

46

(41 ответов, оставленных в Вопросы по работе с системой)

array(3) {
  ["orm"]=>
  object(Users\Model\Orm\User)#193 (15) {
    ["default_group":protected]=>
    string(5) "guest"
    ["authorized_user_group":protected]=>
    string(7) "clients"
    ["access_menu_table":protected]=>
    string(16) "vnou_access_menu"
    ["access_module_table":protected]=>
    string(18) "vnou_access_module"
    ["cache_cost_id":protected]=>
    NULL
    ["cache_mod_access":protected]=>
    NULL
    ["cache_menu_access":protected]=>
    NULL
    ["cache_admin_menu_access":protected]=>
    NULL
    ["cache_allow_sites":protected]=>
    NULL
    ["groups":protected]=>
    NULL
    ["_values":protected]=>
    array(29) {
      ["changepass"]=>
      int(1)
      ["name"]=>
      string(8) "вася"
      ["surname"]=>
      string(8) "вася"
      ["midname"]=>
      string(8) "вася"
      ["e_mail"]=>
      string(12) "test@mail.ru"
      ["openpass"]=>
      string(6) "RaX8Sd"
      ["phone"]=>
      string(15) "+7 918 00011222"
      ["is_company"]=>
      int(0)
      ["company"]=>
      string(0) ""
      ["company_inn"]=>
      string(0) ""
      ["data"]=>
      array(0) {
      }
      ["id"]=>
      NULL
      ["login"]=>
      string(12) "test@mail.ru"
      ["pass"]=>
      NULL
      ["sex"]=>
      NULL
      ["hash"]=>
      string(64) "1321242dbe3d324a39ead77024347548b2d6f77f253da4390e10e2def03d61d6"
      ["subscribe_on"]=>
      NULL
      ["dateofreg"]=>
      string(19) "2016-07-07 13:52:54"
      ["balance"]=>
      NULL
      ["balance_sign"]=>
      NULL
      ["ban_expire"]=>
      NULL
      ["ban_reason"]=>
      NULL
      ["last_visit"]=>
      NULL
      ["__groups__"]=>
      NULL
      ["groups"]=>
      NULL
      ["_serialized"]=>
      string(6) "a:0:{}"
      ["captcha"]=>
      NULL
      ["user_cost"]=>
      NULL
      ["cost_id"]=>
      NULL
    }
    ["_self_class":protected]=>
    string(20) "Users\Model\Orm\User"
    ["_local_id":protected]=>
    int(70)
    ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
    array(0) {
    }
    ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
    array(0) {
    }
  }
  ["flag"]=>
  string(6) "insert"
  ["on_duplicate_update_keys"]=>
  array(0) {
  }
}

47

(41 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

Почему эта функция не работает?

А Вы доп модуль создали? Инициализировали его?

Да конечно

Вот код, все скрытые поля указаны.

Закусило Александр пишет:

Ну вот referer же видите

да вижу, он один

48

(41 ответов, оставленных в Вопросы по работе с системой)

Александр пишет:

Поясните подробнее, ато не совсем понятно.

Почему эта функция не работает?

public static function ormBeforeWriteUsersUser($data){
     /**
     * @var \User\Model\Orm\User
     */
     $user = $data['orm'];
     $flag  = $data['flag']; //Флаг insert или update
     if ($flag==$user::INSERT_FLAG){ //Делаем только на создание (insert)
          $user['openpass'] = \RS\Helper\Tools::generatePassword(6);
     }
}

Вот код, все скрытые поля указаны.

{if !$is_auth}
<form method="POST" action="{$router->getUrl('users-front-register')}">
<input type="hidden" value="3318673409" name="_controller_id">
<input type="hidden" value="%2F" name="referer">
<input type="hidden" value="" name="is_company">

    {$this_controller->myBlockIdInput()}
    <!-- <input type="hidden" name="referer" value="{$referer}"> -->
    <div id=element>
        <table class="authTable">
            <tr>
                <td class="key">Имя
                <input name="name" value="" maxlength="200"  size="50" type="text" />
                </td>
            </tr>
            <tr>
                <td class="key">E-mail
                <input name="e_mail" value="" maxlength="200"  size="50" type="text" />
                </td>
            </tr>
        </table> 
    <a id=button class="formSave">Регистрация</a>
    <a href="{$router->getUrl('users-front-auth', ['referer' => $referer])}" class="formSave inDialog">Войти</a>
    </div>
</form>
{/if}

49

(41 ответов, оставленных в Вопросы по работе с системой)

И почему то перекидывает на страницу с регистрацией, наверно что то нужно добавить как было в примере с авторизацией?

А если мне нужно что бы было по умолчанию?
почему, так не будет работать?

/**
* Действия перед записью объекта пользователя
* 
* @param array $data - Массив  с данными
*/
public static function ormBeforeWriteUsersUser($data){
     /**
     * @var \User\Model\Orm\User
     */
     $user = $data['orm'];
     $flag  = $data['flag']; //Флаг insert или update
     if ($flag==$user::INSERT_FLAG){ //Делаем только на создание (insert)
          $user['openpass'] = \RS\Helper\Tools::generatePassword(6);
     }
}

50

(41 ответов, оставленных в Вопросы по работе с системой)

Все получилось, спасибо. Только с одним но.
Я вставил $this['openpass'] = \RS\Helper\Tools::generatePassword(6); в файл user.inc.php
И после этого авторизация перестает рабоать. т.е. пользователь регистрируется, но его не авторизовывает.

Был бы премного благодарен, если бы подсказали как вынести это в отдельный модуль. Загоздка заключается в следующем
Правильно будет так: public static function ormBeforeWriteUsersUser($user(незнаю точно должна быть эта переменная или нет))
Или так: public static function ormBeforeWriteUsersUser(\Users\Model\Orm\User $userнезнаю точно должна быть эта переменная или нет))

И еще проблема, когда я вывел регистрацию на главную, после нее перекидывает на страницу с регистрацией site.ru/register/ подскажите как это исправить?что бы после главной сразу авторизовывало пользователя