2015-05-22 1 views
0

Я создаю модуль prestashop, который должен выбрать 2 категории root.Prestashop - добавить несколько деревьев категорий с вспомогательной формой

Я попытался добавить 2 поля типа «категории», но на дереве второй категории он имеет тот же ID и тот же ИМЯ, что и первое дерево.

$fields_form[1]['form'] = array(
    'legend' => array(
     'title' => $this->l('Setting'), 
    ), 
    'input' => array(  
     array(
      'type' => 'text', 
      'label' => $this->l('First column title'), 
      'name' => 'HCA_TITLE_COL1', 
     ), 
     array(
      'type' => 'categories', 
      'label' => $this->l('Root category'), 
      'desc' => $this->l('Root category of the first column.'), 
      'name' => 'HCA_CAT_COL1', 
      'tree' => array(
       'id' => 'HCA_CAT_COL1', 
       'selected_categories' => array((int)Configuration::get('HCA_CAT_COL1')), 
      ) 
     ), 
     array(
      'type' => 'text', 
      'label' => $this->l('Second column title'), 
      'name' => 'HCA_TITLE_COL2', 
     ), 
     array(
      'type' => 'categories', 
      'label' => $this->l('Root category'), 
      'desc' => $this->l('Root category of the second column.'), 
      'name' => 'HCA_CAT_COL2', 
      'tree' => array(
       'id' => 'HCA_CAT_COL2', 
       'selected_categories' => array((int)Configuration::get('HCA_CAT_COL2')), 
      ) 
     ), 
    ) 
); 

ответ

4

Вот решение, которое я нашел после прочтения админ \ Themes \ умолчанию \ шаблон \ хелперов \ форма \ form.tpl

В этом файле есть это условие

{elseif $input.type == 'categories_select'} 
    {$input.category_tree} 

Итак, я использовал 'type' = 'categories_select' вместо 'type' = 'categories', и я сгенерировал деревья категорий вручную.

$root = Category::getRootCategory(); 

//Generating the tree for the first column 
$tree = new HelperTreeCategories('categories_col1'); //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('HCA_CAT_COL1'))) 
    ->setInputName('HCA_CAT_COL1'); //Set the name of input. The option "name" of $fields_form doesn't seem to work with "categories_select" type 
$categoryTreeCol1 = $tree->render(); 

//Generating the tree for the second column 
$tree = new HelperTreeCategories('categories_col2'); 
$tree->setUseCheckBox(false) 
    ->setAttribute('is_category_filter', $root->id) 
    ->setRootCategory($root->id) 
    ->setSelectedCategories(array((int)Configuration::get('HCA_CAT_COL2'))) 
    ->setInputName('HCA_CAT_COL2'); 
$categoryTreeCol2 = $tree->render(); 


$fields_form[1]['form'] = array(
    'legend' => array(
     'title' => $this->l('Setting'), 
    ), 
    'input' => array(  
     array(
      'type' => 'text', 
      'label' => $this->l('First column title'), 
      'name' => 'HCA_TITLE_COL1', 
     ), 
     array(
      'type' => 'categories_select', 
      'label' => $this->l('Root category'), 
      'desc' => $this->l('Root category of the first column.'), 
      'name' => 'HCA_CAT_COL1', 
      'category_tree' => $categoryTreeCol1 //This is the category_tree called in form.tpl 
     ), 
     array(
      'type' => 'text', 
      'label' => $this->l('Second column title'), 
      'name' => 'HCA_TITLE_COL2', 
     ), 
     array(
      'type' => 'categories_select', 
      'label' => $this->l('Root category'), 
      'desc' => $this->l('Root category of the second column.'), 
      'name' => 'HCA_CAT_COL2', 
      'category_tree' => $categoryTreeCol2 
     ), 
    ) 
); 
0

вы можете использовать этот

array(
    'type' => 'html', 
... 
    'html_content' => $categoryTreeCol1 
0

Для фиксации не отображающее ярлык на INIT, добавить setFullTree (истинный)

$tree->setUseCheckBox(true) 
     ->setAttribute('is_category_filter', $root->id) 
     ->setRootCategory($root->id) 
     ->setFullTree(true) 
     ->setSelectedCategories($selected_categories) 
     ->setInputName('associated_categories');