Kết hợp hai cột trong bảng Lượt xem


7

Tôi tiếp tục có những yêu cầu khác nhau và tôi luôn bị mắc kẹt trong Lượt xem. Lần này yêu cầu là kết hợp hai cột / trường của bảng xem nhưng hiển thị nó trong các hàng khác nhau.

Ví dụ: các trường tôi hiện có: (Dưới đây là Hình ảnh được thêm vào)

nhập mô tả hình ảnh ở đây

Đầu ra của Chế độ xem trong Bảng (Đa hiệu biệt danh được phân tách bằng dấu phẩy)

nhập mô tả hình ảnh ở đây

Trong khi đưa trường Nhiều giá trị vào các hàng khác nhau

nhập mô tả hình ảnh ở đây

Trong cài đặt bảng, tôi đã kết hợp hai trường như

nhập mô tả hình ảnh ở đây

tức là TênTên Nick nhưng điều đó chỉ mang lại kết quả như:

(Ở đây Tên Nick được hiển thị sau Tên)

nhập mô tả hình ảnh ở đây

Nhưng các yêu cầu tôi cần hiển thị là: (Tên và Tên Nick trong Hàng riêng biệt nhưng ở cùng một cột). Cột cần được sắp xếp giống như chức năng Sắp xếp bảng xem bình thường.

nhập mô tả hình ảnh ở đây

Có bất kỳ cài đặt nào trong Chế độ xem cho phép tôi thực hiện việc này không? Hoặc làm thế nào tôi có thể thực hiện điều này?

Chỉnh sửa: Nếu điều này là không thể và bất kỳ ai cũng có thể hướng dẫn tôi xây dựng truy vấn tùy chỉnh cho điều này thì tôi rất biết ơn.

Chỉnh sửa 2 : Truy vấn SQL từ Nhật ký lượt xem là: (Truy vấn này xuất hình ảnh thứ 2 từ trên xuống)

SELECT node.title AS node_title, node.nid AS nid, field_data_field_nick_names.delta AS field_data_field_nick_names_delta, field_data_field_nick_names.language AS field_data_field_nick_names_language, field_data_field_nick_names.bundle AS field_data_field_nick_names_bundle, field_data_field_nick_names.field_nick_names_value AS field_data_field_nick_names_field_nick_names_value, field_data_field_nick_names.field_nick_names_format AS field_data_field_nick_names_field_nick_names_format, node.created AS node_created, 'node' AS field_data_field_nick_names_node_entity_type, 'node' AS field_data_field_ages_node_entity_type, 'girls:page' AS view_name
FROM 
{node} node
LEFT JOIN {field_data_field_nick_names} field_data_field_nick_names ON node.nid = field_data_field_nick_names.entity_id AND (field_data_field_nick_names.entity_type = 'node' AND field_data_field_nick_names.deleted = '0')
WHERE (( (node.status = '1') AND (node.type IN  ('girlss')) ))
ORDER BY node_created DESC

Xin lỗi vì sự hiểu nhầm. Câu trả lời của tôi không giải quyết vấn đề của bạn. Và tôi đã loại bỏ nó.
milkovsky

Đầu tiên hãy thử nghĩ truy vấn SQL nào sẽ cho bạn kết quả như vậy. Tôi buộc phải suy nghĩ nhưng tôi đã không tạo ra truy vấn thích hợp. Nếu bạn có thể chỉ cho tôi truy vấn SQL mà bạn muốn, tôi có thể giúp bạn thực hiện với các lượt xem.
milkovsky

Cảm ơn bạn đã nỗ lực của bạn. Tôi không thể viết truy vấn ở đây, tôi sẽ chỉnh sửa câu hỏi.

Bạn có chắc chắn rằng truy vấn này thực hiện chính xác những gì bạn muốn?
milkovsky

1
@neok, đừng cảm thấy xấu hổ, ai không thích con gái? đôi khi lạc đề là những gì các nhà phát triển cần để có được tâm trạng. chúc mừng, thứ sáu của nó :)

