Giả sử các đối số bạn muốn sử dụng không phải là đối số xem hoặc bộ lọc theo ngữ cảnh, nếu bạn muốn làm mã thông báo, về cơ bản bạn cần tạo một mô-đun thực hiện hook_tokens () và hook_token_info () , như được mô tả trong API . Tôi không nghĩ ai đã làm điều đó cả.
Đây là cách tôi làm:
function yourmodule_token_info() {
$type = array(
'name' => t('GET'),
'description' => t('Tokens related to $_GET superglobal.'),
);
$tokens = array();
foreach($_GET as $key => $val) { //discard $val now
$tokens[$key] = array(
'name' => $key,
'description' => "\$_GET['$key']",
);
}
return array(
'types' => array('get' => $type),
'tokens' => array('get' => $tokens),
);
}
function yourmodule_tokens($type, $tokens, array $data = array(), array $options = array()) {
if($type == 'get') {
$replacements = array();
foreach ($tokens as $name => $original) {
$replacements[$original] = (string)$_GET[$name];
}
return $replacements;
}
}
Tất nhiên mã ở trên không sẵn sàng sản xuất , nó bỏ qua xử lý loại thích hợp, các vấn đề bảo mật và như vậy. Điều này có nghĩa là giúp bạn đi đúng hướng, nhưng bạn cần phải áp dụng sự tỉnh táo của mình trước khi triển khai nó. Tôi không chịu trách nhiệm cho việc lạm dụng. Đọc về lý do nó đã bị xóa ngay từ đầu trước khi bạn quyết định thêm lại và cẩn thận chỉ khôi phục những gì bạn thực sự cần.
Nếu bạn muốn các tham số có thể arg()
thay thế bằng thay vì $ _GET, tất nhiên trong hook_tokens lặp lại chúng với while
:
function yourmodule_tokens($type, $tokens, array $data = array(), array $options = array()) {
if($type == 'arg') {
$replacements = array();
$i = 0;
while ( NULL !== ($arg = arg($i))) {
$replacements["arg:$i"] = (string)$arg;
}
return $replacements;
}
}
Thay đổi cho yourmodule_token_info()
phù hợp.