web-dev-qa-db-ja.com

ページャーをカスタマイズする方法

標準のポケットベルを出力するコードがあります。

print theme('pager');

それはこれを出力します:

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

HTMLを次のように変更するにはどうすればよいですか。

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

私はこのスレッドを調べました: https://www.drupal.org/node/387786 、関数を作成しましたbartik_preprocess_custom_pagerとファイルcustom-pager.tpl.php Barticテーマテンプレート内にありますが、機能させることができません。

print theme('custom_pager');

何も出力しません。ポケットベルのHTML出力をカスタマイズして、1ページだけのHTML出力を作成するにはどうすればよいですか?

7
user4035

上記の私のコメントで指摘したように、詳細のほとんどは、上記の実装では間違っています。幸い、Drupal 7には、ポケットベル用のsixテーマ関数があります:

これらにより、必要なほとんどのカスタマイズを行うことができます。 Drupalテーマの機能()を詳細に参照できる)をオーバーライドする方法については、優れたstackexchangeの回答があります

最後に、ページャーを1ページだけオーバーライドすることを述べました。 CSSだけでこれを実行する価値はあると思いますが、そうでない場合は、プリプロセス関数にページャーが含まれている$variables配列の一部をオーバーライドするだけでよい場合があります(私はわかりません) preprocess_pageまたはpreprocess_nodeの場合、またはプリプロセス関数のいずれかからアクセスできる場合).

6
bhotel

これは前の投稿からの私の回答です

theme_pager を実装する場合、いくつかのテーマ関数を使用してページャーレンダー配列全体を最初から作成することが期待されます- theme_pager_firsttheme_pager_previous 、- theme_pager_next および theme_pager_last 。これは、1つのクラスを追加するのにまったく手間がかかるようです。

theme_pager は最後に theme_item_list を呼び出して最終的なレンダー配列を作成するため、 hook_preprocess_HOOK を使用してdrupalはそれを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';
    }
  }
}

このフックを追加した後、キャッシュをクリアします。

[〜#〜] update [〜#〜]:最初のli.pager-itemを見つけます:

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

UPDATE2:最初と最後のli.pager-itemを検索します:

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';
    }
  }
}
2
Scott Joudry