Truyền tham số với mã thông báo


10

Có thể gửi tham số cùng với mã thông báo không?

Tôi có một mô-đun xác định mod1_info và mod1_tokens. Nếu tôi nhập% token: mod1: test trên một trang, nó sẽ được thay thế bằng <a href='test.html'></a>.

Điều tôi thực sự muốn là nhập% token: mod1: test [biến] và get <a href='test.html'>variable</a>.

Điều này có thể không?

Đằng sau hậu trường, test.html đang được xây dựng với một vài tham số động để nó thực sự trông giống với test.html? Param1 = foo & param2 = bar . Những gì tôi cần là một cách để ai đó chỉnh sửa trang web để chèn mã thông báo trên bất kỳ trang nào và có thể chỉ định nội dung xuất hiện dưới dạng liên kết (hình ảnh, một số văn bản hoặc cả hai).


1
Thật không may, tôi không tin rằng điều này là có thể. Mặt khác, tôi hoàn toàn không hiểu trường hợp sử dụng, vì bản thân tôi chưa bao giờ cần điều này. Có lẽ nếu bạn mở rộng những gì bạn muốn, một gợi ý khác có thể được đề xuất.
Letharion

Câu trả lời:


8

Sử dụng Drupal 7, các mô-đun có thể dễ dàng xử lý các mã thông báo tương tự như [nút: tác giả: tên], trong đó một phần của mã thông báo sau nút: tác giả đang đề cập đến mã thông báo người dùng. Khác với mô-đun Token cho Drupal 6, mã trong Drupal 7 xử lý các mã thông báo cho phép tạo mã thông báo động. Điều này là do trên Drupal 7, các mô-đun triển khai mã thông báo có thể thay thế bất kỳ mã thông báo nào, không chỉ các mã thông báo mà chúng đã xác định. Vòng lặp thông thường được sử dụng trong hook_tokens () là vòng lặp sau.

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

Sử dụng mã sau đây, bạn có thể nhận được những gì bạn đang cố gắng để đạt được. Mã thông báo có một định dạng cụ thể, khác với định dạng bạn đang mô tả, mặc dù. Mã chưa được thử nghiệm.

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;
}

Sự thay thế cho các mã thông báo cụ thể đến mức tôi không nghĩ rằng bạn sẽ tìm thấy một mô-đun thực hiện điều đó. Khả năng duy nhất của bạn là một mô-đun tùy chỉnh bạn viết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.