从多级别类别或菜单列表中删除项目

时间:2017-09-09 09:12:18

标签: php mysql wordpress categories sql-delete

我正在制作类似WordPress的分类系统管理。

正如您在我的数据库中看到的,如果我删除(或更新删除为1)类别。它的所有孩子都从列表中消失了。

Database

删除前 - > Before delete category list

删除后 - > After delete category list

但这不会发生在WordPress案例中。它删除所选类别并将其子项分配给已删除类别的父项。 我也想这样做。

步骤1 - >获取将被删除的类别的父级。

步骤2 - >使用我们将从步骤1获得的id更新所选类别的所有子项的父项字段。

步骤3 - >删除所选类别。

我是对的吗? 有没有其他方式或更短的方法来做到这一点?

我认为wordpress id做同样的事情 来自taxonomy.php wordpress文件的评论(函数wp_delete_term)

/**
         * Fires immediately after a term to delete's children are reassigned a parent.
         *
         * @since 2.9.0
         *
         * @param array $edit_tt_ids An array of term taxonomy IDs for the given term.
         */

解决方法,可以帮助其他一些用户或开发者,如果您有任何其他或其他解决方案,请告诉我。

从数据库中获取类别 - >

数组“m”存储正确的短路类别。

“m2”将Parent Cat id存储为密钥,将其Child ID存储为值。

if (!function_exists('_get_categories')) {

function _get_categories($key = 0, $parent = 'term_parent', $db_key = 'term_id', $child = 'children', $child_id = 'children_id') {

  $CI =& get_instance();

  $m = array();
  $m1 = array();

                                    $cat_query   = $CI->db->get_where('terms', array(
            'term_active' => 1,
            'term_delete' => 0,
            'term_type' => 'category'
        ));
     $input_data = $cat_query->result_array();


  foreach ($input_data as $data) {
    if($data['term_parent']==-null)
    {
    $data['term_parent']=0; 
    }

    if(!isset($m[$data[$parent]])) 
    {
        $m[$data[$parent]] = array();

    }


    if(!isset($m[$data[$db_key]]))
    {
         $m[$data[$db_key]] = array();

    }

    if(isset($m1[$data['term_parent']][$child_id]))
    {
    $m1[$data['term_parent']][$child_id] = $m1[$data['term_parent']][$child_id].','.$data['term_id'];
    }
    else{
        $m1[$data['term_parent']][$child_id] = ','.$data['term_id'];
    }

    $m[$data[$parent]][] = array_merge($data, array($child => &$m[$data[$db_key]]));

}

return(array($m[$key],$m1));

}

}

现在正确打印类别列表 - >

function nested($data,$child_ids,$level,$urls) {

  if (sizeof($data) > 0) {

    foreach ($data as $entry) {
    $childern_ids ="";
    if(isset($child_ids[$entry['term_id']]['children_id']))
    {
        $childern_ids = $child_ids[$entry['term_id']]['children_id'];
    }

     ?>
<tr role="row" class="odd">
                                        <td>
                                            <label>
                                            <?php echo form_checkbox('category_active_table_checkbox_singal[]',$entry['term_id'].','.$entry['term_parent'].''.$childern_ids, false, array('class'=>'category_active_table_checkbox_singal')); ?>
                                            </label>
                                        </td>
                                        <td class="sorting_1">
                                        <?php

         for($i=1;$i<$level;$i++)
         {
             echo "&nbsp;&nbsp;&nbsp;&nbsp;";
         }

        ?>
        -- <?php echo $entry['term_name']; ?></td>
                                        <td>
                                            <?php echo $entry['term_time']; ?></td>
                                        <td>
                                           <a href="<?php echo $urls['category_edit_url'].'?category_id='.$entry['term_id']; ?>">Edit</a>
                                        </td>
                                    </tr>       
                                    <?php
        nested($entry['children'],$child_ids,$level+1,$urls);

    }

  }


}



nested($active_category_records[0],$active_category_records[1],1,$urls);

这里嵌套的函数参数。 1.数据(返回m),2。子数组(返回m1),3。空间级别,4。我的自定义需求

处理文件 - &gt; (删除文件)

 $category_ids        = $this->input->post('category_active_table_checkbox_singal[]');
        $action_type     = $this->input->post('table_multi_action_active_category_action_type');
        $from_hidden_url = $this->input->post('return_url');


       $cat_array = explode(",", $category_ids[0]);
      echo $cat_id = $cat_array[0];
       echo $cat_parent_id = $cat_array[1];


$data = array(
       'term_parent' => $cat_parent_id
);
$where = array (
'term_parent' => $cat_id
);

$this->Category_model->category_update($data,$where);

$data1 = array(
       'term_delete' => 1,
       'term_active' => 0
);
$where1 = array (
'term_id' => $category_ids[0]
);
$this->Category_model->category_update($data1,$where1);

在这里你可以做任何你想做的事情,扭曲这里你也得到“父ID”及其“儿童ID”,没有任何数据库查询。使用爆炸并做任何事情

0 个答案:

没有答案