DOB выберите поля в регистрационной форме Magento - PullRequest
1 голос
/ 27 апреля 2011

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

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

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

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

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

Любая идея о том, как сделать «отправку»"кнопка снова работает?

Спасибо

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

Идентификаторы того же, что и" ".Я разместил код, который я изменил

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

function getOptions($minValue, $maxValue)

{$ options = "";

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

return $options;

}

function getYears()

{$ years = "";$ currentYear = date ('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;

}

И я изменил тип ввода = текст, чтобы выбрать

$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>'
);

Ответы [ 5 ]

2 голосов
/ 05 декабря 2013

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

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

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

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

1 голос
/ 07 ноября 2016

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

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

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

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

    echo $this->getLayout()->createBlock('customer/widget_dob')->setTemplate('customer/widget/dob-custom.phtml')->toHtml();
    
1 голос
/ 20 мая 2011

плз заменить dob.phtml в приложение / дизайн / интерфейс / базы / по умолчанию / шаблон / клиент / виджет /

к следующему коду и переопределить новое поле на старое с помощью 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>

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

все работает нормально. Это просто идея ....... наслаждаться

0 голосов
/ 10 июля 2015

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

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

0 голосов
/ 13 марта 2013

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

С уважением!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...