Câu trả lời:


4

Bạn đã cấu trúc dữ liệu của mình theo cách mà điều này không thể được thực hiện với một truy vấn SQL duy nhất. Bạn sẽ luôn hỏi cơ sở dữ liệu về hai điều riêng biệt: (1) danh sách những người dựa trên tên thật của họ và (2) danh sách dựa trên tên nick của họ.

Nhưng nó không phải theo cách này.

Cách dễ nhất để thực hiện Ảnh 4, cho đến nay, là luôn đại diện cho "Tên" của một người dưới dạng "Tên Nick" bổ sung.

Vì vậy, "Daina" nên có 4 Tên Nick: "Kristi", "Rita", "Sweetie" và "Daina". Sau đó, tất cả những gì bạn cần yêu cầu cơ sở dữ liệu là một danh sách các tên nick.

Đây có lẽ không phải là câu trả lời bạn đang tìm kiếm. Nhưng tôi sẽ lập luận rằng đó là cách chính xác hơn để lưu trữ dữ liệu của bạn. Hãy nghĩ về trường "Tên Nick" không phải là một danh sách các tên thay thế, mà là một danh sách tất cả các tên mà người đó được gọi là. Dựa trên các yêu cầu của tình huống của bạn, dù sao đó cũng giống như bạn thực sự theo đuổi. Đó là một mô hình đầy đủ hơn cho dữ liệu tên của bạn.


Tôi cung cấp cho bạn tiền thưởng vì ý kiến ​​của bạn là đúng theo quan điểm kiến ​​trúc, nhưng nó vẫn không đáp ứng yêu cầu của tôi.

1

Có thể đạt được điều này bằng cách ghi đè tệp mẫu xem : views-view-table.tpl.php.

Đầu tiên bạn cần đặt nhiều giá trị trong các hàng khác nhau.

Sau đó, trong tệp mẫu, bạn nên kiểm tra từng hàng nếu Tên giống với hàng trước. Nếu không in tên và tuổi và thêm một hàng mới trong mã bao gồm tên hiệu và tuổi. Nếu tên giống với tên trước đó, thì chỉ in tên hiệu và tuổi.

Tôi đã cố gắng giải thích nó về mặt lý thuyết, nhưng tôi có thể giúp thực hiện nếu bạn gặp khó khăn.

Các bước:

  1. Ghi đè mẫu xem: Bạn cần sao chép views-view-table.tpl.phptệp trong thư mục chủ đề của mình. Tập tin này nằm dưới mô-đun Lượt xem views/theme/views-view-table.tpl.php.
  2. Đổi tên tệp mẫu để nó chỉ áp dụng cho chế độ xem cụ thể đó : views-view-table--YOUR-VIEW.tpl.php. Bạn nên đặt tên máy của chế độ xem của bạn cách nhau bằng 2 dấu gạch ngang.
  3. Bạn cần sửa đổi khối mã sau trong tệp mẫu này:

<?php foreach ($rows as $row_count => $row): ?>
  <?php // dpm($row) // You can use dpm() function to print out the contents of $row array. ?>
  <tr <?php if ($row_classes[$row_count]) { print 'class="' . implode(' ', $row_classes[$row_count]) .'"';  } ?>>
    <?php foreach ($row as $field => $content): ?>
      <td <?php if ($field_classes[$field][$row_count]) { print 'class="'. $field_classes[$field][$row_count] . '" '; } ?><?php print drupal_attributes($field_attributes[$field][$row_count]); ?>>
        <?php print $content; ?>
      </td>
    <?php endforeach; ?>
  </tr>
<?php endforeach; ?>

Cảm ơn bạn vì câu trả lời. Tôi vẫn là người mới trong Drupal và Lượt xem là vấn đề đau đầu nhất của tôi cho đến bây giờ. 2 ngày trước tôi đã mua Views Cookbookvà đã cố gắng nắm bắt cách nó hoạt động đúng nhưng nó không giải thích bất cứ điều gì trong trường hợp của tôi. Vì vậy, một triển khai mẫu sẽ rất rất hữu ích.

