Menyesuaikan item pertama dalam tampilan

7

Sebagai blok di beranda saya mencoba menampilkan:

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

di mana setiap <li> mewakili sebuah simpul, dan gambar / teks yang disediakan oleh bidang CCK dilampirkan pada setiap simpul.

Saat ini, saya menggunakan tampilan blok untuk menghasilkan simpul 2-4, dan tampilan lampiran untuk menyajikan simpul pertama seperti yang diuraikan di sini: http://www.agileapproach.com/blog-entry/the-views2-attachment-display

Masalahnya adalah output saya berakhir seperti ini:

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

Saya mungkin dapat menekuk output yang sesuai dengan tujuan saya, tetapi itu akan melibatkan banyak templating dan konfigurasi. Saya juga ingin menghindari menggunakan CSS dan / atau JavaScript untuk memodifikasi output, kecuali itu satu-satunya pilihan saya.

Mengingat ini, apa cara termudah untuk mendapatkan output lebih dekat dengan apa yang saya inginkan?

Sunting: inilah beberapa kode php kasar yang saya gunakan di bidang kode php customfield (berdasarkan saran Jeremy French: Ini kode yang saya gunakan di customfield Kode PHP saya:

<?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>";
  }
?>
Daniel Nitsche
sumber

Jawaban:

5

Anda dapat melakukan sesuatu dengan views_customfield .

Anda menambahkan bidang php, dapatkan hanya untuk menampilkan markup yang Anda inginkan (tidak mengandung elemen) dan menghasilkan nilai hanya untuk nomor baris 1.

Jeremy French
sumber
Ini terlihat hebat! Sepertinya ini cara yang bersih untuk melakukannya.
Daniel Nitsche
8

Saya pribadi menggunakan fungsi preproses untuk melakukan ini, sesuatu seperti berikut ini:

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

Saya tidak yakin apakah saya memahami pertanyaan Anda dengan benar, tetapi saya yakin Anda bisa menggunakan modul Semantic Views untuk ini. Jika Anda mengatur Gaya di bawah Pengaturan Dasar ke Tampilan Semantik, Anda akan memiliki opsi di bawah pengaturan Tampilan Semantik untuk menetapkan "atribut kelas", yang akan membantu Anda menargetkan item daftar pertama dalam tampilan Anda dalam gaya tema Anda. file css.

Jay
sumber
Tampilan Semantic tampak hebat, dan pasti akan membersihkan output, tapi saya ingin menghindari mengandalkan CSS untuk menyembunyikan markup tambahan yang akan saya hasilkan. Kalau tidak, saya mungkin hanya akan menggunakan li: first-child untuk melakukan apa yang saya butuhkan.
Daniel Nitsche
Saya hanya ingin tahu, karena saya masih belajar sendiri, tetapi apa alasan di balik tidak ingin menggunakan CSS untuk memodifikasi item pertama dalam tampilan daftar?
Jay
1
kebanyakan HTML tambahan yang akan dihasilkannya. Contoh kasus: situs yang sedang saya kerjakan akan digunakan oleh beberapa pengguna dengan koneksi dialup - setiap byte dihitung dalam kasus ini. Juga, menggunakan CSS terasa seperti hack: pemeliharaan bijaksana, administrator tidak harus memodifikasi CSS untuk memodifikasi output HTML. Itu harus dilakukan di Drupal.
Daniel Nitsche
4

Solusi termudah adalah dengan templat khusus. Tidak perlu banyak pekerjaan. Dengan informasi tema yang tersedia di antarmuka tampilan Anda dapat melihat templat apa yang perlu Anda ubah. Yang perlu Anda lakukan adalah menambahkan beberapa kode untuk mencetak item tambahan untuk simpul pertama. Tampilan akan berulang melalui setiap baris, jadi harus mudah.

googletorp
sumber