這段內容討論了在 Joomla! 內容管理系統中,定義和管理“內容”(content)的復雜性和不確定性,尤其是當涉及到跨站點同步或遷移內容時。以下是內容的詳細解釋:
1. 內容定義的模糊性
-
問題的起點:內容的定義非常寬泛(loose),這導致了許多問題(a source of a lot of grief)。
-
嘗試定義內容:假設將內容定義為“由 Joomla! 內置的文章組件(com_content)管理的任何文章”。這個定義看似合理,但實際上并不充分,因為它忽略了內容的復雜性和多維度。
2. 內容的復雜性
2.1 媒體文件
-
媒體文件的多樣性:
-
文章可以包含一個或多個媒體文件(如圖片、視頻)。
-
有些媒體文件可能通過“媒體字段”(如文章縮略圖和正文圖片)鏈接到文章,這些容易被識別。
-
其他媒體文件可能嵌入在 HTML 內容中,可能有或沒有元數據,這使得程序化發現變得困難。
-
-
文件的歷史問題:
-
文件不是數據庫記錄,沒有歷史記錄,因此無法確定它們是新增的、修改過的還是之前就存在的。
-
如果遠程站點(site B)與本地站點(site A)不在同一網絡中,就無法知道遠程站點是否也有這些文件。
-
2.2 分類和權限
-
分類的復雜性:
-
文章屬于分類,分類有訪問級別和權限,這些權限依賴于用戶組。
-
無法確定兩個站點上是否存在相同的分類、訪問級別和用戶組,也無法確定它們的 ID 映射關系。
-
-
權限的復雜性:
-
用戶組是組件級別基礎權限的容器,每個分類都可以為每個用戶組提供不同的權限。
-
這使得權限管理變得極其復雜,尤其是當分類和用戶組的層級結構不同。
-
2.3 自定義字段
-
自定義字段的復雜性:
-
文章可以有自定義字段,這些字段可以屬于自定義字段組。
-
自定義字段和字段組與特定組件和分類相關聯,而每個自定義字段的值又與特定文章相關聯。
-
這導致了多維度的復雜性,很難確定哪些內容是新增的或修改過的,尤其是在無法與遠程站點通信的情況下。
-
2.4 用戶和權限
-
用戶和權限的關聯:
-
文章、分類、自定義字段等都與用戶相關聯,因為 Joomla! 需要知道誰創建、修改或簽出了這些內容。
-
兩個站點之間沒有用戶映射關系,也無法查詢遠程站點的用戶信息。
-
2.5 權限存儲問題
-
權限存儲的復雜性:
-
權限存儲在
#__assets表中,這是一個樹形結構。 -
無法直接將一個站點的權限記錄移植到另一個站點,即使有完整的分類、用戶組、訪問級別和用戶 ID 映射,也需要定制代碼來處理。
-
2.6 標簽和 UCM
-
標簽的復雜性:
-
標簽不是以文本形式存儲,而是以 ID 形式存儲。
-
需要知道每個站點上哪些標簽 ID 對應哪些標簽文本,才能確定是否有新增或修改的標簽。
-
-
UCM 的復雜性:
-
Joomla! 有一個名為 UCM(Universal Content Model)的輔助結構,用于處理標簽、歷史記錄和智能搜索。
-
需要知道 UCM 的狀態和屬性,這些屬性不會出現在用戶界面中,但可能會影響內容的變更。
-
2.7 格式化和模板
-
CSS 格式化問題:
-
文章的格式可能依賴于模板中的 CSS。
-
無法期望這種格式化能夠在兩個站點之間自動遷移。
-
2.8 擴展和跨鏈接
-
擴展內容的復雜性:
-
文章可能包含來自其他擴展的內容,例如跨鏈接到特定菜單項、組件的深層鏈接、插件短代碼或嵌入模塊。
-
確定哪些內容是新的或修改過的,需要分析兩個站點上安裝的所有擴展及其內容定義。
-
這幾乎是不可能的,因為每個擴展都需要定制代碼來處理。
-
3. 跨站點內容遷移的困難
-
問題的演變:
-
Joomla! 1.5 時,內容遷移相對簡單,只要處理媒體文件、分類名稱匹配和站點間通信即可。
-
Joomla! 1.6 引入了自定義權限、用戶組、訪問級別和嵌套分類,問題變得更加復雜。
-
Joomla! 3.2 引入標簽后,問題進一步復雜化。
-
Joomla! 3.7 引入自定義字段后,確定哪些內容是新的或修改過的變得完全不可預測,使得開發可用的解決方案變得幾乎不可能。
-
4. 解決方案的局限性
-
人工處理的必要性:
-
由于內容的定義和變更檢測是非確定性的,人工手動決定哪些內容是新的或修改過的,并手動在兩個網絡隔離的站點之間遷移,可能是唯一可行的方法。
-
-
完整克隆的局限性:
-
如果只需要站點 A 的完整克隆,可以備份整個站點并恢復到站點 B,但這需要手動傳輸備份文件,因為站點 B 的網絡與互聯網完全隔離。
-
5. 問題的普遍性
-
其他 CMS 的類似問題:
-
這個問題不僅存在于 Joomla!,WordPress 也存在類似問題。
-
作者推測,基于 Drupal 的內容組織方式(內容圖節點)和對 Drupal 7 的了解,Drupal 也可能存在類似問題。
-
-
內容管理的普遍挑戰:
-
一旦內容不僅僅是簡單的文本,而是包含多種元素(如媒體文件、自定義字段、權限、標簽等),確定什么是內容以及它是否發生了變化就變得越來越困難。
-
總結
這段內容強調了在 Joomla! 中,內容的定義和管理極其復雜,尤其是在跨站點遷移或同步時。由于內容的多維度和依賴關系,很難確定哪些內容是新的或修改過的,這使得自動化解決方案幾乎不可能實現。作者認為,人工干預可能是唯一可行的解決方案,除非接受站點 A 的完整克隆。





