ส่งผ่านพารามิเตอร์ด้วยโทเค็น


10

เป็นไปได้ไหมที่จะส่งพารามิเตอร์พร้อมกับโทเค็น

ฉันมีโมดูลที่กำหนด mod1_info และ mod1_tokens ถ้าผมใส่% โทเค็น: mod1: <a href='test.html'></a>การทดสอบบนหน้าเว็บก็จะถูกแทนที่ด้วย

อะไรที่จริงผมต้องการคือการใส่% โทเค็น: mod1: การทดสอบ [ตัวแปร] <a href='test.html'>variable</a>และได้รับ

เป็นไปได้ไหม

เบื้องหลังที่test.htmlจะถูกสร้างขึ้นด้วยพารามิเตอร์แบบไดนามิกไม่กี่ดังนั้นจริง ๆ แล้วมันมีลักษณะคล้ายกับtest.html? param1 = foo & param2 = บาร์ สิ่งที่ฉันต้องการคือวิธีที่บางคนแก้ไขไซต์เพื่อแทรกโทเค็นในหน้าใดก็ได้และสามารถระบุสิ่งที่ปรากฏเป็นลิงก์ (รูปภาพข้อความหรือทั้งสองอย่าง)


1
น่าเสียดายที่ฉันไม่เชื่อว่ามันเป็นไปได้ ในทางกลับกันฉันไม่ค่อยเข้าใจกรณีการใช้งานเพราะฉันไม่เคยต้องการสิ่งนี้ บางทีถ้าคุณขยายความในสิ่งที่คุณต้องการ
Letharion

คำตอบ:


8

เมื่อใช้ Drupal 7 โมดูลสามารถจัดการโทเค็นที่คล้ายกับ [node: author: name] ได้อย่างง่ายดายโดยที่ส่วนของโทเค็นหลังจาก node: ผู้เขียนอ้างถึงโทเค็นผู้ใช้ แตกต่างจากโมดูล Token สำหรับ Drupal 6 รหัสที่ใน Drupal 7 จัดการโทเค็นอนุญาตให้สร้างโทเค็นแบบไดนามิก นี่เป็นเพราะใน Drupal 7 โมดูลที่ใช้โทเค็นสามารถแทนที่โทเค็นใด ๆ ไม่เพียง แต่โทเค็นที่พวกเขากำหนด วนรอบปกติที่ใช้ในhook_tokens ()เป็นค่าต่อไปนี้

foreach ($tokens as $name => $original) {
  // Check the value of $name, and generate the replacement that is assigned to
  // $replacements[$original].
}

ใช้รหัสต่อไปนี้คุณสามารถได้รับสิ่งที่คุณพยายามที่จะบรรลุ โทเค็นมีรูปแบบเฉพาะซึ่งแตกต่างจากรูปแบบที่คุณอธิบาย รหัสยังไม่ได้รับการทดสอบ

function mymodule_token_info() {
  $type = array(
    'name' => t('Anchors'), 
    'description' => t('Your description'), 
  );

  return array(
    'types' => array('anchor' => $type), 
  );
}

function mymodule_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();
  $sanitize = !empty($options['sanitize']);

  if ($type == 'anchor') {
    foreach ($tokens as $name => $original) {
      list($file, $title) = explode(':', $name);
      if (!empty($title) && !empty($_GET[$title])) {
        $title = $_GET[$title];
      }
      else {
        $title = '';
      }

      $replacements[$original] = "<a href='$file.html'>$title</a>";
    }
  }

  return $replacements;
}

การแทนที่โทเค็นนั้นเฉพาะเจาะจงมากฉันไม่คิดว่าคุณจะพบโมดูลที่ทำเช่นนั้น ความเป็นไปได้เพียงอย่างเดียวของคุณคือโมดูลที่กำหนดเองที่คุณเขียน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.