Обязательный чекбокс в форме регистрации

У вас есть идея для расширения функциональности phpBB 3.0.x? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Sn@ke
phpBB 1.4.2
Сообщения: 70
Стаж: 18 лет 2 месяца
Откуда: Армянск
Благодарил (а): 17 раз
Поблагодарили: 8 раз

Обязательный чекбокс в форме регистрации

Сообщение Sn@ke »

Ребят, кто-нибудь реализовывал, чтобы при переходе не страницу регистрации пропускалась страница с условиями, а при заполнении регистрационных полей внизу стоял обязательный чекбокс на согласие с условиями регистрации?
Я нашел лишь реализацию перехода на страницу регистрации, минуя кнопки согласия/несогласия и текст в TERMS_OF_USE ... и тот для двойки.
Заранее благодарен за ответ!

Добавлено спустя 21 минуту 33 секунды:
По аналогии приведенной мной ссылки переделал вариант от rxu для тройки.
В итоге удалось достичь первого требования путем комментирования в файле includes/ucp/ucp_register.php строк с ~85 по ~164

Код: Выделить всё

		if (!$agreed || ($coppa === false && $config['coppa_enable']) || ($coppa && !$config['coppa_enable']))
		{
			$add_lang = ($change_lang) ? '&change_lang=' . urlencode($change_lang) : '';
			$add_coppa = ($coppa !== false) ? '&coppa=' . $coppa : '';

			$s_hidden_fields = array(
				'change_lang'	=> $change_lang,
			);

			// If we change the language, we want to pass on some more possible parameter.
			if ($change_lang)
			{
				// We do not include the password
				$s_hidden_fields = array_merge($s_hidden_fields, array(
					'username'			=> utf8_normalize_nfc(request_var('username', '', true)),
					'email'				=> strtolower(request_var('email', '')),
					'email_confirm'		=> strtolower(request_var('email_confirm', '')),
					'lang'				=> $user->lang_name,
					'tz'				=> request_var('tz', (float) $config['board_timezone']),
					//-- mod : Genders ------------------------------------------------------------
					//-- add
               'gender'      => request_var('gender', $user->data['user_gender']),
					//-- fin mod : Genders --------------------------------------------------------
				));

			}

			// Checking amount of available languages
			$sql = 'SELECT lang_id
				FROM ' . LANG_TABLE;
			$result = $db->sql_query($sql);

			$lang_row = array();
			while ($row = $db->sql_fetchrow($result))
			{
				$lang_row[] = $row;
			}
			$db->sql_freeresult($result);

			if ($coppa === false && $config['coppa_enable'])
			{
				$now = getdate();
				$coppa_birthday = $user->format_date(mktime($now['hours'] + $user->data['user_dst'], $now['minutes'], $now['seconds'], $now['mon'], $now['mday'] - 1, $now['year'] - 13), $user->lang['DATE_FORMAT']);
				unset($now);

				$template->assign_vars(array(
					'S_LANG_OPTIONS'	=> (sizeof($lang_row) > 1) ? language_select($user_lang) : '',
					'L_COPPA_NO'		=> sprintf($user->lang['UCP_COPPA_BEFORE'], $coppa_birthday),
					'L_COPPA_YES'		=> sprintf($user->lang['UCP_COPPA_ON_AFTER'], $coppa_birthday),

					'U_COPPA_NO'		=> append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register&coppa=0' . $add_lang),
					'U_COPPA_YES'		=> append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register&coppa=1' . $add_lang),

					'S_SHOW_COPPA'		=> true,
					'S_HIDDEN_FIELDS'	=> build_hidden_fields($s_hidden_fields),
					'S_UCP_ACTION'		=> append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register' . $add_lang),
				));
			}
			else
			{
				$template->assign_vars(array(
					'S_LANG_OPTIONS'	=> (sizeof($lang_row) > 1) ? language_select($user_lang) : '',
					'L_TERMS_OF_USE'	=> sprintf($user->lang['TERMS_OF_USE_CONTENT'], $config['sitename'], generate_board_url()),

					'S_SHOW_COPPA'		=> false,
					'S_REGISTRATION'	=> true,
					'S_HIDDEN_FIELDS'	=> build_hidden_fields($s_hidden_fields),
					'S_UCP_ACTION'		=> append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register' . $add_lang . $add_coppa),
					)
				);
			}
			unset($lang_row);

			$this->tpl_name = 'ucp_agreement';
			return;
		}
