إخفاء قوائم مجالات أخرى من نموذج تحرير العقدة على موقع دروبال باستخدام المجال الوصول

StackOverflow https://stackoverflow.com/questions/3036293

سؤال

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

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

هل كانت مفيدة؟

المحلول 3

في النهاية ، وجدت طريقة لإصلاح هذا للمشروع المعين الذي كنت أعمل عليه: في module_form_alter لقد أضفت ما يلي:-

global $_domain;
if (isset($_domain['domain_id'])) { // only display domain's primary links
  $menus[domain_conf_variable_get($_domain['domain_id']
    ,'menu_primary_links_source')] = $_domain['sitename'].' Primary links';
}
if ( isset($menus) ) {
  $options = menu_parent_options($menus, $form['menu']['#item']);
  $form['menu']['parent']['#options'] = $options;
}

هذا يقيد خيارات القائمة على قائمة الروابط الأساسية للمجال الحالي وهو ما أردنا فقط.

شكرا ل فابيان الذي أشارني في الاتجاه الصحيح في وقت سابق.

نصائح أخرى

بحسب ال ReadMe بالنسبة للوحدة ، تحتاج إلى تعيين بعض الأذونات المحددة في إدارة المستخدم:

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

من تجربتي منذ عدة أقمار مع الوحدة النمطية ، يمكنك التحقق من كائن مستخدم $ العالمي ومعرفة المجالات التي يجب على المستخدم الوصول إليها. يمكنك بعد ذلك استخدام نموذج تغيير لإزالة أي خيارات من مربع تحديد لا تريد رؤيته. كما هو الحال دائمًا مع Drupal ، من الأفضل السماح لشخص آخر بكتابة الرمز - لذلك إذا كانت وحدة المجال توفر هذه الوظيفة ، فاستخدمها!

فيما يلي بعض التعليمات البرمجية المحدثة لـ Drupal 7:

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MYMODULE_form_page_node_form_alter(&$form, &$form_state) {
  global $_domain;
  if (isset($_domain['domain_id'])) { // only display domain's primary links
    $menus[domain_conf_variable_get($_domain['domain_id'], 'menu_main_links_source')] = $_domain['sitename'].' Main menu';
  }
  if (isset($menus)) {
    $options = menu_parent_options($menus, $form['#node']->type);
    $form['menu']['link']['parent']['#options'] = $options;
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top