ビューの最初のアイテムをカスタマイズする


7

私のホームページのブロックとして、出力しようとしています:

<ul>
  <li><a><img><p>Node 1</p></a></li>
  <li><a>Node 2</a></li>
  <li><a>Node 3</a></li>
  <li><a>Node 4</a></li>
</ul>

ここで、各<li>はノード、および各ノードに接続されたCCKフィールドによって提供される画像/テキストを表します。

現在、ブロックビューを使用してノード2〜4を出力し、アタッチメントビューを使用して最初のノードを次のように表示しています:http : //www.agileapproach.com/blog-entry/the-views2-attachment-display

問題は、私の出力が次のようになることです。

<div class="attachment attachment-before">
  <div class="view view-homepage-news ..">
    <div class="item-list">
      <ul>
        <li class="views-row ...">  
          <a><img><p>Node 1</p></a>            
        </li>
      </ul>
    </div>  
  </div> <!-- /.view -->
</div>
<div class="item-list">
  <ul>
    <li class="views-row ..."><a>Node 2</a></li>
    <li class="views-row ..."><a>Node 3</a></li>
    <li class="views-row ..."><a>Node 4</a></li>
  </ul>
</div>

その出力は目的に合わせて曲げることができますが、多くのテンプレートと構成が必要になります。また、唯一のオプションでない限り、CSSやJavaScriptを使用して出力を変更することも避けたいです。

これを踏まえて、出力を必要なものに近づける最も簡単な方法は何ですか?

編集:カスタムフィールドのphpコードフィールドで使用している大まかなphpコードは次のとおりです(Jeremy Frenchの提案に基づいています:PHPコードのカスタムフィールドで使用しているコードは次のとおりです:

<?php
  ++$static;
  if ($static == 1) {
    $nd=node_load($data->nid);
    $img_path = imagecache_create_path('news_image_thumbnail', $nd->field_image[0]['filepath']);
    print '<a><img src="' . $img_path . '"><p>Node 1</p></a>';
  } else {
    print "<a>Node $static</a>";
  }
?>

回答:


5

あなたはviews_customfieldで何かをすることができます。

phpフィールドを追加し、必要なマークアップ(要素を含まない)を表示するためだけに取得し、行番号1の値のみを出力します。


いいね!それはそれを行うためのきれいな方法のようです。
Daniel Nitsche

8

私は個人的にこれを行うために次のような前処理関数を使用しています:

function HOOK_preprocess_views_view_fields(&$vars) {
  if ($vars['view']->name == 'VIEW_NAME' && $vars['view']->row_index == 1) {
    // Do stuff here.
  }
}

6

あなたの質問を正しく理解しているかどうかはわかりませんが、このためにセマンティックビューモジュールを使用できると思います。[基本設定]の[スタイル]を[セマンティックビュー]に設定すると、セマンティックビューの設定に[ファーストクラス属性]を設定するオプションが表示され、テーマのスタイルでビューの最初のリストアイテムをターゲティングできます。 cssファイル。


セマンティックビューは見栄えがよく、出力を確実にクリーンアップしますが、出力する余分なマークアップを非表示にするためにCSSに依存することは避けたいです。それ以外の場合は、おそらくli:first-childを使用して、必要なことを実行します。
Daniel Nitsche

私はまだ自分自身を学んでいるので、興味があるだけですが、CSSを使用してリストビューの最初の項目を変更したくない理由は何ですか?
Jay

1
主にそれが生成する追加のHTML。適例:私が取り組んでいるサイトは、ダイヤルアップ接続を使用する一部のユーザーによって使用されます-これらの場合、すべてのバイトがカウントされます。また、CSSを使用することはハックのように感じられます。メンテナンスに関しては、管理者がCSSを変更してHTML出力を変更する必要はありません。これはDrupalで行う必要があります。
Daniel Nitsche

4

最も簡単な解決策は、カスタムテンプレートを使用することです。それは多くの仕事である必要はありませんが。ビューインターフェースで利用可能なテーマ情報を使用して、変更する必要のあるテンプレートを確認できます。あなたがする必要があるのは、最初のノードの余分なアイテムを印刷するためのコードを追加することだけです。ビューは各行をループするため、簡単です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.