it-swarm.asia

تعديل العقدة في hook_node_view () لـ Drupal 7

أحاول تعديل مجموعة المحتوى وإضافة رابط إضافي.

  • لا أريد استخدام وحدة الارتباط ؛ سيتم إنشاء هذا الرابط مع الحقول الأخرى ، فهو شيء مثل وحدة المجال المحسوب (والتي هي في مرحلة التطوير لـ Drupal 7 ، وأنا أفضل عدم استخدامه).
  • لا أريد فقط إضافة HTML/PHP إلى node.tpl.php. أريد أن يكون هذا حلًا لطيفًا.

لقد حاولت إضافة حقل جديد إلى $node->content. تمكنت من نسخ حقل آخر وعرضه مرة أخرى. تمكنت من تغيير تسمية هذا المجال ، ولكن ليس الرابط نفسه.

هل لدى أي شخص أي فكرة عن كيفية المضي قدما؟

4
wtk

يمكنك القيام بذلك عن طريق تنفيذ hook_node_view .

فمثلا:

function my_module_node_view($node, $view_mode, $langcode) {
  switch ($node->type) {
    case 'my_node_type':
      $node->content['extra_link'] = array(
          '#weight' => 10,
          '#theme' => 'link',
          '#path' => 'path_to_content',
          '#text' => t('An extra link'),
          '#options' => array(
              'attributes' => array(),
              'html' => FALSE
          ),
      );
      break;
  }
}
9
Whiskey

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

node/add/er-engagement?field_er_cal_entity_reference=19

لا يبدو أن إجابة ويسكي تسمح بذلك ، سواء كان "html" هو TRUE أو FALSE.

ومع ذلك ، ستعمل السمة "#markup".

function hook_node_view($node, $view_mode, $langcode){
  switch ($node->type) {
      case 'er_event':
        $node->content['links']['extra_link'] = array(
            '#weight' => 100, // place it at the bottom
            '#markup' => l('Add attendee data', 'node/add/er-engagement', array('query' => array('field_er_cal_entity_reference' => $node->nid))),
        );
        break;
}

}}

هذا يعمل بشكل رائع إذا كنت بحاجة إلى تلك الحجج هناك. التوثيق غير موجود ، ولكن بفضل هذا المنشور ، يساعد على التحقق من Drupal 7 ، ما عليك سوى البحث عن '#links' للحصول على فكرة.

3
mikeDOTexe

لإضافة جزء استعلام فقط ضعه داخل مصفوفة الخيار:

$node->content['links']['extra_link'] = array(
    '#weight' => 10,
    '#theme' => 'link',
    '#path' => 'node/add/er-engagement',
    '#text' => t('Add attendee data'),
    '#options' => array(
        'html' => FALSE,
        'query' => array('field_er_cal_entity_reference' => $node->nid)
    ),
);

سيؤدي هذا إلى عرض عنوان URL مثل هذا: node/add/er -agement؟ field_er_cal_entity_reference = 13

1
Aronne