跨境电商
经验交流分享

Magento国家下拉菜单设置默认值

Magento的开发当中,经常需要用到国家下拉菜单选项供客户选择,在Mage_Directory_Block_Data中,有一个getCountryHtmlSelect()方法,该方法返回了系统中所有可用的国家选项。直接调用该方法的时候,可以发现选项选中的值为系统默认国家。如果需要修改这个默认值该如何操作呢?

在Ruiwant_Consult产品咨询扩展中,访客提问的同时,会要求访择国家,如果当前访客已登录,则系统会根据客户的billing address地址中填写的国家为客户自动选择。实现自动勾选非常方便,获取billing address对象拿到country的code之后,只需要给getCountryHtmlSelect()方法的第一个参数中赋值该code即可。在下面这个方法中,可以看到参数一即默认值的意思。

[php]
public function getCountryHtmlSelect($defValue=null, $name=’country_id’, $id=’country’, $title=’Country’)
[/php]

如果没有传递,则调用系统设置的默认国家。

[php]
if (is_null($defValue)) {
$defValue = $this->getCountryId();
}
[/php]

最后实例化core/html_select Block,并通过如下方式传到了默认勾选的参数。

[php]
$html = $this->getLayout()->createBlock(‘core/html_select’)
->setName($name)
->setId($id)
->setTitle(Mage::helper(‘directory’)->__($title))
->setClass(‘validate-select’)
->setValue($defValue)
->setOptions($options)
->getHtml();
[/php]

在core/html_select Block的_toHtml()方法中,调用了_optionToHtml($option, $selected = false),该方法用于最终生成select的options值。从下面这两段代码中,可以很清楚的看到整个默认值选中的流程了。

[php]
//_toHtml()

foreach ($this->getOptions() as $key => $option) {
if ($isArrayOption && is_array($option)) {
$value  = $option[‘value’];
$label  = (string)$option[‘label’];
$params = (!empty($option[‘params’])) ? $option[‘params’] : array();
} else {
$value = (string)$key;
$label = (string)$option;
$isArrayOption = false;
$params = array();
}

if (is_array($value)) {
$html .= ‘<optgroup label="’ . $label . ‘">’;
foreach ($value as $keyGroup => $optionGroup) {
if (!is_array($optionGroup)) {
$optionGroup = array(
‘value’ => $keyGroup,
‘label’ => $optionGroup
);
}
$html .= $this->_optionToHtml(
$optionGroup,
in_array($optionGroup[‘value’], $values)
);
}
$html .= ‘</optgroup>’;
} else {
$html .= $this->_optionToHtml(
array(
‘value’ => $value,
‘label’ => $label,
‘params’ => $params
),
in_array($value, $values)
);
}
}
[/php]
[php]
//_optionToHtml()
protected function _optionToHtml($option, $selected = false)
{
$selectedHtml = $selected ? ‘ selected="selected"’ : ”;
[/php]

赞(0)
未经允许不得转载:锐想 » Magento国家下拉菜单设置默认值
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

锐想电商 - 跨境电商经验交流分享

锐想无限