2

ある種のプレースホルダーを使用して別のノードにノード コンテンツを含める必要があります。たとえば[node-5663]、ノード ID が 5663 に一致するノードのコンテンツ (本文) に変換されます。

上記の例は単なる例です。実際に必要なのは次のようなものです: [table-TABLE-ID]whereTABLE-IDはノードで (CCK を使用して) 定義するフィールドになります。

取得する必要があるコンテンツの検索と照合に問題はありませんが、欠けているのはトークンの使用方法です。

どんな助けでも大歓迎です:)

4

2 に答える 2

4

あなたが望むものの正確な詳細については少し曖昧ですが、基本的な前提は実際には非常に単純です.

次のような、いくつかのトークンを定義するだけのカスタム モジュールを作成します。

/**
 * 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 を実行することも非常に安全ではありません (これはあなたが望んでいたことの私の解釈でした)。等)。

これが多少役立つことを願っています。

于 2010-02-16T01:18:56.500 に答える
1

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

これにより 、I'm the ga_tokenizer:ga-term THE SEARCH TERM USED TO FIND THE PAGEが出力されます

実際のトークン値だけが必要な場合は、使用します

<?php
$tokentext = "[ga_tokenizer:ga-term]";
$processedText = token_replace($tokentext);
?>
于 2012-05-15T15:36:01.033 に答える