<?php
/**
* PHPCMS 欄目數(shù)據(jù)遷移到 UJCMS 腳本(適配 ujcms_channel 表)
* 注意:執(zhí)行前務必備份 UJCMS 數(shù)據(jù)庫!
*/
// 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. 數(shù)據(jù)庫連接
function connectDB($config) {
$conn = mysqli_connect(
$config['host'],
$config['user'],
$config['pwd'],
$config['dbname']
);
if (!$conn) die("數(shù)據(jù)庫連接失?。? . mysqli_connect_error());
mysqli_set_charset($conn, $config['charset']);
return $conn;
}
$phpcms_conn = connectDB($phpcms_db);
$ujcms_conn = connectDB($ujcms_db);
// 3. 關鍵調(diào)整:臨時關閉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. 數(shù)據(jù)遷移(記錄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轉(zhuǎn)換為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. 輸出結(jié)果
echo "===== 遷移結(jié)果 =====\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,欄目遷移
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內(nèi)容
- 發(fā)現(xiàn)問題 不知道你們是否遇到過這樣的問題,比如下面這個圖。 點擊成人教育這個欄目,再點擊首頁時候還是在這個頁面(前...
- {pc:content action="category" catid="0" num="25" siteid="...
- phpcms分頁URL地址欄目路徑重復現(xiàn)象示例:http://localhost/catname/catname/...
- 一、源網(wǎng)站的準備工作 1. 備份數(shù)據(jù)庫 登錄網(wǎng)站管理后臺,在“擴展”菜單下的“數(shù)據(jù)庫工具”中的“請選擇數(shù)據(jù)鏈接池”...
- 在使用易優(yōu)cms時,遇到欄目頁或者內(nèi)容頁二級欄目導航和三級欄目導航分開調(diào)用時,標簽如何調(diào)用呢?先在公用函數(shù)文件里加...