Drupal Token Примеры использования - PullRequest
2 голосов
/ 15 февраля 2010

Мне нужно включить содержимое узла в другой узел с использованием какого-либо заполнителя, например: [node-5663] будет преобразовано в содержимое (тело) узла, где идентификатор узла соответствует 5663.

Приведенный выше пример является лишь примером, на самом деле мне нужно что-то вроде этого: [table-TABLE-ID], где TABLE-ID будет полем, которое я определю в узле (используя CCK).

У меня нет проблем с поиском и сопоставлением контента, который мне нужно получить, но мне не хватает, как использовать токены.

Любая помощь будет приветствоваться:)

Ответы [ 2 ]

4 голосов
/ 16 февраля 2010

Хотя я немного размышляю о точных деталях того, что вы хотите, основная предпосылка на самом деле довольно проста.

Вы захотите создать собственный модуль, который просто определяет некоторые токены, аналогично следующему:

/**
 * Implements hook_theme().
 */
function my_module_theme() {
  return array(
    'my_module' => array(
      'arguments' => array('object' => NULL)
    ),
  );
}

/**
 * Implements hook_token_list().
 */
function my_module_token_list($type = 'all') {
  if ($type == 'node' || $type == 'all') {
    $tokens = array();
    $tokens['my_module']['table-TABLE-ID'] = t('description').
    return $tokens;
  }
}

/**
 * Implements hook_token_values().
 */
function my_module_token_values($type, $object = NULL) {
  if ($type == 'node') {
    ($table, $id) = explode('-', $object->my_field['value']);
    $tokens['table-' . $object->my_field['value']] = theme('my_module', db_fetch_object(db_query("SELECT * FROM {" . $table . "} WHERE id = %d", $id)));
    return $tokens;
  }
}

function theme_my_module($object) {
  return '<div>' . $object->content . '</div>';
}

Примечание: Весь этот код теоретический, и я могу сказать, что он не будет работать. Также крайне небезопасно делать db_query так, как я это сделал здесь (это была моя интерпретация того, что вы хотели), вместо этого вы должны иметь токен для каждого другого типа запроса, который вы хотите ('table-node-ID', и т.д.).

Надеюсь, это несколько полезно.

1 голос
/ 15 мая 2012

Если вам нужен доступ к токенам из другого модуля в php, быстрый способ сделать это с помощью функции drupal "token_replace ($ text)"

Вы передаете ему текст, который может содержать токен, и он вернет текст с замененным токеном.

пример для Drupal 7

<?php
$tokentext = "I'm the ga_tokenizer:ga-term [ga_tokenizer:ga-term]";
$processedText = token_replace($tokentext);
print $processedText;
?>

Это выведет Я ga_tokenizer: ga-term СРОК ПОИСКА, ИСПОЛЬЗУЕМЫЙ ДЛЯ НАЙТИ СТРАНИЦУ

Если вам просто нужно фактическое значение токена, используйте

<?php
$tokentext = "[ga_tokenizer:ga-term]";
$processedText = token_replace($tokentext);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...