Question

In my below pattern, slugs are saved like $parent_slug . '_' . url_title($posted_category_name).

So if id_category = 1's slug changes, in example Acura => My acura, it means all subs slugs must be changed in accordance, yet again with $parent_slug . '_' . url_title($posted_category_name) during the loop... But how?

After below I array I added my recursive function.

data array

Array
(
    [0] => Array
        (
            [id_category] => 1
            [id_parent] => 0
            [level] => 1
            [category] => Acura
            [slug] => acura
            [children] => Array
                (
                    [0] => Array
                        (
                            [id_category] => 3
                            [id_parent] => 1
                            [level] => 2
                            [category] => Vigor
                            [slug] => acura_vigor
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id_category] => 5
                                            [id_parent] => 3
                                            [level] => 3
                                            [category] => LS
                                            [slug] => acura_vigor_ls
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id_category] => 6
                                                            [id_parent] => 5
                                                            [level] => 4
                                                            [category] => Alt 1
                                                            [slug] => acura_vigor_ls_alt-1
                                                        )

                                                    [1] => Array
                                                        (
                                                            [id_category] => 7
                                                            [id_parent] => 5
                                                            [level] => 4
                                                            [category] => Alt 2
                                                            [slug] => acura_vigor_ls_alt-2
                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

)

rebuild_category_slug_index($target_map)

  function rebuild_category_slug_index($target_table)
  {
    $active_table = tr_url_title($target_table);
    $this->db->table_exists('my_'.$active_table ) || show_error(lang('admin|erros|table_not_found'),'500',lang('admin|errors|header500'));

    $raw_data = $this->category_m->get('my_'.$active_table,array(),$order_str='id_category asc, id_parent asc',array(),'result_array'); // It just returns get all from table.

    if($raw_data)
    {
      $treearr = array('0' => array('children'=> array()));
      foreach($raw_data as $item)
      {
        // Here is the work. I should get $parent_slug and create current slug.
        // $item['slug'] = $parent_slug . '_' . tr_url_title($item['category']);
        $treearr[$item['id_category']] = $item;
        if(!isset($treearr[$item['id_parent']])) $treearr[$item['id_parent']] = array('children'=> array());
        $treearr[$item['id_parent']]['children'][] = &$treearr[$item['id_category']];
      }
      $tree = $treearr[0]['children'];
      unset($treearr);
      vdebug($tree); // For displaying formatted results
      //return $tree;
    }
  }

I am stacked with this, any light is appreciated.

Était-ce utile?

La solution

I would pull the data-recovery out of the function, or create a new recursive function. Just something to get you started:

function recursive_rename($data, $parent_slug='')
  {
  foreach($data as $item)
    {
    // Set the $parent_slug
    if($imen['level'] = 1)
      {
      $item['slug'] = $item['category'];
      if ($parent_slug == '' || $parent_slug <> $item['category'])
        {
        $parent_slug = $item['category']
        }
      }
    else
      {
      $item['slug'] =  $parent_slug."_".$item['category'];
      }
    if(isset($item[children])) 
      {
     // call function again
      $out =  recursive_rename($item['children'],  $item['slug']);
      }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top