Điểm:0

Update Alias Programmatically

lá cờ us

I have a large website with 240 urls that need to be updated. I would like to do this programmatically to avoid making errors. I created the following function which seems to work. There seems to be a good bit of complexity here for what I am trying to accomplish. Is there a simplier way to update the url of a node?

function alias_replace($path, $lang, $new_alias) {

  $path_alias_manager = \Drupal::entityTypeManager()->getStorage('path_alias');

  $alias_objects = $path_alias_manager->loadByProperties([
    'path'     => $path,
    'langcode' => $lang
  ]);
  
  foreach($alias_objects as $alias_object) {
    $alias_object->delete();
  }

  $path_alias_manager->create([
    'path'     => $path,
    'alias'    => $new_alias,
    'langcode' => $lang
  ])->save();

}
Kevin avatar
lá cờ in
Tại sao không sử dụng Pathauto để tạo hàng loạt?
Greg Sims avatar
lá cờ us
Các url tuân theo cấu trúc trang web dành cho nội dung mà chúng tôi là tác giả. Đây là một url mẫu: /daily-devotions/genesis-1to11/in-the-beginning. Nội dung đã được dịch sang tiếng Tây Ban Nha và tiếng Trung Quốc. Các url của Trung Quốc chủ yếu là tiếng Anh. Các url tiếng Tây Ban Nha bằng tiếng Tây Ban Nha không có dấu trọng âm. Tôi không chắc có giải pháp Pathauto.
Rick B avatar
lá cờ cn
Bạn sẽ có thể đặt mẫu Pathauto cho từng ngôn ngữ. (trong Drupal 8) Nếu bạn cũng đã cài đặt mô-đun chuyển ngữ và mô-đun mã thông báo, tôi nghĩ bạn có thể sử dụng giải pháp Pathauto cho trường hợp sử dụng mà bạn đã mô tả.
Greg Sims avatar
lá cờ us
Cảm ơn phản hồi về Pathauto -- Tôi sẽ xem xét thêm vấn đề này. Mã tôi đưa vào ở trên có phải là cách tốt nhất để cập nhật url cho một nút không có Pathauto không?
Điểm:2
lá cờ gf

Một cách đơn giản hơn một chút mà tôi thấy là bạn không cần xóa và tạo đối tượng bí danh vì bạn chỉ cần cập nhật các thuộc tính đối tượng của nó tại chỗ với -> lưu() như thế này:

function alias_replace($path, $lang, $new_alias) {

  $path_alias_manager = \Drupal::entityTypeManager()->getStorage('path_alias');

  $alias_objects = $path_alias_manager->loadByProperties([
    'đường dẫn' => $đường dẫn,
    'langcode' => $lang
  ]);
  
  foreach($alias_objects as $alias_object) {
    $alias_object->alias = $new_alias;
    $alias_object->save();
  }
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.