Generieren Sie den get-Parameter im XML-Layout Admin

7

Ich habe eine benutzerdefinierte Erweiterung, die ein Raster mit XML generiert. Das Problem besteht darin, dass ich eine Schaltfläche hinzufügen muss, die einen Link mit einem get-Parameter aus einer über url übermittelten get-Anforderung generiert. Der XML-Code für eine Schaltfläche wie diese sieht folgendermaßen aus:

<item name="buttons" xsi:type="array">
            <item name="sync" xsi:type="array">
                <item name="name" xsi:type="string">sync</item>
                <item name="label" xsi:type="string">Sync All</item>
                <item name="class" xsi:type="string">primary</item>
                <item name="url" xsi:type="string">test_test/test/massSync/post_id/#id</item>
            </item>
        </item>

Die Schaltfläche stellt eine Verbindung zum massSync-Controller her und ich muss die post_id hinzufügen, die in der aktuellen URL des Fensters wie folgt vorhanden ist:

http://test.com/admin/test_test/test/index/post_id/1
Shell Suite
quelle

Antworten:

0

AFAIK Sie können dies nicht direkt in der XML tun, Sie müssen einen benutzerdefinierten Block verwenden, um dies zu tun:

<item name="buttons" xsi:type="array">
    <item name="sync" xsi:type="string">Vendor\Module\Block\Adminhtml\My\Custom\Button</item>
</item>

Erstellen Sie dann die entsprechende Vendor\Module\Block\Adminhtml\My\Custom\Button.phpDatei mit folgendem Inhalt:

<?php

namespace Vendor\Module\Block\Adminhtml\My\Custom;

use Magento\Backend\Block\Widget\Context;
use Magento\Framework\View\Element\UiComponent\Control\ButtonProviderInterface;

class Button implements ButtonProviderInterface 
{
    /**
     * @var Context
     */
    protected $context;

    /**
     * @param Context $context
     */
    public function __construct(
        Context $context
    ) {
        $this->context = $context;
    }

    /**
     * @return array
     */
    public function getButtonData()
    {
        $data = [];
        if ($this->getPostId()) {
            $data = [
                'id' => 'sync',
                'label' => __('Sync All'),
                'class' => 'primary',
                'url' => $this->getSyncUrl()
            ];
        }
        return $data;
    }

    /**
     * @return string
     */
    public function getSyncUrl()
    {
        return $this->getUrl('test_test/test/massSync', ['post_id' => $this->getPostId()]);
    }

    /**
     * @return int
     */    
    public function getPostId()
    {
        return $this->context->getRequest()->getParam('post_id');
    }
}
Raphael beim digitalen Pianismus
quelle