it-swarm.asia

كيف يمكنني السماح للمستخدمين بإلغاء النشر ونشر المحتوى الخاص بهم؟

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

30
Chaulky

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

20
Decipher

نستخدم دومًا نشر المحتوى الوحدة النمطية لذلك. يضيف عددًا من الأذونات الدقيقة وعلامة تبويب نشر/إلغاء النشر على العقد.

هذه الوحدة

  • يمكّن أذونات النشر وإلغاء النشر:
    • عالمي (إلغاء/نشر أي محتوى)
    • لكل "نوع عقدة" (إلغاء/نشر أي محتوى [nodetype])
    • لكل مستخدم (إلغاء/نشر محتوى [nodetype] خاص
  • يضيف علامة التبويب "نشر/إلغاء النشر" إلى صفحة العقدة بنقرة واحدة على إلغاء النشر/النشر.
  • يكشف روابط النشر/النشر غير المنشورة لوجهات نظرك ، مما يسهل تبسيط سير العمل للمراجعين والمحررين والناشرين.
  • خفيفة الوزن وستظل دائما كذلك.
20
marcvangend

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

بالنسبة لحالة الاستخدام ، تمنح المستخدمين أذونات "المنشئ" وأذونات "الوسيط" ، حتى يتمكنوا من الإشراف على المحتوى الخاص بهم بشكل أساسي ، ولكن كما هو موضح في وصف الوحدة ، فإنهم ليسوا بالنظر إلى قوى شبيهة بالله مثل إعطاء "عقد إدارة" ستعطي.

9
coderintherye

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

هذه هي نسختي من الكود:

function MYMODULE_perm() {
  $perms[] = 'administer status of any content';

  foreach (node_get_types() as $type) {
    if (isset($type->type)) {
      $perms[] = 'administer status of any '. check_plain($type->type) .' content';
      $perms[] = 'administer status of own '. check_plain($type->type) .' content';
    }
  }

  return $perms;
}

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'node-form' && $form_id == "{$form['#node']->type}_node_form" && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}

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

6
Decipher

أريد فقط تحديث إجابة فك الشفرة ، وكتل الساحرة لي أفضل طريقة إذا كنت لا تريد إضافة وحدة أخرى ، لتناسب Drupal 7:

/**
 * Implements hook_permission().
 */
function MYMODULE_permission() {  
  $perms = array(
    'administer status of any content' => array(
      'title' => t('Administer status for all content type'),
      'description' => t(''),
      'restrict access' => true
    ),
  );

  foreach (node_type_get_types() as $type) {
    if (isset($type->type)) {
      $perm_types = array(
        'administer status of any '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of any '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),

        'administer status of own '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of own '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),
      );
      $perms = array_merge($perms,$perm_types);
    }
  }

  return $perms;
}


function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if (preg_match('/_node_form$/', $form_id) && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}
3
anou

يمكنك تحقيق ذلك من خلال الجمع بين قوة العلم و القواعد الوحدات النمطية.

  1. أنشئ علامة جديدة انشر وامنح المستخدمين الإذن بوضع علامة على المحتوى الخاص بهم فقط.
  2. بعد ذلك ، أضف قاعدة جديدة يتم تشغيلها عندما يتم وضع علامة على عقدة وتنشر العقدة التي تم الإبلاغ عنها. وبالمثل ، قم بإنشاء قاعدة ثانية تقوم بإلغاء نشر العقد التي تم وضع علامة عليها تحت نشر .
  3. أخيرًا ، امنح المستخدمين الإذن لرؤية العقد غير المنشورة الخاصة بهم وإضافة رابط نشر لصفحات العقدة.
0
Jeroen