Устанавливайте флажки выбора в регистрационной форме Magento

#magento

#magento

Вопрос:

В настоящее время я использую Magento 1.5.0.1

Когда клиент повторно регистрируется на странице регистрации (/ учетная запись / создать), он должен ввести дату рождения (dob).

По умолчанию дата рождения состоит из 3 текстовых полей. Я изменил файл в / app / design / frontend / base / default / template / customer / widget.

Итак, вместо текстовых полей теперь есть 3 поля выбора, в которых пользователь может выбрать дату

Однако, когда вся информация заполнена правильно и вы нажимаете на кнопку «Отправить», ничего не происходит (никаких ошибок, сообщений или чего-либо еще).

Есть идеи о том, как заставить кнопку «отправить» снова работать?

Спасибо

Редактировать:

Идентификаторы the совпадают с идентификатором, используемым «». Я опубликовал код, который я изменил

Я создал 2 функции, которые печатают элемент options:

 function getOptions($minValue, $maxValue)
  

{
$options = «»;

 for ($count = $minValue; $count <= $maxValue; $count  )
{
    $options = $options . '<option value="' . $count . '">' . $count . '</option>';
}

return $options;
  

}

 function getYears()
  

{
$ years = «»;
$ currentYear = дата (‘Y’);

 for ($count = 1900; $count <= $currentYear; $count  )
{
    $years = $years . '<option value="' . $count;

    if ($count == '1980')
    {
        $years = $years . '" selected="selected"';  
    }

    $years = $years .  '">' . $count . '</option>';
}

return $years;
  

}

