Personalizando a interface do multiselect no magento
-
29-09-2020 - |
Pergunta
Minha lista de seleção múltipla é muito grande, é difícil descobrir quais opções estão seleccionadas, eu quero mudar em alguma coisa como o seguinte, é possível?Ele pode estar em qualquer lugar, mas no momento eu tenho um costume "customer_address atributo" tipo "múltipla",
Eu estou criando a minha atributo como este meu script sql,
<?php
$installer = $this;
$installer->startSetup();
$installer->addAttribute('customer_address', 'additional_managers', array(
'label' => 'Additional Store/Site Managers',
'visible' => true,
'required' => false,
'type' => 'varchar',
'input' => 'multiselect',
'source' => 'abc_districtmanager/address_attribute_source_districtmanager',
'onclick' => 'getSelectValues(this)',
'user_defined' => 1,
'position' => 100
));
$used_in_forms = array(
'adminhtml_customer_address',
'customer_address_edit',
'customer_register_address'
);
$attribute = Mage::getSingleton('eav/config')->getAttribute('customer_address', 'additional_managers');
$attribute->setData('used_in_forms', $used_in_forms);
$attribute->save();
$installer->endSetup();
Solução 2
Eu tenho o meu propósito, com um ligeiro mudou de interface usando o "Escolhido" jquery.
Download Escolhido Jquery chosen.jquery.js e escolhido.css, coloque esses arquivos em seu design, Adicioná-los para você no módulo respeitado .arquivo xml, na cabeça como
<reference name="head">
<!-- Adding js and css to use "chosen" instead of "select" for "multiselect" input types-->
<action method="addItem">
<type>skin_js</type>
<name>js/chosen.jquery.js</name>
</action>
<action method="addItem">
<type>skin_css</type>
<name>css/chosen.css</name>
</action>
</reference>
ser cuidadoso sobre caminho dos arquivos, após isso, em seu respeitado vista (.phtml) utilize Escolhido
<script type="text/javascript">
jQuery(document).ready(function ($) {
$(".myClass").chosen();
});
Isso irá alterar a interface de elementos de ter classe "minhaclasse", a saída pode gostar deste
Outras dicas
você pode obter esta funcionalidade código abaixo
<select onchange="getSelectValues(this)"></select>
function getSelectValues(select) {
var options = select && select.options;
var opt;
for (var i=0, iLen=options.length; i<iLen; i++) {
opt = options[i];
if (opt.selected) {
opttext +=opt.text+'<br />';
}
}
document.getElementById('showdiv').innerHtml=opttext;
}
fazendo com protótipo
$("_itemNaNadditional_managers").invoke('observe', 'change', function() {
var options = $("_itemNaNadditional_managers").options;
var opt;
for (var i=0, iLen=options.length; i<iLen; i++) {
opt = options[i];
if (opt.selected) {
opttext +=opt.text+'<br />';
}
}
document.getElementById('showdiv').innerHtml=opttext;
});