Virtuemart. Физическое и юридическое лицо. Две регистрации.

Сейчас работаю над переносом интернет магазина на платформу Virtuemart 1.1.9 (Joomla 1.5). Столкнулся с проблемой — надо при регистрации предложить клиенту две формы регистрации: выбор между физическим и юридическим лицом. Так что теперь начинаем цикл статей по Virtuemart.

Итак, допустим мы хотим сделать два типа пользователя (можно на самом-то деле и больше — по аналогии).

ШАГ 1. Начнем с того, что создадим в панели управления компонента VirtueMart дополнительные поля, заполняемые пользователям. При этом для полей физического лица добавим префикс vm_fiz, а для юридического — vm_ur. Поля общие для тех и других оставим без каких-либо префиксов. Теперь отсортируем поля так, как нам больше нравится и перейдем ко второму шагу.

ШАГ 2. Теперь нам надо при регистрации пользователя предложить выбор между физическим лицом и юридическом. Открываем файлик /components / com_virtuemart / themes / default / templates / checkout / login_registration.tpl.php.

Там видим

<?php if( $show_login ) : ?>
<h4><input type="radio" name="togglerchecker" id="toggler1" class="toggler" <?php if($open_to_stretcher == 0 ) { ?>checked="checked"<?php } ?> />
<label for="toggler1"><?php echo $VM_LANG->_('PHPSHOP_RETURN_LOGIN') ?></label>
</h4>
<div class="stretcher" id="login_stretcher">
<?php include( PAGEPATH . 'checkout.login_form.php' ); ?>
</div>
<br />

Это форма авторизации. Её пока не трогаем. Следующий блок — форма регистрации

<h4><input type="radio" name="togglerchecker" id="toggler2" class="toggler" <?php if($open_to_stretcher == 1 ) { ?>checked="checked"<?php } ?> />
<label for="toggler2"><?php echo $VM_LANG->_('PHPSHOP_NEW_CUSTOMER') ?></label></h4>
<div class="stretcher" id="register_stretcher">
<?php endif; ?>

<?php include(PAGEPATH. 'checkout_register_form.php'); ?>

<?php if( $show_login ) : ?>
   </div>
   <br />

Вставки php мы немного передвинем, а всё, что осталось, копируем и вставляем ниже, заменяя стандартные тексты заголовков на что-то вроде «Регистрация физического лица», «Регистрация юридического лица», а также id для radio на toggler3 и id блока div на registerur_stretcher. Кроме всего мы подключаем новую форму регистрации checkout_registerur_form.php. Кроме всего прочего не забываем менять кодировку на UTF-8, чтобы русские буквы отображались нормально. В итоге у нас получится следующее безобразие

<?php endif; ?>
<h4><input type="radio" name="togglerchecker" id="toggler2" class="toggler" <?php if($open_to_stretcher == 1 ) { ?>checked="checked"<?php } ?> />
<label for="toggler2"><?php echo "Регистрация физического лица" ?></label></h4>
<div class="stretcher" id="register_stretcher">

<?php include(PAGEPATH. 'checkout_register_form.php'); ?>

</div>
<br />

<h4><input type="radio" name="togglerchecker" id="toggler2" class="toggler" <?php if($open_to_stretcher == 2 ) { ?>checked="checked"<?php } ?> />
<label for="toggler2"><?php echo "Регистрация юридического лица" ?></label></h4>
<div class="stretcher" id="registerur_stretcher">

<?php include(PAGEPATH. 'checkout_registerur_form.php'); ?>

</div>
<br />

Так как мы здесь убрали <?php if( $show_login ) : ?>, то было бы неплохо убрать и соответствующий <?php endif; ?>, дабы наш php не ругался. Этот endif находится в самом конце. Удаляем и его.

ШАГ 3. Здесь у нас появился файл checkout_registerur_form.php. Было бы неплохо его создать. Открываем папку /administrator / components / com_virtuemart / html и дублируем там уже существующий checkout_register_form.php с именем checkout_registerur_form.php. Эти два файла надо еще подредактировать, но об этом позже.

ШАГ 4. В принципе, login_registration.tpl.php уже можно закрывать, но если вы начнете оформлять заказ, то увидите, что при выборе физического лица, юридическое уезжает далеко вниз (особенно, если вы создали много полей. Если это вас, как и меня, не радует, то следует перенести все заголовки h4 наверх, а блоки div оставить внизу. Короче, на тему оформления фантазируйте сами.

В итоге файл login_registration.tpl.php, начиная с 25 строки будет представлять собой следующее:

<?php if( $show_login ) : ?>
<h4><input type="radio" name="togglerchecker" id="toggler1" class="toggler" <?php if($open_to_stretcher == 0 ) { ?>checked="checked"<?php } ?> />
<label for="toggler1"><?php echo $VM_LANG->_('PHPSHOP_RETURN_LOGIN') ?></label>
</h4>
<?php endif; ?>
<h4><input type="radio" name="togglerchecker" id="toggler3" class="toggler" <?php if($open_to_stretcher == 2 ) { ?>checked="checked"<?php } ?> />
<label for="toggler3"><?php echo "Регистрация физического лица" ?></label></h4>
<h4><input type="radio" name="togglerchecker" id="toggler2" class="toggler" <?php if($open_to_stretcher == 1 ) { ?>checked="checked"<?php } ?> />
<label for="toggler2"><?php echo "Регистрация юридического лица" ?></label></h4>
<?php if( $show_login ) : ?>
<div class="stretcher" id="login_stretcher">
<?php include( PAGEPATH . 'checkout.login_form.php' ); ?>
</div>
<br />
<?php endif; ?>
<div class="stretcher" id="registerfiz_stretcher">

<?php include(PAGEPATH. 'checkout_register_form.php'); ?>

</div>
<br />

<div class="stretcher" id="registerur_stretcher">

<?php include(PAGEPATH. 'checkout_register_form.php'); ?>

</div>
<br />

<?php
   echo vmCommonHTML::scriptTag('', 'Window.onDomReady(function() {

	// get accordion elements
	myStretch = $$( \'.toggler\' );
	myStretcher = $$( \'.stretcher\' );

	// Create the accordion
	myAccordion = new Fx.Accordion(myStretch, myStretcher,
		{
			/*fixedHeight: 125,*/
			opacity : true,
			display: '.$open_to_stretcher.'
		});

});');
?>

ШАГ 5. Переходим к следующему посту, который далеко не последний

5 комментариев на «“Virtuemart. Физическое и юридическое лицо. Две регистрации.”»

  1. Александр:

    Продолжения давно уже ждем.
    Спасибо за такие разработки, главное, что описываете, что делаете…. Учиться помогаете.

  2. Алексей:

    Продолжение готово.

  3. Злой:

    доброго времени суток! возник такой вопрос: как быть с зависимыми полями. всё получилось и работает нормально, только если ставлю требуемые поля для физ. лица и юр. лица, то пишет проверьте все ли поля заполнены. работает нормально после отключения требуемых полей. иначе у физ лица требует заполнения требуемых полей юр. лица. как быть?!

  4. Илья:

    В последнем фрагменте кода небольшая ошибка,
    49 строка должна иметь вид:

Добавить комментарий

Для отправки комментария вы должны авторизоваться.