gpt4 book ai didi

Prestashop 自定义管理模块可拖动排序/顺序不起作用

转载 作者:行者123 更新时间:2023-12-01 23:45:56 27 4
gpt4 key购买 nike

我正在为 Prestashop 1.6 构建一个非常简单的模块,并添加了一个允许列出我的记录的管理界面,一个用于添加、编辑和删除的表单。

正如您在此处看到的那样,这工作正常:
enter image description here

问题是可拖动的重新排序按钮不可拖动。因此重新排序不起作用...

根据official docs ,如果您在 Controller 中设置位置选项,您将获得可拖动功能:

['position'] => 'position', // If set to position, the field will display arrows and be drag and droppable, which will update position in db (optional).

这是我的模块 Controller 的相关部分:
$this->fields_list = array(
'id_quicklinks' => array(
'title' => $this->l('ID'),
'align' => 'center',
'width' => 25
),
'titulo' => array(
'title' => $this->l('Titulo'),
'width' => 'auto'
)
, 'lead' => array(
'title' => $this->l('Subtitulo'),
'width' => 'auto'
),
'position' => array(
'title' => $this->l('Ordem'),
'filter_key' => 'a!position',
'position' => 'position',
'align' => 'center',
'class' => 'fixed-width-md'
),
'active' => array(
'title' => $this->l('Publicado'),
'width' => '25',
'active' => 'status'
)
);

正如您在打印屏幕中看到的那样,它显示了句柄,但拖放不起作用。控制台上没有 javascript 错误,什么都没有……我可以在源代码中看到 jQuery 和 jQueryUI 已加载。其他具有重新排序功能的管理页面工作正常...

有任何想法吗?
谢谢。

最佳答案

好吧,如果有人感兴趣,我设法让它工作。

在我的模块管理 Controller 中,我添加了(在 __construct 方法之前,在打开类之后):

protected $position_identifier = 'id_quicklinks';
  • id_quicklinks是该模块使用的数据库表的主键。

  • 这启用了我正在寻找的拖放功能,但尽管我现在可以拖放,但订单并未保存在数据库中。

    为此,我添加了另外两种改编自 controllers/admin/AdminCarriersController.php 的方法。和 classes/Carrier.php :
    public function ajaxProcessUpdatePositions()
    {
    $way = (int)Tools::getValue('way');
    $id_quicklinks = (int)Tools::getValue('id');
    $positions = Tools::getValue('quicklinks');

    if (is_array($positions))
    foreach ($positions as $position => $value)
    {
    $pos = explode('_', $value);

    if (isset($pos[2]) && (int)$pos[2] === $id_velcroquicklinks)
    {
    if (isset($position) && $this->updatePosition($way, $position, $id_quicklinks))
    echo 'ok position '.(int)$position.' for id '.(int)$pos[1].'\r\n';
    else
    echo '{"hasError" : true, "errors" : "Can not update id '.(int)$id_quicklinks.' to position '.(int)$position.' "}';

    break;
    }
    }

    }

    和:
    public function updatePosition($way, $position, $id)
    {

    if (!$res = Db::getInstance()->executeS('
    SELECT `id_quicklinks`, `position`
    FROM `'._DB_PREFIX_.'quicklinks`
    ORDER BY `position` ASC'
    ))
    return false;

    foreach ($res as $quicklinks)
    if ((int)$quicklinks['id_quicklinks'] == (int)$id)
    $moved_quicklinks = $quicklinks;

    if (!isset($moved_quicklinks) || !isset($position))
    return false;
    var_dump($moved_quicklinks['position']);
    // < and > statements rather than BETWEEN operator
    // since BETWEEN is treated differently according to databases
    return (Db::getInstance()->execute('
    UPDATE `'._DB_PREFIX_.'quicklinks`
    SET `position`= `position` '.($way ? '- 1' : '+ 1').'
    WHERE `position`
    '.($way
    ? '> '.(int)$moved_quicklinks['position'].' AND `position` <= '.(int)$position
    : '< '.(int)$moved_quicklinks['position'].' AND `position` >= '.(int)$position.'
    '))
    && Db::getInstance()->execute('
    UPDATE `'._DB_PREFIX_.'quicklinks`
    SET `position` = '.(int)$position.'
    WHERE `id_quicklinks` = '.(int)$moved_quicklinks['id_quicklinks']));
    }

    我希望这可以帮助有同样问题的人。

    关于Prestashop 自定义管理模块可拖动排序/顺序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29221564/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com