ฉันใช้ Drupal 6 และต้องการแก้ไข$links
ตัวแปรเพื่อรวมลิงก์อื่น ๆ แบบเป็นโปรแกรม ฉันค้นหาด้วย Google ในราคาที่สูงและต่ำในการทำสิ่งนี้เพื่อประโยชน์ มีใครรู้วิธีการทำเช่นนี้?
ฉันใช้ Drupal 6 และต้องการแก้ไข$links
ตัวแปรเพื่อรวมลิงก์อื่น ๆ แบบเป็นโปรแกรม ฉันค้นหาด้วย Google ในราคาที่สูงและต่ำในการทำสิ่งนี้เพื่อประโยชน์ มีใครรู้วิธีการทำเช่นนี้?
คำตอบ:
ใน Drupal 6 คุณไม่สามารถใช้ hooks หรือแก้ไข hooks ภายในธีมได้ดังนั้นคุณจะต้องสร้างโมดูลที่กำหนดเองเพื่อแก้ไขลิงก์ เมื่อเสร็จแล้วคุณจะต้องนำไปใช้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;
}
ใน Drupal 7 นี่เป็นสิ่งที่ตรงไปตรงมามากกว่านี้เนื่องจากชุดรูปแบบสามารถใช้ hooks hooks ได้ เบ็ดแก้ไขที่คุณกำลังมองหาคือ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
ไฟล์ของคุณได้โดยตรง
'href'
สิ่งที่คุณต้องการ
สมมติว่าคุณกำลังพูดถึงการเชื่อมโยงที่ได้รับการแสดงผลบน node.tpl.php คุณจะต้องใช้hook_linkตัวอย่างเช่นดูที่node_link และถ้าคุณยังใหม่กับ drupal hooks ความต้องการนี้จะเกิดขึ้นในโมดูลที่กำหนดเองดังนั้นสมมติว่าชื่อโมดูลที่กำหนดเองของคุณคือ "foo" คุณจะต้องเขียนฟังก์ชันที่เรียกว่าfoo_link
ควรมีอาร์กิวเมนต์เหมือนกับ hook_link