Để thực hiện những gì bạn muốn làm bằng Chế độ xem và không phải một số mô-đun được đóng góp khác, như Bảng thuật ngữ, bạn sẽ phải xác định và chủ đề chế độ xem của riêng bạn.
Trước tiên, bạn sẽ cần phải tạo một nút mới Xem. Tôi sẽ gọi nó là myglossary, nhưng nó không quan trọng. Đảm bảo rằng một trong các trường của bạn là tiêu đề nút và được sắp xếp theo tiêu đề nút, tăng dần. Nói cách khác, thứ tự chữ cái. Tôi giả sử bạn sẽ sử dụng kiểu hàng không định dạng (mặc định), nhưng bạn có thể làm điều gì đó tương tự với các kiểu hàng khác.
Sau đó, bạn sẽ phải tham gia chủ đề của mình. Từ thư mục views/theme, sao chép mẫu views-view-unformatted.tpl.php vào thư mục của chủ đề bạn đang sử dụng. Đổi tên thành chế độ xem-view-unformatted - myglossary.tpl.php để nó sẽ chỉ được sử dụng cho chế độ xem này. Sau đó, mở tập tin template.php của chủ đề của bạn, và thêm một chức năng preprocess:
//Change mytheme to your theme name
function mytheme_preprocess_views_view_unformatted__myglossary(&$vars) {
//If you have the devel module installed,
//this is a great way to see all the available variables
//dpm($vars);
$results = $vars['view']->result;
$rows = $vars['rows'];
//Sort rows into letter sets
$letters = array();
$i = 0;
foreach ($results as $result) {
$first_letter = strtolower(substr($result->node_title, 0, 1));
if (is_array($letters[$first_letter])) {
array_push($letters[$first_letter], $rows[$i]);
}
else {
$letters[$first_letter] = array($rows[$i]);
}
$i++;
}
//Generate glossary navigation
$nav = '';
foreach($letters as $letter => $rows) {
$num = count($rows);
$cap_letter = strtoupper($letter);
$nav .= <<<NAV
<a href="#$letter" class="letter_link">
$cap_letter
</a>
($num)
NAV;
}
//Add to variables
$vars['nav'] = $nav;
$vars['letters'] = $letters;
}
Sau đó, bạn sẽ phải thay đổi mẫu tập tin bạn đã sao chép qua trước đó để thêm trong điều hướng, và để sản xuất các hàng theo kiểu bảng chú giải thuật ngữ:
<?php if (!empty($title)): ?>
<h3><?php print $title; ?></h3>
<?php endif; ?>
<?php if (!empty($nav)): ?>
<div id="glossary_nav">
<?php print $nav; ?>
</div>
<?php endif; ?>
<?php foreach ($letters as $letter=>$rows): ?>
<a name="<?php print $letter ?>"></a>
<h4 class="letter">
<?php print strtoupper($letter); ?>
</h4>
<?php foreach ($rows as $id=>$row): ?>
<div class="<?php print $classes[$id]; ?>">
<?php print $row; ?>
</div>
<?php endforeach;?>
<?php endforeach; ?>
Bạn có thể cần phải tạo lại sổ đăng ký chủ đề để các thay đổi của bạn hiển thị trên trang web của bạn.
Cách tiếp cận này có thể hoạt động, nhưng bạn không cần thực hiện việc này. Bạn có thể đạt được cùng một ảnh hưởng mà không cần bất kỳ mã tùy chỉnh nào. – messedup