Как отобразить значение пользовательского атрибута в виде метки на странице списка продуктов magento 2


Как отобразить значение пользовательского атрибута в виде метки на странице списка продуктов Magento 2.

Я использую помощник для отображения значения пользовательского атрибута в углу страницы списка товаров каждого изображения в качестве метки. Я получаю значение, но первое значение пользовательского атрибута приходит для всего, что неправильно.

Пожалуйста, проверьте, где я делаю ошибку - список продуктов отображается в виде сетки.

Страница помощника по данным Data.php

namespace Satish\Addaction\Helper;

use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Catalog\Model\Product as ModelProduct;
use Magento\Store\Model\Store;
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;

class Data extends \Magento\Framework\Url\Helper\Data
{

    /**
     * @var TimezoneInterface
     */
    protected $localeDate;

    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Framework\ObjectManagerInterface $objectmanager,
        \Magento\Catalog\Model\ProductFactory $_productloader,

        TimezoneInterface $localeDate
    ) {
        $this->localeDate = $localeDate;
        $this->_objectManager = $objectmanager;
        $this->_productloader = $_productloader;

        parent::__construct($context);
    }

    public function getRecommendedValue($pid)
    {
        $product = $this->_objectManager->get('Magento\Catalog\Model\Product')->load($pid);
        return $product->getFree_test_label();
    } 

}

Ниже приведена страница phtml

<style>
    .discount-percent{
    position: absolute;
    top: 0;
    right: 0;
    text-align: right;
    z-index: 999;
    background-color: red;
    color: white;
    width: 25%;
    border-radius: 25%;
    padding-right: 2%;
}

</style>
<?php /** @var $block \Magento\Catalog\Block\Product\Image */
$helper = $this->helper('Satish\Addaction\Helper\Data');
 ?>

<span class="product-image-container"
      style="width:<?= /* @escapeNotVerified */ $block->getWidth() ?>px;">
    <span class="product-image-wrapper"
          style="padding-bottom: <?= /* @escapeNotVerified */ ($block->getRatio() * 100) ?>%;">
        <img class="product-image-photo"
            <?= /* @escapeNotVerified */ $block->getCustomAttributes() ?>
            src="<?= /* @escapeNotVerified */ $block->getImageUrl() ?>"
            width="<?= /* @escapeNotVerified */ $block->getResizedImageWidth() ?>"
            height="<?= /* @escapeNotVerified */ $block->getResizedImageHeight() ?>"
            alt="<?= /* @escapeNotVerified */ $block->stripTags($block->getLabel(), null, true) ?>"/></span>
</span>
<div class="discount-percent">
    <?=  $helper->getRecommendedValue($block->getProductId()) ?>
</div> 
Author: PЯINCƏ, 2019-12-07

1 answers

  1. Сделайте эту конфигурацию в своем пользовательском атрибуте : Admin -> Stores -> Attributes -> Product > Select your attribute -> Storefront Properties -> Set "Used in Product Listing" to Yes

  2. Переиндексировать все

  3. В вашем product/list.phtml :

    <?php foreach ($_productCollection as $_product): ?>
        ...
        <div class="discount-percent">
            <?= $_product->getFreeTestLabel(); ?>
        </div>
    <?php endforeach; ?>
    

    Или:

    Этикетка :

    $_product->getResource()->getAttribute('free_test_label')->getStoreLabel();
    

    Ценность :

    $_product->getResource()->getAttribute('free_test_label')->getFrontend()->getValue($_product);
    
 2
Author: PЯINCƏ, 2019-12-07 17:06:52