Trong thế giới phức tạp của Sitecore, việc quản lý layout một cách hiệu quả là yếu tố then chốt để xây dựng trải nghiệm người dùng (UX) nhất quán và linh hoạt. Bài viết này sẽ đi sâu vào quy trình di chuyển các **renderings** giữa **Final Layout** và **Shared Layout**, giúp bạn tối ưu hóa quy trình làm việc và đảm bảo tính nhất quán trên toàn bộ website. Chúng ta sẽ khám phá các phương pháp thủ công lẫn sử dụng Sitecore PowerShell Extensions (SPE) để thực hiện các tác vụ này một cách dễ dàng và hiệu quả.
Trước khi đi vào chi tiết, điều quan trọng là phải nắm vững sự khác biệt giữa **Final Layout** và **Shared Layout**. **Shared Layout** định nghĩa cấu trúc cơ bản của một trang, áp dụng cho tất cả các phiên bản ngôn ngữ. Trong khi đó, **Final Layout** cho phép tùy chỉnh giao diện cho từng phiên bản ngôn ngữ cụ thể. Việc hiểu rõ sự khác biệt này giúp bạn đưa ra quyết định đúng đắn về việc nên đặt rendering ở đâu.
Sử dụng **Final Layout** khi bạn muốn một rendering hiển thị khác nhau tùy thuộc vào ngôn ngữ hoặc phiên bản. Ví dụ: bạn có thể muốn hiển thị một banner khuyến mãi khác nhau cho người dùng nói tiếng Anh và tiếng Pháp. Hoặc có những trường hợp A/B testing, khi bạn cần những thay đổi riêng cho một số trang con cụ thể.
**Shared Layout** phù hợp cho các rendering cần hiển thị giống nhau trên tất cả các phiên bản ngôn ngữ. Ví dụ: header, footer, và các thành phần điều hướng thường được đặt trong **Shared Layout** để đảm bảo tính nhất quán trên toàn bộ website. Điều này cũng giúp đơn giản hóa việc bảo trì và cập nhật.
Phương pháp thủ công là cách đơn giản nhất để di chuyển renderings, đặc biệt khi bạn chỉ cần thực hiện trên một vài trang. Phương pháp này liên quan đến việc sao chép giá trị raw XML từ trường **Final Renderings** sang trường **Renderings** (Shared Layout).
Sau khi thực hiện các bước trên, hãy kiểm tra lại trang của bạn trong Experience Editor để đảm bảo rằng các rendering đã được di chuyển thành công sang **Shared Layout**.
Đối với các website lớn với số lượng trang lớn, việc di chuyển renderings thủ công có thể tốn rất nhiều thời gian và công sức. **Sitecore PowerShell Extensions (SPE)** cung cấp các công cụ mạnh mẽ để tự động hóa quy trình này.
Lệnh `Merge-Layout` trong SPE sẽ tự động di chuyển tất cả thông tin layout từ trường **FinalLayout** sang trường **SharedLayout**, đồng thời xóa dữ liệu trong trường **FinalLayout**.
Ví dụ:
Lưu ý: Thay đổi đường dẫn item cho phù hợp với cấu trúc website của bạn.
Đôi khi, bạn chỉ muốn di chuyển một vài renderings cụ thể, không phải toàn bộ layout. SPE cũng cung cấp các hàm tùy chỉnh để thực hiện việc này.
Dưới đây là một ví dụ về hàm PowerShell để di chuyển một rendering cụ thể:
function Copy-RenderingToSharedLayout {
param (
[string]$itemPath,
[string]$renderingId
)
# Get the target item
$item = Get-Item -Path $itemPath
if (-not $item) {
Write-Host "Item not found at path: $itemPath"
return
}
# Access the default layout device
$defaultLayout = Get-LayoutDevice -Default
# Get renderings from the Final layout
$finalRenderings = Get-Rendering -Item $item -Device $defaultLayout -FinalLayout
# Get renderings from the Shared layout
$sharedRenderings = Get-Rendering -Item $item -Device $defaultLayout
# Find the rendering to move
$renderingToMove = $finalRenderings | Where-Object {$_.ItemId -eq $renderingId}
if (-not $renderingToMove) {
Write-Host "Rendering '$renderingName' not found in Final Layout."
return
}
#add rendering to the Shared layout
$renderingToMove | ForEach-Object {
$parameters = Convert-StringToHashTable -parameters $_.Parameters
Add-Rendering -Item $item -PlaceHolder $_.Placeholder -Instance $_ -Parameter $parameters
}
#remove rendering from the Final layout
$renderingToBeRemoved = Get-Item -Path "master:" -ID $renderingId
Remove-Rendering -Item $item -Rendering $renderingToBeRemoved -Device $defaultLayout -FinalLayout
#add rendering again to the Final layout
$renderingToMove | ForEach-Object {
$parameters = Convert-StringToHashTable -parameters $_.Parameters
Add-Rendering -Item $item -PlaceHolder $_.Placeholder -Instance $_ -Parameter $parameters -FinalLayout
}
}
Copy-RenderingToSharedLayout -itemPath "/sitecore/content/Home/MyProject/Home/Test" -renderingId "{669223AE-10E7-468F-B538-C3CDF44A672A}"
Bạn có thể sử dụng hàm này để di chuyển các rendering cụ thể bằng cách chỉ định đường dẫn item và ID rendering.
Việc quản lý layout trong Sitecore đòi hỏi sự hiểu biết sâu sắc về **Final Layout** và **Shared Layout**. Bằng cách sử dụng các phương pháp thủ công và tự động hóa với **Sitecore PowerShell Extensions (SPE)**, bạn có thể tối ưu hóa quy trình làm việc, đảm bảo tính nhất quán trên toàn bộ website và mang lại trải nghiệm người dùng tốt nhất.
Bài viết liên quan