Magento 2 HTML in der UI-Komponentenrasterspalte

8

Ich möchte einen Link zur Bestellung im UI-Komponentenraster für meine benutzerdefinierte Protokolltabelle hinzufügen.

Ich konnte erfolgreich in Zeilen Protokollnachricht mit teilen

       $item[$this->getData('name')] = html_entity_decode(nl2br($item[$this->getData('name')]));

Dieser Ansatz funktioniert jedoch nicht für Anker:

public function prepareDataSource(array $dataSource)
{
    if (isset($dataSource['data']['items'])) {
        foreach ($dataSource['data']['items'] as & $item) {
            if (array_key_exists('order_id', $item) && !empty($item['order_id'])) {
                try {
                    if ($order = $this->orderRepository->get($item['order_id'])) {
                        $url = $this->storeManager->getStore()->getUrl('sales/order/view', ['order_id' => $order->getEntityId()]);
                        $item[$this->getData('name')] = html_entity_decode("<a href=\"$url\">" . $order->getIncrementId() . "</a>");
                    }
                } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {

                }

            }


        }
    }

    return $dataSource;
}

im Raster sieht aus wie http://i.imgur.com/aA86VlK.png

Gibt es eine Möglichkeit, HTML-Entitäten im UI-Komponentenraster nicht zu umgehen?

pankijs
quelle

Antworten:

17
    <column name="order" class="Vendor\OrderExport\Ui\Component\Listing\Column\VendorLog\OrderId">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                <item name="label" xsi:type="string" translate="true">Order ID</item>
            </item>
        </argument>
    </column>

Festlegen der Body-Vorlage für ein Problem mit Zellenbehebung: <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>

pankijs
quelle
-2

Ich war vor einigen Tagen in der gleichen Ausgabe getroffen worden, nachdem ich einige Zeit gegraben hatte, konnte ich die Ausgabe lösen. Den Code finden Sie unten.

<?php

 namespace Evry\Creditlimit\Ui\Component\Listing\Grid\Column;

  use Magento\Framework\View\Element\UiComponent\ContextInterface;
  use Magento\Framework\View\Element\UiComponentFactory;
  use Magento\Ui\Component\Listing\Columns\Column;
  use Magento\Framework\UrlInterface;
  use \Magento\Sales\Api\Data\OrderInterface;




 class Action extends Column 
 {

    /** Url path */
    const ROW_EDIT_URL = 'sales/order/view/';
    /** @var UrlInterface */

    protected $_urlBuilder;
    protected $_orderRepository;
    protected $_storeManager;

   /**
   * @var string
   */
   private $_editUrl;


   public function __construct(
    ContextInterface $context,
    UiComponentFactory $uiComponentFactory,
    UrlInterface $urlBuilder,
    OrderInterface $orderRepository,
    StoreManagerInterface $storeManager,
    array $components = [],
    array $data = [],
    $editUrl = self::ROW_EDIT_URL
) 
{
    $this->_urlBuilder = $urlBuilder;
    $this->_editUrl = $editUrl;
    $this->_orderRepository = $orderRepository;
    $this->_storeManager = $storeManager;
    parent::__construct($context, $uiComponentFactory, $components, $data);
}

/**
 * Prepare Data Source.
 *
 * @param array $dataSource
 *
 * @return array
 */
public function prepareDataSource(array $dataSource)
{
   if (isset($dataSource['data']['items'])) {
    foreach ($dataSource['data']['items'] as & $item) {
        try {
                if ($order = $this->_orderRepository->loadByIncrementId($item['order_id'])) {
                    $url = $this->_urlBuilder->getUrl($this->_editUrl,['order_id' => $order->getEntityId()]);      
                    $item[$this->getData('name')] = html_entity_decode("<a href=\"$url\" target=\"_blank\">" . $item['order_id'] . "</a>");
                }
            } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {

            }
        }
      }

    return $dataSource;
  }

}
nitin hawaldar
quelle
Ihre Antwort ist genau die gleiche wie Frage, außerdem zeigt dies
Ankertag
@arushi: Du hast wahrscheinlich etwas aus dem Code verpasst. Bitte überprüfen Sie die folgende URL. Ich benutze den gleichen Code und es funktioniert wie erwartet ibb.co/hyAdak
nitin hawaldar