如何在Prestashop AdminController中自定义RowAction的操作?

时间:2016-12-26 10:26:28

标签: php prestashop

我覆盖了AdminCartRulesControllerCore,我向AdminCartRulesController添加了一个Row Action,并且工作正常。

$this->addRowAction('Generate');

但我不知道如何定义当我按下“Generate”时将调用的Action。我知道使用以下方法创建链接:

public function displayGeneratetLink($token, $id, $name = null) {
    return '<a href="#" class="download" title="test"><i class="icon-cloud-upload"></i> ' . ($this->l('Export')) . '</a>';
}

在我的情况下,我不需要重定向。我需要一个可以在没有任何重定向的情况下执行的函数。

2 个答案:

答案 0 :(得分:1)

以下示例是添加一个名为&#39; approve&#39;的新操作。到帮助者列表:

您可以在管理员控制器的构造函数中添加以下代码行。

$this->addRowAction('approve');

您的initProcess()函数应具有以下代码:

public function initProcess()
    {
        parent::initProcess();
        if (Tools::getIsset('approve' . $this->table)) {
            $this->action = 'approveAction';
        }
    }

然后你必须在同一个控制器中定义一个名为processApproveAction()的函数。

public function processApproveAction()
{
--- YOUR CODE HERE ---
}

希望这有帮助。

答案 1 :(得分:0)

您可以执行自己的操作列。

您应在select中添加行标识符字段:

$this->_select = ' a.id_order AS id_pdf';

然后,您可以在field list

中添加此新字段
$this->fields_list = array(
            /*other fields here*/
            'id_pdf' => array(
                'title' => $this->l('Actions'),
                'width' => 35,
                'align' => 'center',
                'callback' => 'printPDFIcons',
                'orderby' => false,
                'search' => false,
                'remove_onclick' => true)
        );

最后,您必须实施printPDFIcons功能。 $ id_order将是您的标识符,$ tr是包含所有行数据的数组:

    public function printPDFIcons($id_order, $tr)
    {
        $route_to_pdf = 'for example: route to a pdf file to download it';
        if ($route_to_pdf)
            return '<span class="btn-group-action">
                        <span class="btn-group">
                            <a class="btn btn-default" target="_blank" title="' . $this->l('Label PDF') . '" href="' . $route_to_pdf . '">
                                <i class="icon-print"></i>
                            </a>
                        </span>
                    </span>';
        else
            return '';
    }

如果要在单击自定义按钮时执行某些操作,则应显示指向自己AdminController的链接,并将Action参数作为Generate标识符传递给postProcess。然后使用private static Point location = null; private void MyForm_Move(object sender, EventArgs e) { location = this.Location; } private void MyForm_Load(object sender, EventArgs e) { if (location != null) { this.Location = location; } } 函数执行您的特定代码。

祝你好运。