Tôi đã cập nhật câu trả lời của mình. Tôi khuyên bạn nên cài đặt mô-đun Devel . Và sử dụng dpm()chức năng để in ra các biến / mảng theo cách thân thiện với người dùng.
ЕЕннн

Cảm ơn bạn đã đưa ra gợi ý, nó rất hữu ích. Tuy nhiên, kết quả không phải là cái mà tôi đang tìm kiếm, tôi có một số ý tưởng về cách làm việc với viewstệp mẫu. Tôi sẽ xem xét nếu tôi có thể thêm TênTên Nick trong cùng một cột nhưng các hàng khác nhau với cách tiếp cận này

Mã tôi đã đăng không phải là một triển khai. Bạn nên làm một số logic, một cái gì đó như tôi mô tả : if ($content == $content_previous){}. Đây chỉ là một gợi ý.
ЕЕннн

0

OK, có vẻ như bạn đang kết hợp ba cột thành một, và sau đó được chia thành hai cột bạn yêu cầu và như vậy sẽ nhận được dữ liệu tùy ý. Hãy thử truy cập "Cài đặt kiểu" với các tùy chọn bạn có bây giờ, thay đổi định dạng thành "không được định dạng" và lưu. Bây giờ quay trở lại và đặt lại vào Bảng. Nên có tùy chọn để kết hợp các cột và chỉ cần chọn hai cột mà bạn muốn.

Tôi hi vọng cái này giúp được.


Không, chỉ là hai cột kết hợp thành Một, tôi đã thực hiện các cài đặt mà bạn đã nói. Có một tùy chọn để kết hợp các cột (mà tôi đã thử và giải thích trong câu hỏi) và tôi cũng đã đăng kết quả khi những kết hợp đó xảy ra. Có bất cứ điều gì tôi đang thiếu ở đây?

À, xin lỗi tôi không giúp được gì nhiều. Thử ẩn cột biệt danh và sau đó thử kết hợp hai tên còn lại?
KyleM

Tôi xin lỗi nếu bạn hiểu câu hỏi chính xác. Tôi muốn hiển thị trường biệt hiệu trong hàng Tên ... Tôi cũng đã chỉnh sửa câu hỏi, xin vui lòng xem.

0

Trong Cấu trúc -> Lượt xem -> cài đặt -> Kiểm tra "Hiển thị truy vấn SQL". Đi đến xem của bạn, nó hiển thị truy vấn.

FORMAT - Hiển thị: các trường, sau đó sử dụng "Toàn cầu: PHP" để viết truy vấn tùy chỉnh. Nếu bạn chưa cài đặt, hãy sử dụng liên kết này, https://drupal.org/project/view_php .

Sau khi chọn Toàn cầu: PHP - Bạn có thể sử dụng truy vấn đã được hiển thị và sau đó chúng tôi có thể làm như chúng tôi muốn. Tất cả các trường trên phải được kiểm tra với "Loại trừ khỏi màn hình" (ví dụ: Tên, tuổi, v.v.).


Tôi bị mắc kẹt với bước này bạn cung cấp. Tôi đã cố gắng thêm toàn cầu PHP như lĩnh vực nhưng tôi chỉ có thể nhìn thấy nơi để sử dụng PHP như value code, output codevv Trong trường hợp chính xác để tôi sử dụng các truy vấn này? Bạn có thể cho tôi gợi ý làm thế nào để sử dụng nó?

Bạn phải viết mã trong Mã đầu ra <? Php ...?> Nhấp vào Liên kết các biến có sẵn .. ví dụ: <? Php echo $ row-> name; ?> kiểm tra đầu ra của các biến có sẵn.
J Sinha

Tôi đã chỉnh sửa câu hỏi của mình bằng hình ảnh, nếu bạn có thể cung cấp cho tôi mẫu làm thế nào tôi có thể làm điều đó thì tôi rất biết ơn.

0

