Cách tùy chỉnh máy nhắn tin


7

Tôi có một mã, đầu ra một máy nhắn tin tiêu chuẩn:

print theme('pager');

nó xuất ra điều này:

<h2 class="element-invisible">Pages</h2>
<div class="item-list">
<ul class="pager"><li class="pager-current first">1</li>
<li class="pager-item"><a title="Go to page 2" href="/drupal/node?page=1">2</a></li>
<li class="pager-item"><a title="Go to page 3" href="/drupal/node?page=2">3</a></li>
<li class="pager-next"><a title="Go to next page" href="/drupal/node?page=1">next ›</a></li>
<li class="pager-last last"><a title="Go to last page" href="/drupal/node?page=5">last »</a></li>
</ul>

Làm cách nào tôi có thể thay đổi HTML thành một cái gì đó như thế này:

<ul class="pagination">
    <li><a href="#">&lt;</a></li>
    <li><a href="#">1</a></li>
    <li><a href="#" class="active">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">&gt;</a></li>
</ul>

Tôi đã xem xét chủ đề này: https://www.drupal.org/node/387786 , đã tạo một chức năng bartik_preprocess_custom_pagervà một tệp custom-pager.tpl.phptrong các mẫu chủ đề Bartic của tôi, nhưng tôi không thể làm cho nó hoạt động.

print theme('custom_pager');

đầu ra không có gì. Có ai biết, làm cách nào tôi có thể tùy chỉnh đầu ra HTML cho máy nhắn tin, tạo một trang chỉ cho 1 trang không?


2
Bạn cũng cần khai báo chức năng chủ đề mới hook_theme(), hoặc Drupal sẽ không biết có chức năng chủ đề mới. Xóa bộ nhớ cache sau khi thay đổi một chủ đề.
kiamlaluno

@kiamlaluno Tôi đã thêm mẫu máy nhắn tin vào chức năng và nó được gọi. Nhưng làm thế nào tôi có thể chuyển các biến thích hợp vào máy nhắn tin? Họ đã được thông qua tự động, khi tôi gọi theme('pager');. Bây giờ tôi không nhận được chúng.
dùng4035

@kiamlaluno Chào. Có thể tùy chỉnh một máy nhắn tin bên trong một mô-đun? Bằng cách tạo một hàm mymodule_pager ($ biến)?
dùng4035

Bạn cũng có thể làm điều đó từ một mô-đun, nhưng trong trường hợp đó bạn cũng cần phải thực hiện một hook khác.
kiamlaluno

1
Các chức năng chủ đề được $variablestự động; bạn chỉ cần thực hiện hook_theme()chính xác. Để thay đổi chức năng chủ đề từ một mô-đun, hook để thực hiện là hook_theme_registry_alter().
kiamlaluno

Câu trả lời:


6

Như đã chỉ ra trong nhận xét của tôi ở trên, hầu hết các chi tiết đều sai trong quá trình thực hiện của bạn ở trên. May mắn thay trong Drupal 7, có sáu chức năng theo chủ đề cho máy nhắn tin:

Chúng sẽ cho phép bạn thực hiện hầu hết các tùy chỉnh mà bạn cần. Có một câu trả lời stackexchange tốt về cách ghi đè các hàm chủ đề Drupal () mà bạn có thể tham khảo để biết chi tiết .

Cuối cùng, bạn đã đề cập rằng bạn muốn ghi đè máy nhắn tin chỉ cho một trang. Tôi vẫn nghĩ rằng điều này có thể đáng làm với CSS, nhưng trong trường hợp không, bạn có thể chỉ ghi đè lên các phần của $variablesmảng trong bất kỳ chức năng tiền xử lý nào có chứa máy nhắn tin (tôi không biết trên đỉnh đầu của mình nếu nó không preprocess_pagehoặc preprocess_nodenếu nó có thể truy cập được từ bất kỳ chức năng tiền xử lý nào).


2

Đây là câu trả lời của tôi từ một bài viết trước .

Nếu bạn triển khai theme_pager, bạn sẽ được yêu cầu tạo toàn bộ mảng kết xuất máy nhắn tin từ đầu bằng cách sử dụng một số chức năng chủ đề - theme_pager_first , theme_pager_preingly , theme_pager_nexttheme_pager_last . Điều đó có vẻ như hoàn toàn quá nhiều công việc để thêm một lớp.

theme_pager gọi theme_item_list ở cuối để xây dựng mảng kết xuất cuối cùng, bạn có thể sử dụng hook_pre process_HOOK để sửa đổi mảng kết xuất máy nhắn tin trước khi drupal kết xuất nó thành HTML.

function THEME_preprocess_item_list(&$vars) {
  // make sure we're dealing with a pager item list
  if (isset($vars['attributes']['class']) && in_array('pager', $vars['attributes']['class'])) {
    // make sure there are items
    if (count($vars['items'])) {
      $vars['items'][0]['class'][] = 'test';
    }
  }
}

Xóa bộ nhớ cache sau khi thêm hook này.

CẬP NHẬT : tìm li.pager-item đầu tiên:

function THEME_preprocess_item_list(&$vars) {
  // make sure we're dealing with a pager item list
  if (isset($vars['attributes']['class']) && in_array('pager', $vars['attributes']['class'])) {
    // loop the items and find the first .pager-item
    foreach ($vars['items'] as $index => $item) {
      if (in_array('pager-item', $item['class'])) {
        $vars['items'][$index]['class'][] = 'test';
        break;
      }
    }
  }
}

CẬP NHẬT2 : tìm li.pager-item đầu tiên và cuối cùng:

function THEME_preprocess_item_list(&$vars) {
  // make sure we're dealing with a pager item list
  if (isset($vars['attributes']['class']) && in_array('pager', $vars['attributes']['class'])) {

    // loop the items and find the first and last .pager-item
    $first = FALSE;
    $last = NULL;
    foreach ($vars['items'] as $index => $item) {
      if (in_array('pager-item', $item['class'])) {

        // first
        if (!$first) {
          $vars['items'][$index]['class'][] = 'test';
          $first = TRUE;
        }

        // last
        $last = $index;
      }
    }

    if (!empty($last)) {
      $vars['items'][$last]['class'][] = 'test2';
    }
  }
}
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.