ฉันจะบันทึกโหนดทั้งหมดในไซต์ของฉันอีกครั้งได้อย่างรวดเร็ว (เพื่อเรียกใช้กฎที่เปิดใช้งานในการอัปเดตเนื้อหา) ได้อย่างไร


24

ฉันทำผิดพลาดในการกำหนดประเภทเนื้อหาบางอย่างในเว็บไซต์ของฉัน เพื่อแก้ไขข้อผิดพลาดเหล่านี้ฉันได้สร้างกฎที่ดำเนินการบางอย่าง "เมื่อมีการอัปเดตเนื้อหาที่มีอยู่" อย่างไรก็ตามฉันไม่ต้องการผ่านเว็บไซต์ของฉันและบันทึกโหนดทั้งหมดด้วยตนเองทีละครั้ง มีวิธีใช้กฎหรือการดำเนินการเป็นกลุ่มการดูอย่างรวดเร็วบันทึกโหนดทั้งหมดหรือไม่

คำตอบ:


22

VBO มีการดำเนินการ "Execute PHP code" รันและป้อน "node_save ($ entity);" (ไม่มีเครื่องหมายคำพูด) ในกล่องข้อความ ที่จะทำเคล็ดลับในขณะที่การจัดการหมดเวลาสำหรับคุณ


1
อ่าเร็วกว่ามาก :)
ไคลฟ์

5
มีตัวเลือกใน VBO เป็น "บันทึกเนื้อหา" ซึ่งจะทำเช่นเดียวกันโดยไม่ต้องเขียน PHP ของคุณเอง
stevenw00

ฉันไม่พบตัวเลือก "บันทึกเนื้อหา" แต่วิธีการ php ที่คุณกล่าวถึงใช้งานได้ดี ขอบคุณ!
hockey2112

พยายามทั้งวิธี PHP และ VBO ไม่ประสบความสำเร็จ ใน usecase ของฉันมีเพียงคู่มือบันทึกอย่างถูกต้องอัปเดตฉลากสำหรับ tablefield แปลก ...
Bisonbleu

14

ฉันไม่รู้เกี่ยวกับกฎหรือ VBO แต่คุณสามารถใช้ข้อมูลโค้ดสั้น ๆ เพื่อให้ได้ผลลัพธ์เดียวกัน:

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

หากคุณมีโหนดจำนวนมากที่อาจต้องใช้เวลาสักครู่ดังนั้นหากเซิร์ฟเวอร์ของคุณอนุญาตให้ใช้งานได้คุณควรขยายเวลาที่จุดเริ่มต้นของรหัสนั้นอาจเป็นการดีถ้าไม่ได้ใช้งาน :

set_time_limit(0);

12

คุณสามารถใช้ฟังก์ชัน node_mass_update () :

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

มันดีมากเพราะคุณไม่จำเป็นต้องสนใจเวลา จำกัด กระบวนการแบทช์สำหรับการอัพเดตโหนดจะเริ่มขึ้นโดยอัตโนมัติหากมีมากกว่า 10 โหนด


5
ทำงานได้อย่างสมบูรณ์บนโหนดกว่า 200,000 จุด จัดการชุดสำหรับคุณ หากคุณเปิดใช้งานโมดูล devel คุณสามารถวางโค้ดด้านบนได้ที่หน้า '/ devel / php'
2pha

1
ทางออกที่ยอดเยี่ยมทำงานในพื้นหลังจึงไม่มีโอกาสหมดเวลาหรือฆ่าประสิทธิภาพเว็บไซต์
Daniel Waters

5

ปรับปรุง: ฉันเพิ่งสร้างบันทึกใหม่ทุกโหนด สำหรับตอนนี้มันมีเพียงแบบฟอร์มเพื่อทริกเกอร์กระบวนการแบทช์เพื่อบันทึกโหนดทั้งหมดของชนิดโหนดที่เลือก ปัจจุบันอยู่ในอัลฟ่า ฉันวางแผนที่จะเพิ่มคำสั่ง Drush (เบต้า) และการทดสอบบางอย่าง (เสถียร) เช่นกัน

สกรีนช็อตของฟอร์ม Drupal Resave All Nodes


มีโหนดบันทึกข้อมูล มันตั้งใจที่จะใช้ในการทำงาน cron แต่คุณยังสามารถทริกเกอร์มันด้วยตนเอง เพียงเลือกโหนดของประเภทเนื้อหาที่ควรบันทึกใหม่

ก่อนที่คุณจะสามารถเรียกใช้การบันทึกใหม่ได้ด้วยการกดปุ่ม "บันทึกการกู้คืนทันที" คุณต้อง "บันทึกการกำหนดค่า" (เลือกประเภท cron และประเภทเนื้อหา)


2

ไปที่ผู้ดูแลระบบ / เนื้อหาและกรองตามประเภทเนื้อหาของคุณ - เผยแพร่เท่านั้น เลือกทั้งหมดจากนั้นเลือก "เปลี่ยนค่า" จากดรอปดาวน์การดำเนินการ คลิก 'ดำเนินการ' ในหน้าถัดไปเลือก 'สถานะ' จากคุณสมบัติและปล่อยให้เผยแพร่ คลิก 'ถัดไป' โหนดที่เผยแพร่ทั้งหมดจะบันทึกใหม่โดยไม่มีการเปลี่ยนแปลง

ทำซ้ำสำหรับโหนดที่ไม่ถูกเผยแพร่ (แต่เลือกไม่ถูกเผยแพร่เป็นคุณสมบัติ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.