Xin lỗi, tôi không có thử nghiệm Drupal 7 tiện dụng, nhưng nếu bạn không ngại độ tuổi được nhóm lại với nhau, bạn có thể làm điều gì đó như thế này (ảnh chụp màn hình ở đây trong Drupal 6) mà tôi cho là khá giống với Drupal 7 .

Đầu tiên, tắt, lấy lĩnh vực bạn cần, trong trường hợp này tôi đã tạo ra một loại nội dung kêu gọi name_nick_agecùng với ba lĩnh vực nna_name, nna_nicknna_agerồi tạo ra một xem:

nhập mô tả hình ảnh ở đây

Và sau đó, bên trong Cài đặt kiểu cho Bảng, theo mặc định, bạn có một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

Rằng tôi đã đổi thành:

nhập mô tả hình ảnh ở đây

Thay đổi duy nhất là đặt Tên trong cột Nick. Điều này sau đó tạo ra bảng này:

nhập mô tả hình ảnh ở đây

Bạn có quyền truy cập vào cài đặt kiểu bằng cách nhấp vào thiết bị nhỏ ở bên phải Kiểu: Bảng và trong khi ảnh chụp màn hình cho Drupal 7 sẽ khác, tôi cá là chức năng này có trong đó.


Xin chào, cảm ơn thông tin trực quan. Tôi đã thử các bước như bạn đã nói, và kết quả là trong Hình thứ 3. Tôi đã đạt được như bạn nói, nhưng yêu cầu của tôi chính xác như ảnh 4 (tôi đã tạo bức ảnh đó bằng trình chỉnh sửa) vì họ muốn hàng có thể sắp xếp được.

AH! Thông tin mới! Bạn cần có khả năng sắp xếp kết hợp tên và biệt danh vào một danh sách theo thứ tự chữ cái lớn? (Tôi giả sử bạn có nghĩa là cột không phải hàng re: sort. Nếu sai, hãy cho tôi biết ý của bạn.)
Jimajamma

Vâng, tôi có nghĩa là cột (đã trộn lẫn). Ý tôi là cột sẽ chứa cả Tên và Tên Nick trong các hàng riêng biệt nên có thể sắp xếp được (giống như sắp xếp cột bình thường trong Chế độ xem).

Vui lòng thêm thông tin mới này vào câu hỏi của bạn vì nó thực sự làm tăng thêm sự phức tạp vì giờ đây nó không còn là vấn đề hiển thị nữa.
Jimajamma

Vâng, tôi cảm thấy như vậy, tôi bị mắc kẹt trong này kể từ tuần trước, thực sự.

0
   <?php $result = db_query("SELECT node.title AS node_title, node.nid AS nid, field_data_field_nick_names.delta AS field_data_field_nick_names_delta, field_data_field_nick_names.language AS field_data_field_nick_names_language, field_data_field_nick_names.bundle AS field_data_field_nick_names_bundle, field_data_field_nick_names.field_nick_names_value AS field_data_field_nick_names_field_nick_names_value, field_data_field_nick_names.field_nick_names_format AS field_data_field_nick_names_field_nick_names_format, node.created AS node_created, 'node' AS field_data_field_nick_names_node_entity_type, 'node' AS field_data_field_ages_node_entity_type, 'girls:page' AS view_name
    FROM 
    {node} node
    LEFT JOIN {field_data_field_nick_names} field_data_field_nick_names ON node.nid = field_data_field_nick_names.entity_id AND (field_data_field_nick_names.entity_type = 'node' AND field_data_field_nick_names.deleted = '0')
    WHERE (( (node.status = '1') AND (node.type IN  ('girlss')) ))
    ORDER BY node_created DESC");

    $fullname = "";
    $nickname = "";
    foreach($result as $rec)
    {   
        $fullname .= $rec->node_title.",";
        $nickname .= $rec->field_data_field_nick_names_delta.",";
    }
    echo $fullname;
    echo "<br>";
    echo $nickname;
?>

Kiểm tra xem kết quả có hiển thị hay khô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.