我正在制作类似WordPress的分类系统管理。
正如您在我的数据库中看到的,如果我删除(或更新删除为1)类别。它的所有孩子都从列表中消失了。
但这不会发生在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 " ";
}
?>
-- <?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”,没有任何数据库查询。使用爆炸并做任何事情