По-моему, именно этот кусок кода отвечает за вывод условий регистраций.
Правильно ли я сделал?.. хотелось бы услышать мнение специалиста.
Также очень надеюсь получить подсказку, как реализовать второе мое условие.
Благодарю!
Аватара пользователя
Айдар
Former team member
Сообщения: 1687
Стаж: 15 лет 9 месяцев
Откуда: KZN
Благодарил (а): 93 раза
Поблагодарили: 189 раз

Re: Обязательный чекбокс в форме регистрации

Сообщение Айдар »

С чекбоксом получилось частично - он не работает в IE (проверена только версия 8).

Открыть шаблон ucp_register.html, найти:

Код: Выделить всё

// ]]>
</script>
Добавить после:

Код: Выделить всё

<script type="text/javascript">
function apply()
{
  document.frm.submit.disabled=true;
  if(document.frm.chk.checked==true)
  {
    document.frm.submit.disabled=false;
  }
  if(document.frm.chk.checked==false)
  {
    document.frm.submit.enabled=false;
  }
}
</script>
Найти: Найти в строке: Добавить в строку после найденного:

Код: Выделить всё

  name="frm"
Найти:

Код: Выделить всё

<!-- INCLUDE {CAPTCHA_TEMPLATE} -->
<!-- ENDIF -->
Добавить после:

Код: Выделить всё

<div class="panel">
<dl><dd><strong>

<input type="checkbox" name="chk" onClick="apply()">&NBSP;{L_CONFIRM_REG_CONDITIONS}</strong></dd></dl>
</div>
Открыть /language/ru/ucp.php, найти:

Код: Выделить всё

'CONFIRM_EXPLAIN'
Добавить после:

Код: Выделить всё

'CONFIRM_REG_CONDITIONS'      =>  ' Я согласен с <a href="http://мой-домен.ru/ucp.php?mode=register">условиями регистрации</a>',
То же проделать и с /language/en/ucp.php
В ишаке не работает, скорее всего, из-за того, что используется яваскрипт, управляющий кнопкой "Отправить", которой как раз для этого управления задается атрибут name. Но у этой кнопки уже есть собственный атрибут name="submit". Собственно, это имя я и тупо использовал в яваскрипте.
In Web We Trust
Sn@ke
phpBB 1.4.2
Сообщения: 70
Стаж: 18 лет 2 месяца
Откуда: Армянск
Благодарил (а): 17 раз
Поблагодарили: 8 раз

Re: Обязательный чекбокс в форме регистрации

Сообщение Sn@ke »

Айдар, огромное спасибо за оперативный ответ!
Только вот не пойму зачем форму переименовывать. В моей сборке ее уже по умолчанию обозвали "register".
То есть, произвел следующие действия

Открыть шаблон ucp_register.html, найти:

Код: Выделить всё

// ]]>
</script>
Добавить после:

Код: Выделить всё

<script type="text/javascript">
function apply()
{
  document.register.submit.disabled=true;
  if(document.register.chk.checked==true)
  {
    document.register.submit.disabled=false;
  }
  if(document.register.chk.checked==false)
  {
    document.register.submit.enabled=false;
  }
}
</script>
Найти:

Код: Выделить всё

<!-- INCLUDE {CAPTCHA_TEMPLATE} -->
<!-- ENDIF -->
Добавить после:

Код: Выделить всё

<input type="checkbox" name="chk" onClick="apply()">&nbsp;{L_REG_AGREM}&nbsp;<a href="{U_RULES}" target="_blank">{L_BOARD_RULES_HDR}</a>
это я свою пояснялку на правила еще до чекбокса впихнул

Над кроссбраузерностью дабы не пропускать без галки в IE тоже подумаю, может, что-то и придет в голову :)

Добавлено спустя 24 минуты 1 секунду:
Только у меня еще прикол оказывается: в Опере и Мозилле кнопка submit становится неактивной лишь после того, как галку поставить и снова снять, а изначально кнопка доступна. Поигрался с условиями яваскрипта да там все верно..
Не было таких конфликтов случайно?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Обязательный чекбокс в форме регистрации

Сообщение Sheer »

Бог мой! Зачем такие сложности!
includes/ucp/ucp_register.php
Найти

Код: Выделить всё

$agreed            = (!empty($_POST['agreed'])) ? 1 : 0; 
Заменить на

Код: Выделить всё

$agreed            = 1; 
Вот и все!
Со вторым условием тоже несложно...
Sn@ke
phpBB 1.4.2
Сообщения: 70
Стаж: 18 лет 2 месяца
Откуда: Армянск
Благодарил (а): 17 раз
Поблагодарили: 8 раз

