it-swarm.asia

كيفية نشر العقد غير المنشورة؟

لدي موقع يحتوي على عدد هائل من العقد من أنواع المحتوى المختلفة. أرغب في تعيينهم جميعًا على غير منشورة ، ولا أرى طريقة للقيام بذلك بسهولة دون المرور عبر صفحة بعد صفحة بعد أجزاء من المحتوى.

كنت أفكر في عمل استفسار مباشرة على قاعدة البيانات: UPDATE node SET published = 0; - ولكن هل سيؤدي هذا إلى إلغاء نشر كل المحتوى بشكل صحيح؟

تحرير: نحن نتعامل مع عدة آلاف من العقد ، وكما أفهم ، هناك حد مشفر من 50 عقد معروض على صفحة تحرير مجمعة . لذا أحاول أن أتجنب تصفح عشرات الصفحات.

6
user1359

إذا كنت تريد إلغاء نشر جميع العقد ، فإن الطريقة السريعة والقذرة هي استعلام SQL بسيط UPDATE node SET status = 0; ثم قم بمسح ذاكرة التخزين المؤقت وعمله. ولكن إذا كنت تستخدم طرق العرض ، فلا يزال بإمكانها إظهار محتوى غير منشور يعتمد على الإعدادات.

11
Pari

إذا كنت لا ترغب في القيام بذلك من خلال SQL ، فإن الوحدة النمطية Content Management Filter تسمح لك بتصفية المحتوى الخاص بك بشكل كبير ، وتحديد عدد الصفوف التي يتم عرضها على الصفحة (مما يتيح لك إجراء عمليات مجمعة) بسهولة).

وحدة أخرى تستحق الفحص هي طرق عرض مجمّعة (تُعرف أيضًا باسم VBO). سيجعل من السهل إنشاء عرض موجه بالكامل نحو التحديثات المجمعة.

5
Dylan

انا ذاهب لطرح خيار واحد آخر.

كتابة نص اختبار

  1. بوتسترابس.
  2. يستعلم عن قاعدة البيانات للعثور على الأعداد التي تريد إلغاء نشرها ، ثم يتكرر فوقها
  3. $ node = node_load ($ nid) ؛
  4. $ node-> status = 0 ؛
  5. node_save ($ node) ،

وفقًا لإصدار Drupal ، قد تتمكن من تحسين ذلك باستخدام node_load_multiple (). فقط تأكد من أن لديك ذاكرة كافية متاحة وقمت بتعديل وقت التنفيذ ، إذا لزم الأمر.

يجب أن يعتني القيام بذلك بهذه الطريقة مع خدمة تنظيف الغرف التي تطلقها العقدة ().

2
mpdonadio

في صفحة البحث عن المحتوى على admin/content هناك خيار لك لإجراء تحديثات مجمعة بما في ذلك إلغاء نشر العقد المحددة. انظر http://www.gingerfeet.net/drupal-userguide-siteadmin-node

إذا لم يكن هذا مناسبًا لاحتياجاتك ، فقد تحتاج أيضًا إلى النظر في عمليات عرض مجمَّعة للعمليات الوحدة النمطية.

1
nmc

في Drupal 8 (نفس الشيء في Drupal 7)) ، إحدى أفضل طرق تجميع العقد غير المنشورة هي القيام بشيء مثل ما يلي:

$nodes = node_load_multiple($nids, TRUE);
foreach ($nodes as $nid => $node) {
  $node = $node->setPublished(FALSE);
  $node->save();
}

(بافتراض أن لديك مصفوفة من $nids لنبدء ب.)

لاحظ أننا قمنا بتعيين TRUE للعقدة _ متعددة_$reset ، لحفظ الذاكرة في حالة تشغيل مئات أو آلاف العقد.

إذا كنت بحاجة إلى القيام بذلك في مكان يوجد فيه تحميل/واجهة مستخدم عادية ، فمن الأفضل استخدام Batch API لتجميع العملية ... ولكن استخدم نفس الرمز الموجود أعلاه داخل الدفعة.

0
geerlingguy

قم بتثبيت وحدة Admin_Views (وهو متطلب على جميع مواقعي على أي حال) ثم يمكنك استخدام قائمة/admin/content لتحديد جميع العقد المنشورة وتغييرها بشكل مجمّع إلى Unpublished. يستخدم VBO لذا يجب أن تكون الواجهة طبيعية جدًا (ما عليك سوى البحث عن الزر "تحديد جميع العقد ####" أعلى المحتوى عند النقر فوق مربع الاختيار SELECT ALL للقيام بأكثر من 50 خانة في المرة الواحدة). سيستخدم الخطافات العادية Drupal لذا سيستغرق وقتًا أطول من "UPDATE nodes SET status = 0" ولكن لن يكون له أي آثار جانبية غريبة.

0
diamondsea