標準のポケットベルを出力するコードがあります。
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="#"><</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="#">></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出力を作成するにはどうすればよいですか?
上記の私のコメントで指摘したように、詳細のほとんどは、上記の実装では間違っています。幸い、Drupal 7には、ポケットベル用のsixテーマ関数があります:
これらにより、必要なほとんどのカスタマイズを行うことができます。 Drupalテーマの機能()を詳細に参照できる)をオーバーライドする方法については、優れたstackexchangeの回答があります 。
最後に、ページャーを1ページだけオーバーライドすることを述べました。 CSSだけでこれを実行する価値はあると思いますが、そうでない場合は、プリプロセス関数にページャーが含まれている$variables
配列の一部をオーバーライドするだけでよい場合があります(私はわかりません) preprocess_page
またはpreprocess_node
の場合、またはプリプロセス関数のいずれかからアクセスできる場合).
theme_pager を実装する場合、いくつかのテーマ関数を使用してページャーレンダー配列全体を最初から作成することが期待されます- theme_pager_first 、 theme_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';
}
}
}