You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PrestaShop 1.7下基于Knowband Marketplace模块实现用户自定义制造商

实现PrestaShop 1.7 Knowband Marketplace模块自定义制造商创建功能

Alright, let's tackle this custom manufacturer creation feature for your Knowband Marketplace module in PrestaShop 1.7. I've broken down the steps to match the backend "Manufacturers & Brands" page logic, so users can either select an existing manufacturer or type in a new one to create it on the fly.

1. 修改前端商品提交模板

首先,我们需要把静态的制造商下拉框替换成支持自动补全现有制造商、同时允许输入新名称的输入组件。

找到模块的商品提交模板(通常路径为 modules/knowband_marketplace/views/templates/front/product_submit.tpl),定位到制造商下拉框部分,替换为以下代码:

<div class="form-group mb-3">
    <label class="fw-bold">{l s='Manufacturer' mod='knowband_marketplace'}</label>
    <input type="text" 
           name="manufacturer_name" 
           id="manufacturer_name" 
           class="form-control" 
           placeholder="{l s='Enter manufacturer name or select from suggestions' mod='knowband_marketplace'}">
    <input type="hidden" name="manufacturer_id" id="manufacturer_id" value="">
</div>

{* 为现有制造商添加jQuery自动补全功能 *}
<script>
$(document).ready(function() {
    $('#manufacturer_name').autocomplete({
        minLength: 2,
        source: function(request, response) {
            $.ajax({
                url: '{$link->getAdminLink('AdminManufacturers')|escape:'html':'UTF-8'}',
                method: 'GET',
                data: {
                    ajax: 1,
                    action: 'searchManufacturer',
                    query: request.term
                },
                dataType: 'json',
                success: function(data) {
                    response($.map(data, function(item) {
                        return {
                            label: item.name,
                            value: item.id_manufacturer
                        };
                    }));
                }
            });
        },
        select: function(event, ui) {
            $('#manufacturer_id').val(ui.item.value);
            $('#manufacturer_name').val(ui.item.label);
            return false;
        },
        focus: function(event, ui) {
            $('#manufacturer_name').val(ui.item.label);
            return false;
        }
    });
});
</script>

这样用户既能享受和后台一致的自动补全体验,也能输入新的制造商名称。

2. 更新后端商品提交控制器

接下来,修改模块的商品提交控制器,处理用户提交的新制造商名称,实现“不存在则创建”的逻辑。

找到控制器文件(通常路径为 modules/knowband_marketplace/controllers/front/ProductSubmitController.php),在保存商品之前添加以下逻辑:

// 引入Manufacturer类(根据PrestaShop版本调整命名空间)
use PrestaShop\PrestaShop\Core\Product\Manufacturer;

// 获取用户提交的制造商数据
$manufacturerName = trim(Tools::getValue('manufacturer_name'));
$manufacturerId = (int) Tools::getValue('manufacturer_id');

// 验证并处理制造商信息
if (!empty($manufacturerName)) {
    // 检查制造商名称格式是否合法
    if (!Validate::isGenericName($manufacturerName)) {
        $this->errors[] = $this->module->l('Invalid manufacturer name. Please use a valid name.', 'productsubmitcontroller');
    } elseif (strlen($manufacturerName) > 64) {
        $this->errors[] = $this->module->l('Manufacturer name cannot exceed 64 characters.', 'productsubmitcontroller');
    } else {
        // 检查制造商是否已存在
        $existingManufacturerId = Manufacturer::getIdByName($manufacturerName);
        if ($existingManufacturerId) {
            $manufacturerId = $existingManufacturerId;
        } elseif (empty($manufacturerId)) {
            // 创建新制造商
            $newManufacturer = new Manufacturer();
            $newManufacturer->name = $manufacturerName;
            $newManufacturer->active = 1; // 默认设置为激活状态

            if (!$newManufacturer->add()) {
                $this->errors[] = $this->module->l('Failed to create the manufacturer. Please try again.', 'productsubmitcontroller');
            } else {
                $manufacturerId = $newManufacturer->id;
            }
        }
    }
}

// 将制造商ID关联到商品(如果无有效制造商则设为0)
$product->id_manufacturer = $manufacturerId ?: 0;

3. 添加错误提示与用户反馈

确保前端模板能显示后端返回的错误信息,比如在表单顶部添加以下代码:

{if $errors}
    <div class="alert alert-danger">
        {foreach from=$errors item=error}
            <p>{$error}</p>
        {/foreach}
    </div>
{/if}

这样用户在输入非法名称或制造商创建失败时,能及时看到提示。

4. 全面测试功能

完成代码修改后,务必测试所有场景:

  • 选择现有制造商:验证商品是否正确关联到该制造商
  • 输入新制造商名称:检查后台是否创建了新制造商,且商品已关联
  • 输入非法名称:确认错误提示正常显示
  • 不同用户角色测试(如果模块有权限控制):确保允许创建制造商的用户能正常使用该功能

内容的提问来源于stack exchange,提问作者fakejack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:30:02