magento drop-down-menu configurable

Cambie el texto "Elija una opción..." en la página del producto Magento



drop-down-menu configurable (9)

La única forma en que pienso es solo modificar la clase de javascript que rellena esos desplegables. Como podemos ver en frontend/base/default/template/catalog/product/view/type/options/configurable.phtml esa clase es:

<script type="text/javascript"> var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>); </script>

El archivo con la clase necesaria ubicado en js/varien/product.js

El lugar donde se configura la primera etiqueta <option> es:

fillSelect: function(element){ var attributeId = element.id.replace(/[a-z]*/, ''''); var options = this.getAttributeOptions(attributeId); this.clearSelect(element); element.options[0] = new Option(this.config.chooseText, ''''); ...

La variable chooseText usó allí en la línea 368. Esta variable se creó en la función getJsonConfig() en la app/code/core/Mage/Catalog/Block/Product/View/Type/Configurable.php (estaba cavando de la manera correcta). Necesita modificar el javascript que describí anteriormente para lograr lo que necesita (basado en var attributeId puede asignar opciones con texto diferente a los elementos que necesita)

Creé un producto configurable, tiene tres opciones: color , tamaño y estilo .

Ahora en la página del producto, cada opción tiene el texto predeterminado " Elegir una opción ... " en el menú desplegable, pero quiero que el texto sea " Seleccionar color ", " Seleccionar tamaño " y " Seleccionar estilo ".

Edité la función getJsonConfig () en la aplicación / code / core / Mage / Catalog / Block / View / Type / Configurable.php

De:

''chooseText'' => Mage::helper(''catalog'')->__(''Choose an Option...''),

A:

''chooseText'' => (''Select '').$attribute->getLabel(),

Y edite la línea 39 del archivo frontend/base/default/template/catalog/product/view/type/options/configurable.phtml para:

<option><?php echo $this->__(''Select '') ?><?php echo $_attribute->getLabel() ?></option>

Pero el resultado no es bueno, siempre muestra el texto "Elegir estilo" en tres opciones. Por favor dame una pista para este problema, ¡muchas gracias!


Estaba buscando una forma más simple de hacer esto. No quería extender ningún archivo core o ensuciar con la extensión de JavaScript. En cambio, analicé la configuración JSON, actualicé la configuración de chooseText y volví a convertirla a JSON:

/~theme/default/template/catalog/product/view/type/options/configurable.phtml

<?php $jsonConfig = json_decode($this->getJsonConfig()); $jsonConfig->chooseText = ''Select..''; ?> <script type="text/javascript"> var spConfig = new Product.Config(<?php echo json_encode($jsonConfig); ?>); </script>

Más información y más ejemplos aquí .


Si solo cambia el archivo configurable.js
Solo cambiará primero, seleccione cuando la carga de la página
Entonces debo cambiar el archivo de plantilla
Obtenga el archivo adjunto para la prueba. (Solo lo escribo en una pequeña extensión)

<?php $_product = $this->getProduct(); $_attributes = Mage::helper(''core'')->decorateArray($this->getAllowAttributes()); ?> <?php if ($_product->isSaleable() && count($_attributes)):?> <dl> <?php foreach($_attributes as $_attribute): ?> <?php $_attributeId = $_attribute->getAttributeId(); $_attributeInfo = Mage::getModel(''eav/entity_attribute'')->load($_attributeId); $_attributeLabel = str_replace('' '',''-'',strtolower($_attributeInfo->getFrontendLabel())); ?> <dd<?php if ($_attribute->decoratedIsLast){?> class="last"<?php }?>> <div class="input-box"> <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select kevin-black-<?php echo $_attributeLabel;?>"> <option><?php echo $_attributeInfo->getFrontendLabel() ?></option> </select> </div> </dd> <?php endforeach; ?> </dl> <script type="text/javascript"> var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>); //[email protected] Change Text follow attribute Label function changeFristText(){ <?php foreach($_attributes as $_attribute): ?> <?php $_attributeId = $_attribute->getAttributeId(); $_attributeInfo = Mage::getModel(''eav/entity_attribute'')->load($_attributeId); ?> var label = ''<?php echo $_attributeInfo->getFrontendLabel();?>''; $$(''select.kevin-black-''+label).each(function(elem){ var options = elem.childElements(); options[0].update(label); }); <?php endforeach;?> } </script> <?php endif;?> in file : js/varien/configurable.js replace line 171 = element.options[0] = new Option(element.config.label, ‘’);

Es para todo el conjunto de atributos.


<script type="text/javascript"> <?php $jsonConfig = $this->getJsonConfig(); $jsonConfig = str_replace("Choose an Option...", "Select Size", $jsonConfig); ?> var spConfig = new Product.Config(<?php echo $jsonConfig; ?>); </script>


la respuesta más simple:

reemplace js / varien / configurable.js línea 172

element.options[0].innerHTML = ''Choose '' + this.config.attributes[attributeId].label;


catálogo de archivos / producto / vista / tipo / opciones / configurable.phml

<?php $_product = $this->getProduct(); $_attributes = Mage::helper(''core'')->decorateArray($this->getAllowAttributes()); ?> <?php if ($_product->isSaleable() && count($_attributes)):?> <dl> <?php foreach($_attributes as $_attribute): ?> <?php $_attributeId = $_attribute->getAttributeId(); $_attributeInfo = Mage::getModel(''eav/entity_attribute'')->load($_attributeId); $_attributeLabel = str_replace('' '',''-'',strtolower($_attributeInfo->getFrontendLabel())); ?> <dd<?php if ($_attribute->decoratedIsLast){?> class="last"<?php }?>> <div class="input-box"> <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select kevin-black-<?php echo $_attributeLabel;?>"> <option><?php echo $this->__(''Select ''.$_attributeLabel) ?></option> </select> </div> </dd> <?php endforeach; ?> </dl> <script type="text/javascript"> var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>); //Change Text follow attribute Label function changeFristText(){ <?php foreach($_attributes as $_attribute): ?> <?php $_attributeId = $_attribute->getAttributeId(); $_attributeInfo = Mage::getModel(''eav/entity_attribute'')->load($_attributeId); $_attributeLabel = str_replace('' '',''-'',strtolower($_attributeInfo->getFrontendLabel())); ?> var label = ''<?php echo $_attributeLabel;?>''; $$(''select.kevin-black-''+label).each(function(elem){ var options = elem.childElements(); options[0].update(''Select '' + label); }); <?php endforeach;?> } </script> <?php endif;?>

y agrega una línea changeFristText(); después de la línea 171 ( element.options[0] = new Option(this.config.chooseText, ''''); ) en el archivo js / varien / configurable.js

Es para todo el conjunto de atributos.


Esto funcionó para mí en CE 1.8.1. Se basa en la respuesta de Shein y aborda la opción incorrecta de ser seleccionado en la carga. Básicamente, simplemente copié / pegué el Product.Config. método fillSelect () de /js/varien/product.js . Dentro del código pegado, cambié:

element.options[0].innerHTML = this.config.chooseText;

a

element.options[0].innerHTML = element.config.label;

Esto permite mantener product.js sin modificar, y simplemente anular el método. El único inconveniente es que cualquier actualización básica futura de ese método deberá migrar.

Dado que el nuevo código solo obtiene la configuración de "etiqueta", el atributo de datos-elegir-texto no es necesario en la etiqueta de selección

<?php $_product = $this->getProduct(); $_attributes = Mage::helper(''core'')->decorateArray($this->getAllowAttributes()); ?> <?php if ($_product->isSaleable() && count($_attributes)):?> <dl> <?php foreach($_attributes as $_attribute): ?> <dt><label class="required"><em>*</em><?php echo $_attribute->getLabel() ?></label></dt> <dd<?php if ($_attribute->decoratedIsLast){?> class="last"<?php }?>> <div class="input-box"> <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select"> <option><?php echo $_attribute->getLabel() ?></option> </select> </div> </dd> <?php endforeach; ?> </dl> <script type="text/javascript"> Product.ConfigDefaultText = new Class.create(Product.Config, { fillSelect: function (element) { var attributeId = element.id.replace(/[a-z]*/, ''''); var options = this.getAttributeOptions(attributeId); this.clearSelect(element); element.options[0] = new Option('''', ''''); element.options[0].innerHTML = element.config.label; var prevConfig = false; if (element.prevSetting) { prevConfig = element.prevSetting.options[element.prevSetting.selectedIndex]; } if (options) { var index = 1; for (var i = 0; i < options.length; i++) { var allowedProducts = []; if (prevConfig) { for (var j = 0; j < options[i].products.length; j++) { if (prevConfig.config.allowedProducts && prevConfig.config.allowedProducts.indexOf(options[i].products[j]) > -1) { allowedProducts.push(options[i].products[j]); } } } else { allowedProducts = options[i].products.clone(); } if (allowedProducts.size() > 0) { options[i].allowedProducts = allowedProducts; element.options[index] = new Option(this.getOptionLabel(options[i], options[i].price), options[i].id); element.options[index].config = options[i]; index++; } } } } }); var spConfig = new Product.ConfigDefaultText(<?php echo $this->getJsonConfig() ?>); </script> <?php endif;?>


Amplié la clase Product.Config (método fillselect) con estos códigos:

fillSelect: function(element){ var attributeId = element.id.replace(/[a-z]*/, ''''); var options = this.getAttributeOptions(attributeId); this.clearSelect(element); element.options[0] = new Option(''Select ''+element.config.label,''''); ........

¡Está bien!


Mi versión del mismo problema. Solo necesita cambiar el catálogo / producto / vista / tipo / opciones / configurable.phtml de la plantilla:

<?php $_product = $this->getProduct(); $_attributes = Mage::helper(''core'')->decorateArray($this->getAllowAttributes()); ?> <?php if ($_product->isSaleable() && count($_attributes)):?> <dl> <?php foreach($_attributes as $_attribute): ?> <dt><label class="required"><em>*</em><?php echo $_attribute->getLabel() ?></label></dt> <dd<?php if ($_attribute->decoratedIsLast){?> class="last"<?php }?>> <div class="input-box"> <?php $chooseText = $this->__(''Select %s'', $_attribute->getLabel()); ?> <select data-choose-text="<?php echo $chooseText; ?>" name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select"> <option><?php echo $chooseText; ?></option> </select> </div> </dd> <?php endforeach; ?> </dl> <script type="text/javascript"> Product.ConfigDefaultText = new Class.create(Product.Config, { fillSelect: function($super, element) { $super(element); var chooseDefaultText = element.getAttribute(''data-choose-text''); $(element).options[0] = new Option(chooseDefaultText, ''''); } }); var spConfig = new Product.ConfigDefaultText(<?php echo $this->getJsonConfig() ?>); </script> <?php endif;?>

Nota (extraída de los comentarios) Si el valor predeterminado seleccionado no es "Seleccionar% s", reemplace

$(element).options[0] = new Option(chooseDefaultText, '''');

con

$(element).options[0].innerHTML = chooseDefaultText;