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

PrestaShop 1.7.8.8中TranslatableType自定义字段的WYSIWYG编辑器异常

PrestaShop 1.7.8.8 分类多语言字段WYSIWYG编辑器修复方案

问题背景

在搭配Elementor插件的PrestaShop 1.7.8.8系统中,为分类新增名为「页脚描述(Description footer)」的多语言字段后,字段无法正常加载WYSIWYG编辑器,当前站点启用4种语言。原实现代码如下:

use PrestaShopBundle\Form\Admin\Type\FormattedTextareaType;
use PrestaShopBundle\Form\Admin\Type\TranslatableType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;

public function hookActionCategoryFormBuilderModifier(array $params)
{
    /** @var \Symfony\Component\Form\FormBuilder $formBuilder */
    $formBuilder = $params['form_builder'];
    $locales = $this->get('prestashop.adapter.legacy.context')->getLanguages(); 
 
    $formBuilder->add('description_footer',
        TranslatableType::class,
        [
            'label' => $this->l('Description footer'),
            'type' => FormattedTextareaType::class,
            'required' => false,
            'locales' => $locales
        ]
    );

    $category = new Category((int)$params['id']);
    $params['data']['description_footer'] = $category->description_footer;
 
    $formBuilder->setData($params['data']);
}

实际效果:字段仅显示普通文本框,无WYSIWYG编辑器界面。
字段无WYSIWYG编辑器显示效果

问题原因

原代码未给FormattedTextareaType传递WYSIWYG启用参数,数据赋值逻辑存在潜在冲突,且使用了不推荐的legacy方式获取语言列表,导致编辑器无法初始化。

修复方案

1. 修改表单构建代码

替换为以下代码,补充编辑器初始化参数并优化逻辑:

use PrestaShopBundle\Form\Admin\Type\FormattedTextareaType;
use PrestaShopBundle\Form\Admin\Type\TranslatableType;
use PrestaShop\PrestaShop\Core\Locale\LocaleRetrieverInterface;

public function hookActionCategoryFormBuilderModifier(array $params)
{
    /** @var \Symfony\Component\Form\FormBuilderInterface $formBuilder */
    $formBuilder = $params['form_builder'];
    /** @var LocaleRetrieverInterface $localeRetriever */
    $localeRetriever = $this->get('prestashop.core.locale.locale_retriever');
    $locales = $localeRetriever->getLocales();

    // 添加多语言WYSIWYG字段
    $formBuilder->add('description_footer', TranslatableType::class, [
        'label' => $this->l('页脚描述'),
        'type' => FormattedTextareaType::class,
        'required' => false,
        'locales' => $locales,
        'options' => [
            'wysiwyg' => true,
            'editor' => 'tinymce',
            'attr' => [
                'class' => 'autoload_rte',
            ],
        ],
    ]);

    // 安全赋值现有数据
    $category = new Category((int)$params['id']);
    $formData = $formBuilder->getData();
    $formData['description_footer'] = $category->description_footer;
    $formBuilder->setData($formData);
}

2. 确保数据库字段存在

多语言字段需存储在ps_category_lang表中,执行以下SQL(替换ps_为你的数据库前缀):

ALTER TABLE `ps_category_lang` ADD `description_footer` TEXT NULL DEFAULT NULL AFTER `description`;

关键修复点说明

  • 通过options参数给FormattedTextareaType传递wysiwyg: true和autoload_rte类,强制初始化TinyMCE编辑器。
  • 使用官方推荐的LocaleRetrieverInterface获取语言列表,替代legacy context调用,提升版本兼容性。
  • 优化数据赋值逻辑,先获取原有表单数据再修改,避免覆盖其他字段的默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:17:47