0

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.

1 Answer 1

1

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']);
      }
Sign up to request clarification or add additional context in comments.

4 Comments

Ferweda I played a lot with the function.. It works for one level down perfectly. But In level 3, it takes level 1 slug as parent slug only. Code pastebin.com/U0ZdyyEJ and result prntscr.com/1xnps6
it is ok, I edited a litte bit more. pastebin.com/PEH3Wkq8 Thank you for your light!
key is to pass the current slug into the recursive function. As I do not have a server on this machine, I cannot create working version for you at the mo., without a lot of deep thinking about the logic :)
No need, I pasted edited code for who need it later. You already helped me to solve the issue. I accepted your answer. Thank you again..

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.