Làm cách nào tôi có thể nhanh chóng lưu lại tất cả các nút trên trang web của mình (để kích hoạt quy tắc kích hoạt cập nhật nội dung)?


24

Tôi đã mắc một số lỗi khi định cấu hình một loại nội dung nhất định trên trang web của mình. Để sửa những lỗi này, tôi đã thực hiện một quy tắc thực hiện một số hành động "khi nội dung hiện có được cập nhật". Tuy nhiên, tôi không muốn đi qua trang web của mình và lưu lại từng nút một cách thủ công. Có cách nào để sử dụng Quy tắc hoặc Lượt xem Hoạt động hàng loạt để nhanh chóng lưu lại tất cả các nút không?

Câu trả lời:


22

VBO có hành động "Thực thi mã PHP". Chạy nó và nhập "node_save ($ entity);" (không có dấu ngoặc kép) trong hộp văn bản. Điều đó sẽ thực hiện các mẹo, trong khi xử lý thời gian chờ cho bạn.


1
À, nhanh hơn nhiều :)
Clive

5
Có một tùy chọn trong VBO để "Lưu nội dung", nó sẽ làm tương tự mà không cần phải viết PHP của riêng bạn.
stevenw00

Tôi không thể tìm thấy tùy chọn "Lưu nội dung", nhưng phương thức php mà bạn đề cập đã hoạt động rất tốt! Cảm ơn!
khúc côn cầu2112

Đã thử cả hai phương thức php và vbo mà không thành công. Trong usecase của tôi, chỉ có một hướng dẫn Lưu cập nhật đúng nhãn cho trường bảng. Lạ thật ...
Bisonbleu

14

Tôi không biết về các quy tắc hoặc VBO nhưng bạn có thể sử dụng một đoạn mã ngắn để có được kết quả tương tự:

$nids = db_query('SELECT nid FROM {node}')->fetchCol();
foreach (node_load_multiple($nids) as $node) {
  node_save($node);
}

Nếu bạn có nhiều nút có thể mất một chút thời gian, vì vậy nếu máy chủ của bạn cho phép thì nên mở rộng giới hạn thời gian khi bắt đầu mã đó, có lẽ là không giới hạn nếu đây là một nút tắt :

set_time_limit(0);

12

Bạn có thể sử dụng hàm node_mass_update () :

module_load_include('inc', 'node', 'node.admin');
$nids = db_query('SELECT nid FROM {node}')->fetchCol();
node_mass_update($nids, array());

Điều đó rất tốt vì bạn không cần quan tâm đến giới hạn thời gian. Quá trình hàng loạt để cập nhật các nút sẽ tự động bắt đầu nếu có hơn 10 nút.


5
Hoạt động hoàn hảo trên hơn 200.000 nút. Xử lý các đợt cho bạn. Nếu bạn đã bật mô-đun phát, bạn chỉ cần dán đoạn mã trên vào trang '/ devel / php'
2pha

1
Giải pháp tuyệt vời, chạy trong nền để không có cơ hội hết thời gian hoặc giết chết hiệu suất trang web
Daniel Waters

5

Cập nhật: Tôi vừa tạo Resave All Nodes . Cho đến nay, nó chỉ chứa một biểu mẫu để kích hoạt một quy trình hàng loạt để lưu lại tất cả các nút của các loại nút được chọn. Hiện đang ở giai đoạn alpha. Tôi dự định thêm một lệnh Drush (beta) và một số thử nghiệm (ổn định) là tốt.

Ảnh chụp màn hình Drupal Resave All Nodes


nút Resave . Nó dự định được sử dụng trên cron chạy. Nhưng bạn cũng có thể kích hoạt nó bằng tay. Chỉ cần chọn các nút của loại nội dung sẽ được lưu lại.

Trước khi bạn có thể chạy chức năng lưu lại thủ công bằng cách nhấn "Resave Nodes Now", bạn đã từng phải "Lưu cấu hình" (chọn loại cron và loại nội dung).


2

Chuyển đến quản trị / nội dung và lọc theo loại nội dung của bạn - chỉ được xuất bản. Chọn tất cả và sau đó chọn "thay đổi giá trị" từ trình đơn thả xuống. Nhấp vào 'thực thi'. Trên trang tiếp theo, chọn 'trạng thái' từ các thuộc tính và để lại được xuất bản. Nhấp vào 'next' Tất cả các nút được xuất bản sẽ lưu lại mà không có thay đổi.

Lặp lại cho các nút chưa được công bố (nhưng chọn chưa được công bố là thuộc tính).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.