top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_1313

Drupal pager_query:Pager続き。今度は、Drupalサイト。当然モジュールかAPIであるんだろうな ・・・ 【今日のDrupal】

 2010-04-08
 さきほどの投稿に続き・・・
 ・Pear ページング(PEAR::Pager):Pear:pager を利用してデータベースからのクエリ結果をページング ・・・ 【Pearって便利】

 >  Pager流れ


 先の投稿では、Pearのライブラリを利用したが
 (それはそれで非常に便利)
 引き続き、別サイトにも、検索結果ページング機能を。


 こちらは、Drupalサイトなので、
 当然(?)モジュールかなんかであるだろう・・・と。


 最初は、モジュール調べて,
  ・Paging
   というモジュールがあったので、
   これかな? ・・・ と思ったけど、
  これは、
  ・ひとつのnode内で、
   <!--pagebreak--> と入れると
   nodeを分けてくれて 頁遷移できる・・・というものですね。


 ・・・と思ったら、

 Pager は、コア機能であるんじゃないですか。
 なぁ~んだ。


  追記に  ▼


FC2ブログランキング にほんブログ村 IT技術ブログ Webサイト構築へ ブログ王ランキング 人気ブログランキング 人気ホームページランキングへ


more

************************************************
◎  Drupaでページング:コアpagerで、ステキ の巻
                :今日のDrupal

************************************************


 

 ※該当するモジュールは、
  includes/pager.inc で、
function theme_pager($tags = array(), $limit = 10, $element = 0, $parameters = array(), $quantity = 9) {
global $pager_page_array, $pager_total;

// Calculate various markers within this pager piece:
// Middle is used to "center" pages around the current page.
$pager_middle = ceil($quantity / 2);
// current is the page we are currently paged to
$pager_current = $pager_page_array[$element] + 1;
// first is the first page listed by this pager piece (re quantity)
$pager_first = $pager_current - $pager_middle + 1;
// last is the last page listed by this pager piece (re quantity)
$pager_last = $pager_current + $quantity - $pager_middle;
// max is the maximum page number
$pager_max = $pager_total[$element];
// End of marker calculations.

・・・略・・・

// End generation.
if ($li_next) {
$items[] = array(
'class' => 'pager-next',
'data' => $li_next,
);
}
if ($li_last) {
$items[] = array(
'class' => 'pager-last',
'data' => $li_last,
);
}

return theme('item_list', $items, NULL, 'ul', array('class' => 'pager'));
}
}
 と用意されてますね。
 今回はまずこのまま利用してみます。

 

 ■データベースクエリ
  同じ、includes/pager.inc に関数が用意されてます。
function pager_query($query, $limit = 10, $element = 0, $count_query = NULL) {
global $pager_page_array, $pager_total, $pager_total_items;
$page = isset($_GET['page']) ? $_GET['page'] : '';

// Substitute in query arguments.
$args = func_get_args();
$args = array_slice($args, 4);
// Alternative syntax for '...'
if (isset($args[0]) && is_array($args[0])) {
$args = $args[0];
}

// Construct a count query if none was given.
if (!isset($count_query)) {
$count_query = preg_replace(array('/SELECT.*?FROM /As', '/ORDER BY .*/'), array('SELECT COUNT(*) FROM ', ''), $query);
}

// Convert comma-separated $page to an array, used by other functions.
$pager_page_array = explode(',', $page);


// We calculate the total of pages as ceil(items / limit).
$pager_total_items[$element] = db_result(db_query($count_query, $args));

$pager_total[$element] = ceil($pager_total_items[$element] / $limit);
$pager_page_array[$element] = max(0, min((int)$pager_page_array[$element], ((int)$pager_total[$element]) - 1));

return db_query_range($query, $args, $pager_page_array[$element] * $limit, $limit);
}

 これを使って次のようにしました。

 

 □共通部分を用意して・・・
$temp_baseend_SQL=" WHERE (";
$temp_baseend_SQL.=" (node.type in ('*****'))";
if($temp_addSQL!=''){
$temp_baseend_SQL.=" AND(".$temp_addSQL.")";
}
$temp_baseend_SQL.=")";
$temp_baseend_SQL.=" ORDER BY node_changed DESC".
", node.title ASC";

 

 □カウント用のSQL文生成・・・
$temp_count_SQL="SELECT COUNT(*) AS row_count".
",node.title AS node_title, node.changed AS node_changed".
" FROM dru_node node".
$temp_baseend_SQL;

 

 □データ取得用メインSQL・・・
$tempSQL="SELECT node.nid AS nid".
", node.title AS node_title".
", node.type AS node_type".
" FROM dru_node node".
$temp_baseend_SQL;

 

 □初期設定を行って・・・
$num_per_page = 10;
$poper_num = 0;

 

 □関数に投げる・・・
$getdatas = pager_query($tempSQL, $num_per_page, $poper_num, $temp_count_SQL);

 

 □帰ってきた値は・・・
while ($data = db_fetch_object($getdatas)) {
$temptitle = $data->node_title;
・・・略・・・
}
 このように料理できて、

 

 ★ページャー部分は、
echo theme('pager', NULL, $num_per_page, $poper_num);
 で表示できる。

 かんたん、かんたん。
 ユーザーの管理


 ちなみに、関数(API)は、

 

 ◆[API] pager_query

pager_query | drupal.org
pager_query | drupal.org 参考にさせていただいたのは,
 ・pager_query - how to ... nice
  こちらの情報。
  Thank you very much!



commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/1313-999627dd
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。