И я изменил тип ввода = текст на select

 $this->setDateInput('d',
'<div class="dob-day">
<label for="' . $this->getFieldId('day') . '">' . $this->__('DD') . '</label>
<select id="' . $this->getFieldId('day') . '" name="' . $this->getFieldName('day') . '" title="' . $this->__('Day') . '" class="validate-select" ' . $this->getFieldParams() . '>' . getOptions(1,31) . '

</select>
</div>
<br />');

$this->setDateInput('m',
    '<div class="dob-month">
<label for="' . $this->getFieldId('month') . '">' . $this->__('MM') . '</label>
         <select id="' . $this->getFieldId('month') . '" name="' . $this->getFieldName('month') . '" title="' .  $this->__('Month') . '" class="validate-select"' . $this->getFieldParams() . '>' . getOptions(1,12) . '

</select>
</div>
<br />');

$this->setDateInput('y',
    '<div class="dob-year">
<label for="' . $this->getFieldId('year') . '">' . $this->__('YYYY') . '</label>
        <select id="' . $this->getFieldId('year') . '" name="' . $this->getFieldName('year') . '" title="' . $this->__('Year') . '" class="validate-select"' . $this->getFieldParams() . '>' . getYears() . '
     </div>'
);
  

Комментарии:

1. Имеют ли <select> те же идентификаторы, что и предыдущие <input type="text"... ? Если они это сделают, единственным возможным шансом будет получение значения.

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

3. есть ошибки в консоли javascript?

4. Да, в консоли javascript произошла ошибка. Я никогда раньше этого не замечал. В любом случае, там написано: В строке 425 из js.js ==> this.day.addClassName(‘validate-custom’); это. день не определен

5. Есть мысли о том, как это решить?

Ответ №1:

Замените / создайте файл dob.phtml, расположенный в app / design / frontend / [package-name] /default / template / customer / widget/

https://gist.github.com/ncla/7794502 (протестировано в Magento 1.8 community edition)

Принятый ответ может сработать, но скрытие входных данных кажется неприемлемым. Кроме того, методы setDateInput, getSortedDateInputs не нужны, поскольку вы передаете им HTML только для того, чтобы получить их обратно.

Если вы попытаетесь преобразовать dob.phtml из полей ввода в выпадающие списки, проверка формы Magento завершится неудачей (выдаст ошибку JS), поскольку не удается найти ввод «день». Итак, я просто переопределяю Varien.Выполните инициализацию функции DOB для выбора правильных элементов.

Комментарии:

1. Ваше решение идеально подходит для меня в версии 1.7.0.2, спасибо.

Ответ №2:

Пожалуйста, замените dob.phtml в app / design / frontend /base / default / template / customer / widget/

следовать коду и заменять новое поле на старое с помощью css

 /////////////////////////////

<?php echo $this->getLayout()->createBlock('customer/widget_dob')
   ->setDate($this->getCustomer()->getDob())
   ->toHtml() ?>

// For checkout/onepage/billing.phtml:

<?php echo $this->getLayout()->createBlock('customer/widget_dob')
   ->setDate($this->getCustomer()->getDob())
   ->setFieldIdFormat('billing:%s')
   ->setFieldNameFormat('billing[%s]')
   ->toHtml() ?>

/* NOTE: Regarding styles - if we leave it this way, we'll move it to boxes.css
      Alternatively we could calculate widths automatically using block input parameters.
*/

/**
 * @see Mage_Customer_Block_Widget_Dob
 */
<label for="<?php echo $this->getFieldId('month')?>"<?php if ($this->isRequired()) echo ' class="required"' ?>><?php if ($this->isRequired()) echo '<em>*</em>' ?><?php echo $this->__('Date of Birth') ?></label>
<div class="input-box customer-dob">
<?php
    $this->setDateInput('d',
        '<div class="dob-day">
             <input type="text" id="' . $this->getFieldId('day') . '" name="' . $this->getFieldName('day') . '" value="' . $this->getDay() . '" title="' . $this->__('Day') . '" class="input-text validate-custom" ' . $this->getFieldParams() . '  />
             <label for="' . $this->getFieldId('day') . '">' . $this->__('DD') . '</label>
         </div>'
    );?>


    <select name="nday" id="nday" onchange="getElementById('<?php echo $this->getFieldId('day');?>').value=this.value" style="width:90px;">
    <option value="">Select</option>
    <?php
    for($i=1;$i<=31;$i  )
    {
    echo "<option value='".$i."'>".$i."</option>";
    }
    ?>
    </select>

    <select name="nmon" id="nmon" onchange="getElementById('<?php echo $this->getFieldId('month');?>').value=this.value" style="width:90px;">
    <option value=''>Select</option>
    <?php echo '<option value="">'.$this->__("Select").'</option>'.'<option value="01">'.$this->__("January").'</option>'.'<option value="02">'.$this->__("February").'</option>'.'<option value="03">'.$this->__("March").'</option>'.'<option value="04">'.$this->__("April").'</option>'.'<option value="05">'.$this->__("May").'</option>'.'<option value="06">'.$this->__("June").'</option>'.'<option value="07">'.$this->__("July").'</option>'.'<option value="08">'.$this->__("August").'</option>'.'<option value="09">'.$this->__("September").'</option>'.'<option value="10">'.$this->__("October").'</option>'.'<option value="11">'.$this->__("November").'</option>'.'<option value="12">'.$this->__("December").'</option>'; ?>
    </select>


    <select name="nyear" id="nyear" onchange="getElementById('<?php echo $this->getFieldId('year');?>').value=this.value" style="width:90px;">
    <option value="">Select</option>
    <?php
    for($j=date('Y')-80;$j<=date('Y');$j  )
    {
    echo "<option value='".$j."'>".$j."</option>";
    }
    ?>
    </select>
    </p>
    <?php

    $this->setDateInput('m',
        '<div class="dob-month">
             <input type="text" id="' . $this->getFieldId('month') . '" name="' . $this->getFieldName('month') . '" value="' . $this->getMonth()  . '" title="' . $this->__('Month')  . '" class="input-text validate-custom" ' . $this->getFieldParams()  . '/>
             <label for="' . $this->getFieldId('month') . '">' . $this->__('MM')  . '</label>
         </div>'
    );





    $this->setDateInput('y',
        '<div class="dob-year">
             <input type="text" id="' . $this->getFieldId('year') . '" name="' . $this->getFieldName('year') . '" value="' . $this->getYear()  . '" title="' . $this->__('Year')  . '" class="input-text validate-custom" ' . $this->getFieldParams()  . ' />
             <label for="' . $this->getFieldId('year') . '">' . $this->__('YYYY')  . '</label>
         </div>'
    );

?>




    <?php echo $this->getSortedDateInputs() ?>
    <div class="dob-full" style="display:none;">
        <input type="hidden" id="<?php echo $this->getFieldId('dob')?>" name="<?php echo $this->getFieldName('dob')?>" />
    </div>

    <div class="validation-advice" style="display:none;"></div>
</div>
<script type="text/javascript">
//<![CDATA[
    var customer_dob = new Varien.DOB('.customer-dob', <?php echo $this->isRequired() ? 'true' : 'false' ?>, '<?php echo $this->getDateFormat() ?>');
//]]>
</script>

////////////////////////////
  

это работает нормально. это просто идея…….
наслаждайтесь

Комментарии:

1. Пожалуйста, отредактируйте свой пост, чтобы правильно отформатировать код. Либо сделайте отступ на 4 пробела, либо используйте {} кнопку, которая предусмотрена.

2. В итоге я это сделал, но я бы посоветовал вам делать это в будущем, @Винод Кумар.

3. @Винод Кумар: Отлично работает, за исключением того, что вы забыли кавычки в событиях onchange: должно быть: getElementById(‘<?php echo $this->getFieldId(‘месяц’);?>’)

Ответ №3:

Вот как я это сделал. Может быть, кто-нибудь сможет это использовать

  1. Возьмите код dob с какого-нибудь сайта или из темы Magento по умолчанию

  2. Создайте свой собственный шаблон виджета в папке темы, например customer/widget/dob-custom.phtml

  3. Вызовите этот виджет в вашем файле шаблона, например

     echo $this->getLayout()->createBlock('customer/widget_dob')->setTemplate('customer/widget/dob-custom.phtml')->toHtml();
      

Ответ №4:

Я думаю, проблема в том, что формат DD неверен. Вы создаете день, подобный 1, 2, 3, 4… хотя это должно быть 01, 02, 03, 04, .. и т.д..

С уважением!

Ответ №5:

Недавно я переключился с решения ncla на это: http://www.endreywalder.com/blog/change-date-of-birth-field-to-select-boxes-in-magento /

Вместо отображения 01-12 в течение месяцев, это выведет фактические имена, которые мне нравятся намного больше.

Протестировано на Magento 1.9.2