私はたくさんのstufを試しましたが、どれもうまくいきません。商品ページでカスタム属性を取得できると思いますが、ショッピングカートページでカスタム属性を取得するにはどうすればよいでしょうか。 (属性は単純なテキストです)
$_item->getProduct()->load()
は、データベースからすべての製品データを再読み込みします。これは機能しますが、load()
を呼び出すたびにMagentoがデータベースクエリを実行することに注意してください。
見積もり項目と一緒に属性をロードすることで、同じことがはるかに優れたパフォーマンスで実行できます。カスタムモジュールを作成し、これをconfig.xmlに追加するだけです。
<global>
<sales>
<quote>
<item>
<product_attributes>
<one_custom_attribute_code />
<another_custom_attribute_code />
</product_attributes>
</item>
</quote>
</sales>
</global>
これを行うと、追加のデータベースクエリなしでカスタム属性にアクセスできます。
$_item->getProduct()->getAnotherCustomAttributeCode();
これに関する記事は次のとおりです。 https://www.atwix.com/magento/accessing-custom-attribute-at-checkout-or-cart/
カスタムオプションまたは単純な属性について話しているのですか?
単純な属性(テキスト):
(default.phtml内)
<?php $_item = $this->getItem()?>
<?php $_product= Mage::getSingleton('catalog/product')->load($_item->getProductId()) ?>
<?php echo $_product->getResource()->getAttribute('attribute_code')->getFrontend()->getValue($_product); ?>
私はこれを使いました
(app/design/frontend/default/your_theme/template/checkout/cart/item/default.phtml
)
私の(テキストフィールド)属性の場合:
<?php
$_item = $this->getItem();
$_product = $_item->getProduct()->load();
?>
<?php echo $_product->getCustomAttribute(); ?>
これは最善の方法ではありません。属性(magento/admin)で次のオプションを設定できます。
チェックアウトで表示
したがって、属性は
$_options Array ($_options = $this->getOptionList()) (in checkout/cart/item/default.phtml)
属性(配列$_option
) お気に入り:
array(4) { ["label"]=> string(10) "Lieferzeit" ["value"]=> string(8) "2-3 Tage" ["print_value"]=> string(8) "2-3 Tage" ["code"]=> string(13) "delivery_time" }
このようにして、データベースに再度接続する必要がなくなり、パフォーマンスを最適化できます。
表示オプションリストから選択された属性:
変更:app/design/frontend/base/default/template/checkout/cart/item/default.phtml
$_customOptions = $_item->getProduct()->getTypeInstance(true)->getOrderOptions($_item->getProduct());
foreach($_customOptions['attributes_info'] as $_option){ echo option['label']; }
考えられる方法の1つは、singletonデザインパターンを使用することです。属性を取得する方法は次のとおりです。
$_item = $this->getItem();
$_product= Mage::getSingleton('catalog/product')->load($_item->getProductId());
echo $attrValue=$_product->getAttributeText('attrCode');
以下を実行して、カスタム製品属性(この場合は製品ビューページの保証製品属性)を表示できます。
ステップ1: MagentoバックエンドのSTORES->Attributes->Product
の下に新しい属性「保証」を作成します。商品リストとビューページに表示する属性を作成するときに、ストアフロントプロパティの[フロントエンドの商品ビューページに表示]オプションと[商品リストで使用]オプションの値を「はい」に設定します。
ステップ2:新しい属性「保証」をSTORES->Attributes->Attribute
セットで設定されたデフォルトの属性に割り当てます。
ステップ3:これで、製品の作成中に属性が表示されます。あなたはあなたが望むどんな価値も与えることができます。
ステップ4:catalog_product_view.xml
ファイルを編集し、以下の内容を更新します。このセクションは、product.info.main
コンテナ内に追加できます。 product.info.overview
ブロックの横にブロックを追加できます。そのため、簡単な説明の横に表示されます。
<block class="Magento\Catalog\Block\Product\View\Description" name="product.info.demo" template="product/view/demo.phtml" after="-">
<arguments>
<argument name="at_call" xsi:type="string">getWarranty</argument>
<argument name="at_code" xsi:type="string">warranty</argument>
<argument name="css_class" xsi:type="string">warranty </argument>
<argument name="at_label" xsi:type="string">warranty </argument>
<argument name="add_attribute" xsi:type="string">itemprop="warranty "</argument>
</arguments>
</block>
ステップ5: mageno2root/vendor/magento/module-catalog/view/frontend/templates/product/viewの下に以下の内容の新しいファイルwarranty.phtml
を作成します。
<?php
$_helper = $this->helper('Magento\Catalog\Helper\Output');
$_product = $block->getProduct();
$_code = $block->getAtCode();
$_className = $block->getCssClass();
$_attributeLabel = $block->getAtLabel();
$_attributeType = $block->getAtType();
$_attributeAddAttribute = $block->getAddAttribute();
if ($_attributeLabel && $_attributeLabel == 'default') {
$_attributeLabel = $_product->getResource()->getAttribute($_code)->getFrontendLabel();
}
$_attributeValue =$_product->getResource()->getAttribute($_code)->getFrontend()->getValue($_product);
?>
<?php if ($_attributeValue): ?>
<div class="product attibute <?php echo $_className?>">
<?php if ($_attributeLabel != 'none'): ?><strong class="type"><?php echo $_attributeLabel?></strong><?php endif; ?>
<div class="value" <?php echo $_attributeAddAttribute;?>><?php echo $_attributeValue; ?></div>
</div>
<?php endif; ?>
すべての貢献に続いて、私は最初の答えを取り、magentoの周りに疑問を抱きました。
Load()を再度作成する必要がない解決策を見つけました。次のパスでファイルconfig.xmlを編集しました。
app/code/core/Mage/Sales/etc/config.xml
アイテム/商品属性にカスタム属性を追加しました
<item>
<product attributes>
<sku/>
<type_id/>
<my_custom_attribute_id/>
次に、cart.phtmlファイルで、次を使用するだけで属性を取得できました。
$_item->getProduct()->getmy_custom_attribute_id();
これが最善か正しいかはわかりませんが、問題は確実に解決しました。
乾杯
<?php $_product= Mage::getSingleton('catalog/product')->load($_item->getProductId()) ?>
<?php echo $_product->getResource()->getAttribute('attribute_code')->getFrontend()->getValue($_product); ?>