كيف يمكنني "إظهار" روابط القائمة للمحتوى غير المصرح به في Drupal 6؟

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

  •  10-07-2019
  •  | 
  •  

سؤال

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

هل هناك طريقة سهلة لإظهار هذه الروابط؟أدرك أن الإصدارات السابقة من Drupal طلبت منك بالفعل تنزيل وحدة لإخفاء الروابط إلى الصفحات غير المصرح بها!

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

المحلول 7

ولقد وجدت وحدة الذي يبدو في الواقع لتوفير وظائف أريد:

HTTP: // بلوق .davereid.net / المحتوى / تقييد المحتوى ولكن في ذات أخرى، مختلفة، دروبال عقدة وصول وحدة

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

نصائح أخرى

لقد كان دائما بهذه الطريقة (على الأقل منذ 4.7).

وأنت لا يمكن إظهار عناصر القائمة غير مصرح بها من خارج منطقة الجزاء. قد تكون هناك وحدة خاصة على الرغم من ...

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

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

يتبادر إلى الذهن حلان للقيام بذلك بسهولة.

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

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

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

وعلى افتراض أن كل المحتوى هو عقدة تتمكن من الحفاظ على القوائم دون قواعد الوصول ثم استخدم

hook_view($node, $teaser = FALSE, $page = FALSE)

ويمكنك رفض الوصول إلى بعض العقد ..

وأمل هذا مفيدة.

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

<?php

global $user;

//if the user is not logged in, and the node is in taxonomy term "restricted"
//redirect them to the login page
foreach ($node->taxonomy as $tax){
  if ($tax->name == "Restricted" && !$user->uid){
    $query = 'destination=node/'.$node->nid;
    drupal_goto('please-login-continue',$query);  
  }
}
?>

و/ يرجى تسجيل الدخول-هي صفحة أنا خلقت الذي يحتوي على جميع أشكال المعتادة الدخول / التسجيل. ويبدو أن تعمل بشكل جيد بالنسبة لي حتى الآن!

ملاحظة: إذا كان الناس تعطيل متعمد إعادة التوجيه في المتصفح لن يتم إعادة توجيه، ولكن عندما حاولت في الأوبرا مع إعادة توجيه إيقاف تحميل الصفحة وصولا إلى النقطة حيث إعادة توجيه تحاول يحدث، ومن ثم لا شيء بعد ذلك - لذلك كان لا يزال يقتصر المحتوى في هذه الحالة

ونوع في وقت متأخر ولكن هذه هي الطريقة التي عملت من ذلك:

/**
 * Implementation of hook_menu()
 */
function mr_gm_menu() {

    $items = array();

    $items['x'] = array(
        'title' => 'X',        
        'page callback' => 'x_view',
        'access arguments' => array('access content'), 
        'type' => MENU_NORMAL_ITEM,
        'menu_name' => 'main-menu',
        'weight' => 10,
    );  

    return $items;
}

function x_view(){

  global $user;

  if ($user->uid):
    drupal_goto('node/add/X');
  else:
    drupal_goto('user');    
  endif;

  return;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top