Drupal - الحصول على معرف العقدة من العرض لتخصيص الرابط في كتلة

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

  •  13-09-2019
  •  | 
  •  

سؤال

كيف يمكنني بناء كتلة في Drupal والتي تتمكن من إظهار معرف العقدة لصفحة العرض التي تجلس بها الكتلة حاليا؟

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

كيف يمكنني العثور على Nid $ الذي عرض حاليا؟

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

المحلول

فيما يلي طريقة أكثر قوة للحصول على معرف العقدة:

<?php
    // Check that the current URL is for a specific node:
    if(arg(0) == 'node' && is_numeric(arg(1))) {
        return arg(1); // Return the NID
    }
    else { // Whatever it is we're looking at, it's not a node
      return NULL; // Return an invalid NID
    }
?>

تعمل هذه الطريقة حتى إذا كان لديك مسار مخصص لعقودك مع path و / أو pathauto وحدات.

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

منذ أن أمتلك دائما path تحولت الوحدة، الشيء الوحيد الذي حظيرني في البداية كان ما إذا كان من الممكن من أجل arg وظيفة لإرجاع جزء من الاسم المستعار بدلا من جزء من مسار النظام.

كما اتضح، arg وظيفة سوف ترجع دائما مسار النظام ل ال arg ويستند الوظيفة $_GET['q']... بعد القليل من الأبحاث يبدو $_GET['q'] سوف ترجع دائما مسار النظام.

إذا كنت ترغب في الحصول على المسار من طلب الصفحة الفعلية، تحتاج إلى استخدام $_REQUEST['q']. وبعد إذا كان path تم تمكين الوحدة النمطية، $_REQUEST['q'] قد يعود إما اسم مستعار أو مسار النظام.

نصائح أخرى

للحصول على حل، خاصة تلك التي تنطوي على حجة عرض في خضم الطريق مثل department/%/list, ، انظر وظيفة بلوق معرف العقدة كوسيطة عرض من مسار URL صديق سيو.

في النهاية كان هذا المقتطف فعل الوظيفة - لقد جردت للتو النظيفة عنوان URL وبعد الظهر الحجة الأخيرة جدا.

<?php
    $refer= $_SERVER ['REQUEST_URI'];
    $nid = explode("/", $refer);
    $nid = $nid[3];
?>

بالنظر إلى الرد التعليق، فقد تم تقليل ما سبق إلى ذلك، باستخدام Drupal arg() وظيفة للحصول على جزء من مسار الطلب:

<?php
    $nid = arg(3);
?>

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

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

في ملاحظة جانبية، كتبها أيضا من قبل مؤلف المشاهدات.

هناك عدة طرق للذهاب حول هذا:

  1. يمكنك جعل كتلتك مع طرق العرض وتمرير NID من خلال حجة.

  2. يمكنك المرور يدويا في NID عن طريق الوصول إلى $view كائن باستخدام الرمز أدناه. انها صفيف في $view->result. وبعد كل صف في العرض هو كائن في مجموعة هذه الصفيف، كما أن NID في هذا الكائن لكل واحد. حتى تتمكن من تشغيل ذلك على ذلك والحصول على كل NID من جميع الصفوف في المنظر بسهولة بسهولة.

الخيار الأول أسهل كثيرا، لذلك إذا كان ذلك يناسب احتياجاتك، سأذهب مع ذلك.

جديد حول Drupal 7: الطريقة الصحيحة للحصول على معرف العقدة تستخدم الدالة MENUST_GET_OBJECT ()؛

مثال:

$node = menu_get_object();
$contentType = node_type_get_name($node);

Drupal 8 لديه طريقة أخرى. تحقق من هذا:

arg () مهملة

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