it-swarm.asia

كيفية إضافة روابط برمجيًا إلى متغير الروابط

أنا أستخدم Drupal 6 وأود تعديل $links متغير ليشمل روابط أخرى برمجيا. لقد بحثت على ارتفاع ومنخفض على Google عن كيفية القيام بذلك دون جدوى. هل يعرف أحد كيف يفعل ذلك؟

8
user5013

دروبال 6

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

إضافة رابط جديد:

example_link($type, $object, $teaser = FALSE) {
  $links = array();
  // Add a custom link to nodes
  if ($type == 'node') {
    $links['example_mylink'] = array(
      'title' => t('Test link'),
      'href' => 'foo',
      'attributes' => array(
        'title' => 'Test link',
      ),
    );
  }
  return $links;
}

تعديل الروابط الموجودة:

example_link_alter(&$links, $node, $comment = NULL) {
  // Remove the read more link
  unset($links['node']['node_read_more']);

  // Change the title of the read more link
  $links['node']['node_read_more']['title'] = t('More information');

  // Move read more link to first slot
  $link_read_more = $links['node']['node_read_more'];
  unset($links['node']['node_read_more']);
  $links = $links['node'];
  $links['node'] = array(
    'node_read_more' => $link_read_more,
  ) + $links;

  // Move link to the last slot
  $link_read_more = $links['node']['node_read_more'];
  unset($links['node']['node_read_more']);
  $links['node']['node_read_more'] = $link_read_more;
}

دروبال 7

في Drupal 7 ، هذا أكثر وضوحًا ، حيث يمكن للسمات تنفيذ عمليات ربط بديلة. خطاف التغيير الذي تبحث عنه هو hook_node_view_alter() :

function example_node_view_alter(&$build) {
  // Remove the read more link
  unset($build['links']['node']['#links']['node-readmore']);

  // Add your own custom link
  $build['links']['node']['#links']['example-mylink'] = array(
    'title' => t('Test link'), 
    'href' => 'foo', 
    'html' => TRUE, 
    'attributes' => array(
      'title' => 'Test link',
    ),
  );

  // Move read more link to first slot
  $link_read_more = $build['links']['node']['#links']['node_read_more'];
  unset($build['links']['node']['#links']['node_read_more']);
  $links = $build['links']['node']['#links'];
  $build['links']['node']['#links'] = array(
    'node_read_more' => $link_read_more,
  ) + $links;

  // Move link to the last slot
  $link_read_more = $build['links']['node']['#links']['node_read_more'];
  unset($build['links']['node']['#links']['node_read_more']);
  $build['links']['node']['#links']['node_read_more'] = $link_read_more;
}

يمكنك وضع هذا مباشرةً في ملف template.php.

22
user7

بافتراض أنك تتحدث عن الروابط التي يتم عرضها على node.tpl.php ، ستحتاج إلى تنفيذ hook_link على سبيل المثال انظر إلى node_link . وإذا كنت جديدًا على drupal hooks ، فيجب أن يحدث هذا في وحدة مخصصة ، لذلك لنفترض أن اسم الوحدة المخصصة هو "foo" ، فستحتاج إلى كتابة دالة تسمى foo_link التي يجب أن تحتوي على نفس الوسيطات مثل hook_link.

1
Dipen