web-dev-qa-db-ja.com

page.tpl.phpのフィールド

私のpage.tpl.phpに表示したい3つのカスタムフィールドが、私のWebサイトに追加された最新のコンテンツタイプです。

3つのカスタムフィールド、field_1、field_2、field_3を持つ「Articles」というカスタムコンテンツタイプがあります。

「記事」に追加された最新のコンテンツの3つのフィールドをWebサイトのすべてのページに表示するにはどうすればよいですか?ビューを使用せずにこれを実行したいです。

1
Sergiu B

正確な答えはわかりませんが、指摘する方法はいくつかあります。このようなものを試してください:

  1. Template.phpのTHEMENAME_preprocess_page()関数で、クエリを作成して、最後に作成されたノードのノードIDを取得します。 DrupalのデータベースAPIを調べて、これを行う方法を確認してください。 (より永続的な解決策は、クエリにカスタムモジュールを使用することですが、これを機能させるためにテーマレイヤーから始めましょう。)
  2. node_load()を実行して、3つのフィールドなどを含むそのノードのコンテンツ全体を取得します。
  3. 変数を作成します($variables[] array)を使用して、カスタムフィールドのレンダリングされたコンテンツを保持します。
  4. これらの新しい変数をpage.tpl.phpまたはpage-article.tpl.phpで使用します。
1
David Lanier

私はあなたがViewsモジュールに何らかの宗教的反対を持っていると仮定するつもりなので、カスタムモジュールメソッドを選びます。

単純なモジュールで、任意のページに表示できるブロックを作成できます。

ここから始めます http://drupal.org/node/20675 。私たちは6.xの話をしていますよね?もちろんです。 .infoおよび.moduleファイルの設定が完了したら、ブロックコンテンツの宣言(http://drupal.org/node/206758)にスキップしてから、コンテンツの生成(http://drupal.org/node)にスキップできます。/206759)...ここが面白いところです...

function yourModuleName_block($op='list', $delta=0) {
  // set up the block  
  $block = array();

  if ($op == "list") {
    // This is what it will be listed as in your list of blocks
    $block[0]["info"] = t('On This Date');
  } 
  else if ($op == 'view') {
     $block['content'] = yourfunctionToGetNewArticalContent();
  }
}

次に、必要なものを返すための関数を作成します。そのためには、ここを調べてみてください。 http://api.drupal.org/api/drupal/includes--database.mysql-) common.inc/function/db_query/6

1
Aaron