Tùy chỉnh mục đầu tiên trong chế độ xem


7

Là một khối trên trang chủ của tôi, tôi đang cố gắng xuất ra:

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

trong đó mỗi <li> đại diện cho một nút và hình ảnh / văn bản được cung cấp bởi các trường CCK được đính kèm với mỗi nút.

Hiện tại, tôi đang sử dụng chế độ xem khối để xuất các nút 2-4 và chế độ xem Đính kèm để hiển thị nút đầu tiên như được nêu ở đây: http : //www.agilimroach.com/blog-entry/the-view2-attachment-display

Vấn đề là đầu ra của tôi kết thúc giống như thế này:

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

Tôi có thể có thể uốn cong đầu ra đó phù hợp với mục đích của tôi, nhưng nó sẽ liên quan đến rất nhiều cấu hình và cấu hình. Tôi cũng muốn tránh sử dụng CSS và / hoặc JavaScript để sửa đổi đầu ra, trừ khi đó là lựa chọn duy nhất của tôi.

Vì điều này, cách dễ nhất để đưa đầu ra gần hơn với những gì tôi cần là gì?

Chỉnh sửa: đây là một số mã php thô tôi đang sử dụng trong trường mã php của trường tùy chỉnh (dựa trên đề xuất của Jeremy Pháp: Đây là mã tôi đang sử dụng trong trường tùy chỉnh Mã PHP của tôi:

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

Câu trả lời:


5

Bạn có thể làm một cái gì đó với Views_customfield .

Bạn thêm trường php, chỉ lấy nó để hiển thị đánh dấu bạn muốn (không chứa phần tử) và chỉ xuất giá trị cho hàng số 1.


Điều này có vẻ tuyệt vời! Nó có vẻ như là một cách sạch sẽ để làm điều đó.
Daniel Nitsche

8

Cá nhân tôi sử dụng các chức năng tiền xử lý để làm điều này, đại loại như sau:

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

6

Tôi không chắc liệu tôi có hiểu chính xác câu hỏi của bạn không, nhưng tôi tin rằng bạn có thể sử dụng mô-đun Semantic Views cho việc này. Nếu bạn đặt Kiểu trong Cài đặt cơ bản thành Chế độ xem ngữ nghĩa, thì bạn sẽ có tùy chọn trong cài đặt Chế độ xem ngữ nghĩa để đặt "thuộc tính hạng nhất", điều này sẽ giúp bạn nhắm mục tiêu mục danh sách đầu tiên trong chế độ xem theo chủ đề của bạn. tập tin css.


Chế độ xem ngữ nghĩa trông rất tuyệt và chắc chắn sẽ dọn sạch đầu ra, nhưng tôi muốn tránh dựa vào CSS để ẩn phần đánh dấu bổ sung mà tôi sẽ xuất ra. Nếu không, tôi có lẽ chỉ cần sử dụng li: con đầu lòng để làm những gì tôi cần.
Daniel Nitsche

Tôi chỉ tò mò, vì tôi vẫn đang tự học, nhưng lý do đằng sau không muốn sử dụng CSS để sửa đổi mục đầu tiên trong chế độ xem danh sách là gì?
Jay

1
chủ yếu là HTML bổ sung mà nó sẽ tạo ra. Case in point: trang web tôi đang làm việc sẽ được sử dụng bởi một số người dùng có kết nối quay số - mỗi byte đều được tính trong các trường hợp này. Ngoài ra, sử dụng CSS có cảm giác như hack: bảo trì khôn ngoan, quản trị viên không nên sửa đổi CSS để sửa đổi đầu ra HTML. Điều đó nên được thực hiện trong Drupal.
Daniel Nitsche

4

Giải pháp đơn giản nhất là với một mẫu tùy chỉnh. Nó không cần phải có rất nhiều công việc mặc dù. Với thông tin theo chủ đề có sẵn trong giao diện khung nhìn, bạn có thể thấy mẫu nào bạn cần thay đổi. Tất cả những gì bạn cần làm là thêm một số mã để in các mục bổ sung cho nút đầu tiên. Lượt xem sẽ lặp qua từng hàng, vì vậy sẽ dễ dàng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.