Re: Обязательный чекбокс в форме регистрации

Сообщение Sn@ke »

Большое спаибо!
Подскажите, а какие еще есть альтернативные варианты для чекбокса?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Обязательный чекбокс в форме регистрации

Сообщение Sheer »

ucp_register.html
Найти

Код: Выделить всё

{S_HIDDEN_FIELDS}
Перед вставить

Код: Выделить всё

{L_AGREE}&nbsp;<input name="i_agreed" type="checkbox" class="radio"<!-- IF AGREE -->checked<!-- ENDIF --> />&nbsp;
includes/ucp_register.php
Найти

Код: Выделить всё

if ($submit) 
Перед вставить

Код: Выделить всё

$i_agreed            = request_var('i_agreed', ''); 
Найти

Код: Выделить всё

if (!sizeof($error)) 
После вставить

Код: Выделить всё

            if (!$i_agreed)
            {
                $error[] = 'Если вы согласны с условиями регистрации, поставтье галочку напротив "Я согласен" или покиньте странице регистрации';
            } 
Найти

Код: Выделить всё

'ERROR'                => (sizeof($error)) ? implode('<br />', $error) : '', 
После вставить

Код: Выделить всё

'AGREE'              => $i_agreed, 
Sn@ke
phpBB 1.4.2
Сообщения: 70
Стаж: 18 лет 2 месяца
Откуда: Армянск
Благодарил (а): 17 раз
Поблагодарили: 8 раз

Re: Обязательный чекбокс в форме регистрации

Сообщение Sn@ke »

Sheer, уточните пожалуйста по инструкции
Найти

Код: Выделить всё

if (!sizeof($error)) 
После вставить

Код: Выделить всё

            if (!$i_agreed)
            {
                $error[] = 'Если вы согласны с условиями регистрации, поставтье галочку напротив "Я согласен" или покиньте странице регистрации';
            } 
Дело в том, что в стандартном файле ucp_register.php 2 вхождения строки

Код: Выделить всё

if (!sizeof($error))
Где именно?
Тем не менее, после вставки строго по инструкции ни после первого вхождения, ни после второго, дезактивация кнопки завершения регистрации, к сожалению, не происходит и ошибки если галочку не отмечать не выдает.

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

Код: Выделить всё

			if (!sizeof($error))
			{
				if ($data['new_password'] != $data['password_confirm'])
				{
					$error[] = $user->lang['NEW_PASSWORD_ERROR'];
				}

				if ($data['email'] != $data['email_confirm'])
				{
					$error[] = $user->lang['NEW_EMAIL_ERROR'];
				}
					
		
				
				if (!$i_agreed)
        {
          $error[] = 'Если вы согласны с условиями регистрации, поставтье галочку напротив "Я согласен" или покиньте странице регистрации';
         } 
						
				
			}
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Обязательный чекбокс в форме регистрации

Сообщение Sheer »

Sn@ke писал(а):Дело в том, что в стандартном файле ucp_register.php 2 вхождения строки
Если ничего специально не оговорено, значит найти первое вхождение.
... Ну да, спал уже... ошибся малость...
Найти

Код: Выделить всё

if (!sizeof($error)) 
ПЕРЕД (а не после) вставить

Код: Выделить всё

               if (!$i_agreed)
            {
                   $error[] = 'Если вы согласны с условиями регистрации, поставтье галочку напротив "Я согласен" или покиньте странице регистрации';
               } 
Ну или найти $cp->submit_cp_field('register', $user->get_iso_lang_id(), $cp_data, $error); и после вставить, если так понятнее. Работает, файл во вложении
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Sn@ke
phpBB 1.4.2
Сообщения: 70
Стаж: 18 лет 2 месяца
Откуда: Армянск
Благодарил (а): 17 раз
Поблагодарили: 8 раз

Re: Обязательный чекбокс в форме регистрации

Сообщение Sn@ke »

Вот теперь действительно работает!
Айдар, и особенно, Sheer, - спасибо вам большое за помощь!
Аватара пользователя
Torrente
phpBB 1.2.1
Сообщения: 20
Стаж: 13 лет 10 месяцев
Благодарил (а): 3 раза
Забанен: Бессрочно

Re: Обязательный чекбокс в форме регистрации

Сообщение Torrente »

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

Вернуться в «Запросы модов для phpBB 3.0.x»