1

商品ページの[オプションを選択]ドロップダウンに属性ラベルを追加しようとしていますが、他の属性を追加する可能性があるため、ハードコーディングせずに、たとえば[サイズの選択]または[選択]を表示したいと思います。色" 。

私はいろいろなフォーラムからいくつかのコードを試してみましたが、それを機能させることができないようです-アイデアや提案された拡張機能

configuration.phtmlのコアコードは次のとおりです。

 <?php
 $_product    = $this->getProduct();
 $_attributes = Mage::helper('core')->decorateArray($this->getAllowAttributes());

?>

isSaleable()&& count($ _ attributes)):?>
    <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 $this->__('Choose Option')?></option> 
              </select>
          </div>
    </dd>
<?php endforeach; ?>
</dl>

var spConfig = new Product.Config(getJsonConfig()?>);

</script> 
4

3 に答える 3

1

問題は、フロントエンドのJavascriptがオプションテキストを変更し、PHPがそれを修正できないことです。

ただし、フロントエンドコードでできることはたくさんあります。

サイズなど、予測可能なオプションが1つしかない場合は、次のようにすることができます。

<script type="text/javascript">
    var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
    // if only one drop down then set it to 'choose size'. If 'One Size' set value and hide
    if($$('select.super-attribute-select').length==1) {
        $$('select.super-attribute-select')[0].options[0].update('Choose Size');
        if($$('select.super-attribute-select')[0].options.length==2) {
            $$('select.super-attribute-select')[0].options[1].selected=true;
            $$('select.super-attribute-select')[0].up().hide();
        }
    }
</script>

サイズが1つしかない場合も、これによりドロップダウンが非表示になります。

このアプローチを拡張してドロップダウンで機能させるには、ページから各ドロップダウンのラベル値を取得する必要があります。

    $$('select.super-attribute-select').each(function(element) {
    element.options[0].update('CHOOSE ' + element.up().up().previous().down().innerHTML.replace(/(<([^>]+)>)/ig,"").replace(/\*/g, '').toUpperCase());
    if(element.options.length==2) {
        element.options[1].selected=true;
        element.up().up().up().hide();
        }
    });
于 2012-09-27T14:17:35.853 に答える
1

先週、私は実際にここで簡単な解決策についてブログを書きました。面倒なので、コアコードを拡張したくありませんでした。要するに、これが私が思いついたものです:


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

<?php
$jsonConfig = json_decode($this->getJsonConfig());
$jsonConfig->chooseText = 'Select ' . $_attribute->getLabel();
?>

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

興味があれば、私のブログ投稿にはもう少し背景情報があります。

于 2012-09-27T18:26:41.960 に答える
0

前のスニペットは、製品ページの単一のドロップダウン属性の解決策にすぎません。複数のドロップダウン属性の解決策は次のとおりです。

まず、次のようにオプションタグのマークアップを編集します(app / design / frontend / [package] / [theme] /template/catalog/product/view/type/options/configurable.phtml):

<option><?php echo $this->__('Choose %s...', $_attribute->getLabel()) ?></option>

ドロップダウンアイテムはフロントエンドでJavaScriptを使用して作成されるため、JSON構成の属性ごとに最初のオプションの文字列を追加する必要があります。したがって、スーパー属性(上記と同じファイル)を繰り返し処理します。

<script type="text/javascript">
   <?php
   $jsonConfig = json_decode($this->getJsonConfig());
   if (!empty($jsonConfig->attributes)) {
       foreach ($jsonConfig->attributes as $key => $attribute) {
           $jsonConfig->attributes->$key->chooseText = $this->__('Choose %s...', $attribute->label);
       }
   }
   ?>
   var spConfig = new Product.Config(<?php echo json_encode($jsonConfig); ?>);
</script>

これでJSONが拡張されますが、MagentoJSはエントリを使用しません。したがって、172行目のファイルjs / varien/configurable.jsを変更する必要があります。これを変更します。

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

の中へ:

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

これで、ドロップダウンの変更後、ページごとに複数のスーパー属性に対して、ページの読み込み時に適切なオプションラベルが表示されます。

于 2015-09-10T14:06:19.803 に答える