سؤال

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

بلدي الحل

<?php
    global $base_url;
    $base = drupal_lookup_path('alias',"node/".$node->nid);
    $path = $base_url.'/'.$base.'#comment-'.$comment->cid;

    $link_options = array('html'=> $html);
    $commentlink = l($date, $path, $link_options);
?>

لطباعة الرابط الذي يجب عليك الاتصال به فقط <?php print $commentlink;?>. لكنني متأكد من أن هناك طريقة أفضل وأكثر من ذلك بكثير لحل المشكلة.

أفضل طريقة

فعل Mikerker ذلك :) كما اقترح هنا هو الحل.

<?php
 $commentlink = l(
    $date,
    "node/$comment->nid",
    array("fragment" => "comment-$comment->cid"));
?>

لاحظ الفرق الصغير بين ميكركر ونسختي. array("fragment" => "comment-$comment->cid")); و array("query" => "comment-$comment->cid"));

سيضيف Baram الاستعلام ملف ? إلى عنوان URL. لذلك يبدو طريقك

//…query
http://example.com/path/to/node?comment-2

على عكس الحل (جزء):

//…fragment
http://example.com/path/to/node#comment-2

ملحوظة:لا تشمل الحرف "#" الرائد إلى معرف جزء. ستضافها دروبال.

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

المحلول

هذه هي الطريقة في الأساس للقيام بذلك. التعليقات الرابط الدائر في شكل:

node/<nid>#comment-<cid>

أين <nid> و <cid> هي العقدة والتعليقات معرفات ، على التوالي. يمكنك أن تنقذ نفسك خطوة من خلال عدم الاتصال drupal_lookup_path() -- l() أو url() افعلها من أجلك. سيبدو الروتين المختصر:

$commentlink = l(
  $date,                                      // Text of the link
  "node/$node->nid",                          // path to node, l() handles aliases
  array('query' => "comment/$comment->cid"),  // fragment to specific comment
);

نصائح أخرى

في حال كان أي شخص يتساءل ، يبدو أن Drupal 7 Way (على الأقل ،)

<a href='http://YOURSITE.com/comment/CID#comment-CID'>link text</a>

فمثلا:

print "<a href='/comment/$comment->cid#comment-$comment->cid'>text here</a>";

وسيتم وضع هذا في ملف Comment.tpl.php.

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