web-dev-qa-db-ja.com

ビューなしでフロントページのコンテンツタイプからすべてのノードをロードする

1ページのウェブサイトを作りたいのですが。私ができることを望んでいるのは、1つのコンテンツタイプから作成されたすべてのページを、おそらくfor eachループで互いにロードすることです。

したがって、page.tpl.phpでは、次のようになります。

foreach($pages as $page){
    print $title;
    print render($page['content']);
}

このようにして、ビュー/ブロックをページの特定の部分にバインドすることもできます。このようなアプローチを探しているのは、ウェブサイトを管理しやすい状態に保つためです。

構造は次のようになります。

home
about
 - slide one (view)
 - slide two (view)
 - slide three (view)
other page
 - slide one (view)
 - slide two (view)

したがって、言及されたスライドは、ビューからロードされた、異なるコンテンツタイプのアイテムです。

誰かが私を正しい方向に向けることができる場合、または質問の一部を解決する必要がある場合は、私に知らせてください。


人々がまだこれに興味があるなら、私はここに私の解決策を与えます:

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
  ->propertyCondition('status', 1) /* Status to make sure it is published */
  ->propertyCondition('type', array('page', 'webform')) /* get pages and webforms */
  ->fieldOrderBy('field_volgorde', 'value', 'ASC') /* a custom field to set the order */
  ->range(0, 9999); /* amount of pages to get */
$result = $query->execute();
$nodes = node_load_multiple(array_keys($result['node']));

foreach($nodes as $node): 
    // Do your code magic
endforeach;

Foreach内では、次のコード例を使用してフィールドをエコーできます。

echo $node->title;
echo $node->body['und'][0]['value'];
// ['und'] = language undefined

ご不明な点がございましたら、お気軽にお問い合わせください。

2
Sander Koedood

ページの各セクション(home、about、other)にtextareaフィールドを持つカスタムコンテンツタイプを作成します。

コンテンツタイプのカスタムテンプレートを作成し、すべてのフィールドを適切な場所に出力します。ビューをブロックとして追加できます。

理にかなっていますか?

0
Scott Joudry

次のコードを使用して、タイプのすべてのノードを取得します。

$type = 'example';
$query = db_select('node', 'n')
  ->fields('n', array('nid'))
  ->condition('type', $type)
  ->condition('status', 1);
$nids = $query->execute()->fetchCol();
$nodes = node_load_multiple($nids);
2
Henry

最終的に、次のコードを使用してすべてのページを取得しました。

<?php
$type = "page"; // machine name for Basic Page
$nodes = node_load_multiple(array(), array('type' => $type)); 
foreach($nodes as $node):
    // code here
endforeach;
?>
1
Sander Koedood