在prestashop模块配置页面中的categoryChoiceTree。

问题描述 投票:0回答:1

我正在开发一个prestashop模块,我想在我的后台配置页面显示一个分类树。

我试图按照下面的说明进行操作,但我不知道在哪里添加。这段代码。

应该在主模块的php里面吗,还是单独的一个.php文件里面,从主模块里面调用(也不知道怎么做)。

我看到 "使用 "文件和这个JS,"admin-devthemesnew-themejscomponentsformchoice-tree.js "不在任何prestashop文件夹中。

php module tree prestashop
1个回答
0
投票

好吧,你应该投入一些时间,学习Symfony,因为这是你需要为Prestashop 1.7建立后端模块。

作为一个指针,你需要创建一个扩展CommonAbstractType的表单类,添加一个构建表单的方法,例如:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $this->context = Context::getContext();
        $parents = [
          ['id_category' => 2, 'name' => 'Home', 'children' => $this->getSubCategories(1, true, 2)]
        ];

        $builder->add('category', CategoryChoiceTreeType::class, [
            'choices_tree' => $parents,
            'choice_value' => 'id_category',
            'choice_children' => 'children',
            'choice_label' => 'name',
            'disabled_values' => $disabledCategories,
            'label' => 'Choose a category'
        ])

然后添加检索数据的方法来填充表单字段。

然后在你的控制器中使用这个类并显示表单。

$form = $this->createForm(YourFormForm::class);

同时添加一个processForm来处理数据

如前所述,这不是一个复制粘贴的情况,你需要了解Symfony的工作流程。


0
投票

我发现唯一能在配置页中 "画 "出分类树的方法就是在输入表单数组中添加这段代码。

谁能告诉我如何把用户的选择数据检索到我的数据库中? 它不能像其他表单字段一样工作。

array(
                            'type' => 'categories',
                            'label' => $this->l('Destination Category'),
                            'desc' => $this->l('Select ONE Category'),
                            'name' => 'CATEGORY_CATEGORY_TO',
                            'tree' => [
                                // 'selected_categories' => [],
                                'disabled_categories' => null,
                                'use_search' => false,
                                'use_checkbox' => false,
                                'id' => 'id_category_tree',
                            ],
                            'required' => true
                        ),

0
投票

好了,它被解决了!!! 最后,这是非常简单的,但你必须为你的特定情况下获得正确的信息.@Robertino的答案可能是最好的实现,我不知道,但对我来说,它变得不可能解决。

我使用下面这段代码,并从表单输入中调用$categoryTree。这个输入必须是 type=> categories_select

谢谢你的时间,也谢谢本论坛另一个帖子的帮助。

$root = Category::getRootCategory();

    //Generating the tree
    $tree = new HelperTreeCategories('categories_1'); //The string in param is the ID used by the generated tree
    $tree->setUseCheckBox(false)
        ->setAttribute('is_category_filter', $root->id)
        ->setRootCategory($root->id)
        ->setSelectedCategories(array((int)Configuration::get('CATEGORY_1'))) //if you wanted to be pre-carged
        ->setInputName('CATEGORY_1'); //Set the name of input. The option "name" of $fields_form doesn't seem to work with "categories_select" type
    $categoryTree = $tree->render();

还有表格。

                    array(
                    'type'  => 'categories_select',
                    'label' => $this->l('Category'),
                    'desc' => $this->l('Select Category '),
                    'name'  => 'CATEGORY_1', //No ho podem treure si no, no passa la variable al configuration
                    'category_tree'  => $categoryTree, //This is the category_tree called in form.tpl
                    'required' => true
© www.soinside.com 2019 - 2024. All rights reserved.