<?php
/**
* PHPCMS 栏目数据迁移到 UJCMS 脚本(适配 ujcms_channel 表)
* 注意:执行前务必备份 UJCMS 数据库!
*/
// 1. 基础配置
$phpcms_db = [
'host' => '127.0.0.1',
'user' => 'root',
'pwd' => '',
'dbname' => 'test2',
'charset' => 'utf8mb4'
];
$ujcms_db = [
'host' => '127.0.0.1',
'user' => 'root',
'pwd' => '',
'dbname' => 'test3',
'charset' => 'utf8mb4'
];
$default_config = [
'site_id_' => 1,
'channel_model_id_' => 12,
'article_model_id_' => 11,
'performance_type_id_' => null,
'default_alias_prefix' => 'cat_'
];
// 2. 数据库连接
function connectDB($config) {
$conn = mysqli_connect(
$config['host'],
$config['user'],
$config['pwd'],
$config['dbname']
);
if (!$conn) die("数据库连接失败:" . mysqli_connect_error());
mysqli_set_charset($conn, $config['charset']);
return $conn;
}
$phpcms_conn = connectDB($phpcms_db);
$ujcms_conn = connectDB($ujcms_db);
// 3. 关键调整:临时关闭UJCMS外键约束(避免子栏目先导入的问题)
mysqli_query($ujcms_conn, "SET FOREIGN_KEY_CHECKS = 0");
// 4. 获取UJCMS最大ID(避免主键冲突)
$max_id_sql = "SELECT IFNULL(MAX(id_), 0) as max_id FROM ujcms_channel";
$max_id_result = mysqli_query($ujcms_conn, $max_id_sql);
$max_id_row = mysqli_fetch_assoc($max_id_result);
$new_id = $max_id_row['max_id'] + 1;
// 5. 读取PHPCMS栏目(按层级排序:先一级,再二级...)
// 先查所有启用的栏目,再按层级排序
$phpcms_sql = "SELECT * FROM co_category ORDER BY parentid ASC, catid ASC";
$phpcms_result = mysqli_query($phpcms_conn, $phpcms_sql);
if (mysqli_num_rows($phpcms_result) == 0) die("PHPCMS无可用栏目");
// 6. 数据迁移(记录ID映射)
$migrate_success = 0;
$migrate_fail = 0;
$fail_list = [];
$id_map = []; // 存储:PHPCMS的catid → UJCMS的新id_
while ($row = mysqli_fetch_assoc($phpcms_result)) {
// 1. 处理别名(确保唯一)
$base_alias = !empty($row['catdir'])
? strtolower(preg_replace('/[^a-zA-Z0-9_]/', '', $row['catdir']))
: $default_config['default_alias_prefix'] . $row['catid'];
$check_alias_sql = "SELECT COUNT(*) as count FROM ujcms_channel WHERE alias_ = '{$base_alias}' AND site_id_ = '{$default_config['site_id_']}'";
$check_result = mysqli_query($ujcms_conn, $check_alias_sql);
$check_row = mysqli_fetch_assoc($check_result);
if ($check_row['count'] > 0) $base_alias .= '_' . rand(100, 999);
// 2. 字段映射(关键:父ID用映射后的UJCMS新ID)
$channel_data = [
'id_' => $row['catid'], // 用UJCMS自增新ID,避免冲突
'site_id_' => $default_config['site_id_'],
// 父ID转换为UJCMS的新ID(如果父栏目已迁移)
'parent_id_' => isset($id_map[$row['parentid']]) ? $id_map[$row['parentid']] : null,
'channel_model_id_' => $default_config['channel_model_id_'],
'article_model_id_' => $default_config['article_model_id_'],
'performance_type_id_' => $default_config['performance_type_id_'],
'name_' => mysqli_real_escape_string($ujcms_conn, $row['catname']),
'alias_' => mysqli_real_escape_string($ujcms_conn, $base_alias),
'seo_title_' => null,
'seo_keywords_' => null,
'seo_description_' => null,
'type_' => $row['type'] == 1 ? 2 : 1,
'article_template_' => 'article',
'channel_template_' => 'channel',
'channel_static_path_' => null,
'image_' => null,
'link_url_' => null,
'process_key_' => null,
'target_blank_' => '0',
'book_' => '0',
'real_' => '1',
'nav_' => '1',
'page_size_' => 20,
'order_desc_' => '1',
'allow_comment_' => '1',
'allow_contribute_' => '0',
'allow_search_' => '1',
'mains_json_' => null,
'clobs_json_' => null,
'created_' => date('Y-m-d H:i:s'),
'modified_' => date('Y-m-d H:i:s'),
'depth_' => 1,
'order_' => $row['sort'] ?: 999999,
'views_' => 0,
'self_views_' => 0
];
// 3. 插入UJCMS
$insert_sql = "INSERT INTO ujcms_channel (
id_, site_id_, parent_id_, channel_model_id_, article_model_id_,
performance_type_id_, name_, alias_, seo_title_, seo_keywords_,
seo_description_, type_, article_template_, channel_template_,
channel_static_path_, image_, link_url_, process_key_, target_blank_,
book_, real_, nav_, page_size_, order_desc_, allow_comment_,
allow_contribute_, allow_search_, mains_json_, clobs_json_,
created_, modified_, depth_, order_, views_, self_views_
) VALUES (
'{$channel_data['id_']}',
'{$channel_data['site_id_']}',
" . ($channel_data['parent_id_'] === null ? "NULL" : "'{$channel_data['parent_id_']}'") . ",
'{$channel_data['channel_model_id_']}',
'{$channel_data['article_model_id_']}',
" . ($channel_data['performance_type_id_'] === null ? "NULL" : "'{$channel_data['performance_type_id_']}'") . ",
'{$channel_data['name_']}',
'{$channel_data['alias_']}',
" . ($channel_data['seo_title_'] === null ? "NULL" : "'{$channel_data['seo_title_']}'") . ",
" . ($channel_data['seo_keywords_'] === null ? "NULL" : "'{$channel_data['seo_keywords_']}'") . ",
" . ($channel_data['seo_description_'] === null ? "NULL" : "'{$channel_data['seo_description_']}'") . ",
'{$channel_data['type_']}',
" . ($channel_data['article_template_'] === null ? "NULL" : "'{$channel_data['article_template_']}'") . ",
" . ($channel_data['channel_template_'] === null ? "NULL" : "'{$channel_data['channel_template_']}'") . ",
" . ($channel_data['channel_static_path_'] === null ? "NULL" : "'{$channel_data['channel_static_path_']}'") . ",
" . ($channel_data['image_'] === null ? "NULL" : "'{$channel_data['image_']}'") . ",
" . ($channel_data['link_url_'] === null ? "NULL" : "'{$channel_data['link_url_']}'") . ",
" . ($channel_data['process_key_'] === null ? "NULL" : "'{$channel_data['process_key_']}'") . ",
'{$channel_data['target_blank_']}',
'{$channel_data['book_']}',
'{$channel_data['real_']}',
'{$channel_data['nav_']}',
'{$channel_data['page_size_']}',
'{$channel_data['order_desc_']}',
'{$channel_data['allow_comment_']}',
'{$channel_data['allow_contribute_']}',
'{$channel_data['allow_search_']}',
" . ($channel_data['mains_json_'] === null ? "NULL" : "'{$channel_data['mains_json_']}'") . ",
" . ($channel_data['clobs_json_'] === null ? "NULL" : "'{$channel_data['clobs_json_']}'") . ",
'{$channel_data['created_']}',
'{$channel_data['modified_']}',
'{$channel_data['depth_']}',
'{$channel_data['order_']}',
'{$channel_data['views_']}',
'{$channel_data['self_views_']}'
)";
if (mysqli_query($ujcms_conn, $insert_sql)) {
$migrate_success++;
// 记录ID映射:PHPCMS的catid → UJCMS的新id_
$id_map[$row['catid']] = $channel_data['id_'];
} else {
$migrate_fail++;
$fail_list[] = "栏目【{$row['catname']}】导入失败:" . mysqli_error($ujcms_conn);
}
}
// 7. 恢复外键约束
mysqli_query($ujcms_conn, "SET FOREIGN_KEY_CHECKS = 1");
// 8. 输出结果
echo "===== 迁移结果 =====\n";
echo "成功导入:{$migrate_success} 个栏目\n";
echo "导入失败:{$migrate_fail} 个栏目\n";
if (!empty($fail_list)) {
echo "失败详情:\n";
foreach ($fail_list as $fail) echo "- {$fail}\n";
}
// 9. 关闭连接
mysqli_close($phpcms_conn);
mysqli_close($ujcms_conn);
?>
phpcms迁移ujcms,栏目迁移
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 发现问题 不知道你们是否遇到过这样的问题,比如下面这个图。 点击成人教育这个栏目,再点击首页时候还是在这个页面(前...
- phpcms分页URL地址栏目路径重复现象示例:http://localhost/catname/catname/...
- 一、源网站的准备工作 1. 备份数据库 登录网站管理后台,在“扩展”菜单下的“数据库工具”中的“请选择数据链接池”...
- 在使用易优cms时,遇到栏目页或者内容页二级栏目导航和三级栏目导航分开调用时,标签如何调用呢?先在公用函数文件里加...