-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmisc-pager.html
117 lines (114 loc) · 4.02 KB
/
misc-pager.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Ethnamドキュメント</title>
<link href="css/style.css" media="all" rel="stylesheet" />
<link href="css/github.css" media="all" rel="stylesheet" />
</head>
<body>
<p><a href=".">目次</a></p>
<div class="blob instapaper_body">
<article class="markdown-body entry-content">
<h1>ページャを作成する</h1>
<ul>
<li>概要
<ul>
<li>Pagerを作成する例 </li>
<li>ページャを表示するテンプレートの例 </li>
<li>できあがり </li>
<li>
</li>
</ul></li>
<li>comment </li>
</ul>
<h2>ページャを作成する</h2>
<hr />
<p>書いた人:shoma</p>
<hr />
<h2>概要</h2>
<p>検索結果やリストの一覧などのページにGoogle風のページリンクを作成します。</p>
<p>Ethna_Util::getDirectLinkList()を使用してページャを作成します。 Ethna_Util::getDirectLinkList(全データ数, 表示オフセット, 1ページあたりに表示する件数)となっています。以下の例ではstartが指定されるオフセットになっています。</p>
<h3>Pagerを作成する例</h3>
<pre><code>function perform()
{
$this->total = 100;
$this->offset = $this->af->get('start') == null ? 0 : $this->af->get('start');
$this->count = 10;
$this->getPager();
return 'index';
}
/**
*
* ページャの作成
*
* @access public
* @return void
*/
function getPager(){
$pager = Ethna_Util::getDirectLinkList($this->total, $this->offset, $this->count);
$next = $this->offset + $this->count;
if($next < $this->total){
$last = ceil($this->total / $this->count);
$this->af->setApp('hasnext', true);
$this->af->setApp('next', $next);
$this->af->setApp('last', ($last * $this->count) - $this->count);
}
$prev = $this->offset - $this->count;
if($this->offset - $this->count >= 0){
$this->af->setApp('hasprev', true);
$this->af->setApp('prev', $prev);
}
$this->af->setApp('current', $this->offset);
$this->af->setApp('link', 'localhost');
$this->af->setApp('pager', $pager);
}</code></pre>
<h3>ページャを表示するテンプレートの例</h3>
<p>テンプレート側では</p>
<pre><code>{if $app.hasprev}
<a href="{$app.link}?start=0">最初</a>&nbsp;<a href="{$app.link}?start={$app.prev}">&lt;&lt;</a>
{else}
最初&nbsp;&lt;&lt;
{/if}
{foreach from=$app.pager item=page}
{if $page.offset == $app.current}
<strong>{$page.index}</strong>
{else}
<a href="{$app.link}?start={$page.offset}">{$page.index}</a>
{/if}
&nbsp;
{/foreach}
{if $app.hasnext}
<a href="{$app.link}?start={$app.next}">&gt;&gt;</a>
&nbsp;<a href="{$app.link}?start={$app.last}">最後</a>
{else}
&gt;&gt;&nbsp;最後
{/if}</code></pre>
<h3>できあがり</h3>
<h3></h3>
<p><a href="plugin=attach&refer=ethna-document-dev_guide-misc-pager&openfile=pager.png.html" title="pager.png"><img src="http://ethna.jp/index.php?plugin=ref&page=ethna-document-dev_guide-misc-pager&src=pager.png" alt="pager.png" title="pager.png" /></a></p>
<h2>comment</h2>
<ul>
<li>
<p>最後の一行って「最後 >>」ではなくて、「>> 最後」では? -- yanai</p>
<ul>
<li>修正しておきました。 -- halt</li>
</ul>
</li>
<li>
<p>$this->af->get('start')→'start'はアクションフォームで定義してないため、リンク機能うまく動けないようです。 ActionFormにstartの定義を追加します。</p>
<p>var $form = array(
'start' => array(
'type' => VAR_TYPE_STRING,<br />
'form_type' => FORM_TYPE_HIDDEN,
),
);</p>
</li>
<li>スパムから復旧.たぶんこれでいいと思うんですけど.(2009/10/17) --sotarok</li>
</ul> </article>
</div>
<div class="site-footer">
@2015 <a href="https://twitter.com/DQNEO">DQNEO</a>
</div>
</body>
</html>