summaryrefslogtreecommitdiff
path: root/includes/pager.inc
diff options
context:
space:
mode:
Diffstat (limited to 'includes/pager.inc')
-rw-r--r--includes/pager.inc193
1 files changed, 111 insertions, 82 deletions
diff --git a/includes/pager.inc b/includes/pager.inc
index 602f6e78a..9f371e9bf 100644
--- a/includes/pager.inc
+++ b/includes/pager.inc
@@ -1,24 +1,84 @@
<?php
// $Id$
-/* ***************************************************
- * external functions (API)
- * ***************************************************/
+/**
+ @defgroup pager_api Pager API
+ @{
+
+ Pager external functions (API).
+ **/
+
+/**
+ * Use this function when doing select queries you wish to be able to page.
+ * The pager uses LIMIT-based queries to fetch only the records required
+ * to render a certain page. However, it has to learn the total number
+ * of records returned by the query to (among others) compute the number
+ * of pages (= number of all records / number of records per page). This
+ * is done by inserting "COUNT(*)" in the original query, ie. by rewriting
+ * the original query, say "SELECT nid, type FROM node WHERE status = '1'
+ * ORDER BY static DESC, created DESC" to read "SELECT COUNT(*) FROM node
+ * WHERE status = '1' ORDER BY static DESC, created DESC". Rewriting the
+ * query is accomplished using a regular expression.
+ *
+ * Unfortunately, the rewrite rule does not always work as intended for
+ * queries that (already) have a "COUNT(*)" or a "GROUP BY" clause, and
+ * possibly for other complex queries. In those cases, you can optionally
+ * pass a query that will be used to count the records.
+ *
+ * For example, if you want to page this query: "SELECT COUNT(*), TYPE FROM
+ * node GROUP BY TYPE", pager_query() would invoke the wrong query, being:
+ * "SELECT COUNT(*) FROM node GROUP BY TYPE". So instead, you should pass
+ * "SELECT COUNT(DISTINCT(TYPE)) FROM node" as the optional $count_query
+ * parameter.
+ *
+ * @param $query the SQL query that needs paging
+ * @param $limit the number of rows per page
+ * @param $element optional attribute to distringuish between multiple pagers on one page
+ * @param $count_query an optional SQL query used to count records when rewriting the query would fail
+ *
+ * @return SQL query result
+ */
+function pager_query($query, $limit = 10, $element = 0, $count_query = "") {
+ global $pager_from_array, $pager_total;
+ $from = $_GET["from"];
+
+ // count the total number of records in this query:
+ if ($count_query == "") {
+ $pager_total[$element] = db_result(db_query(preg_replace(array("/SELECT.*FROM/i", "/ORDER BY .*/"), array("SELECT COUNT(*) FROM", ""), $query)));
+
+ }
+ else {
+ $pager_total[$element] = db_result(db_query($count_query));
+ }
+
+ // convert comma separated $from to an array, used by other functions:
+ $pager_from_array = explode(",", $from);
+
+ return db_query_range($query, (int)$pager_from_array[$element], (int)$limit);
+
+}
/**
* Use this function in your module or theme to display a pager.
*
- * @param array $tags defines your buttons; text or img.
- * @param int $limit how many nodes are displayed per page
- * @param int $element support for multiple pagers per page (specify which this is)
- * @param string $type allows for distinction between pagers on main page and admin page, etc.
+ * @param $tags defines your buttons; text or img.
+ * @param $limit how many nodes are displayed per page
+ * @param $element support for multiple pagers per page (specify which this is)
+ * @param $type allows for distinction between pagers on main page and admin page, etc.
* Supported types are "default", "admin" and "simple".
+ * @param $attributes extra html attributes for \<a href> (eg. title, onMouseOver, etc.)
*
* @return string html of pager
*/
function pager_display($tags = "", $limit = 10, $element = 0, $type = "default", $attributes = array()) {
return theme("pager_display_". $type, $tags, $limit, $element, $attributes);
}
+/** @} End of defgroup pager_api **/
+
+/**
+ * @addtogroup themeable
+ * @{
+ */
/**
* DEFAULT PAGER:
@@ -76,18 +136,24 @@ function theme_pager_display_admin($tags = "", $limit = 10, $element = 0, $attri
*/
return theme_pager_display_default($tags, $limit, $element, $attributes);
}
+/** @} End of addtogroup themeable **/
-/* *******************************************************************
- * PAGER PIECES:
- * Use these pieces to construct your own custom pagers (i.e. in
- * themes). Note that you should NOT modify this file to customize
- * your pager)
- * *******************************************************************/
+/**
+ * @name pager pieces
+ * Use these pieces to construct your own custom pagers in your theme. Note
+ * that you should NOT modify this file to customize your pager.
+ * @{
+ */
/**
* displays a "first-page" link
*
- * @see pager_previous
+ * @param $text defines the name (or image) of the link
+ * @param $limit how many nodes are displayed per page
+ * @param $element distinguish between multiple pagers on one page
+ * @param $attributes extra html attributes for \<a href> (eg. title, onMouseOver, etc.)
+ *
+ * @return string html of this pager piece
*/
function pager_first($text, $limit, $element = 0, $attributes = array()) {
global $pager_from_array;
@@ -104,10 +170,11 @@ function pager_first($text, $limit, $element = 0, $attributes = array()) {
/**
* displays a "previous-page" link
*
- * @param string $text defines the name (or image) of the link
- * @param int $limit how many nodes are displayed per page
- * @param int $element distinguish between multiple pagers on one page
- * @param int $n how many pages we move back (defaults to 1)
+ * @param $text defines the name (or image) of the link
+ * @param $limit how many nodes are displayed per page
+ * @param $element distinguish between multiple pagers on one page
+ * @param $n how many pages we move back (defaults to 1)
+ * @param $attributes extra html attributes for \<a href> (eg. title, onMouseOver, etc.)
*
* @return string html of this pager piece
*/
@@ -123,7 +190,13 @@ function pager_previous($text, $limit, $element = 0, $n = 1, $attributes = array
/**
* displays a "next-page" link
*
- * @see pager_previous
+ * @param $text defines the name (or image) of the link
+ * @param $limit how many nodes are displayed per page
+ * @param $element distinguish between multiple pagers on one page
+ * @param $n how many pages we move back (defaults to 1)
+ * @param $attributes extra html attributes for \<a href> (eg. title, onMouseOver, etc.)
+ *
+ * @return string html of this pager piece
*/
function pager_next($text, $limit, $element = 0, $n = 1, $attributes = array()) {
global $pager_from_array, $pager_total;
@@ -137,7 +210,12 @@ function pager_next($text, $limit, $element = 0, $n = 1, $attributes = array())
/**
* displays a "last-page" link
*
- * @see pager_previous
+ * @param $text defines the name (or image) of the link
+ * @param $limit how many nodes are displayed per page
+ * @param $element distinguish between multiple pagers on one page
+ * @param $attributes extra html attributes for \<a href> (eg. title, onMouseOver, etc.)
+ *
+ * @return string html of this pager piece
*/
function pager_last($text, $limit, $element = 0, $attributes = array()) {
global $pager_from_array, $pager_total;
@@ -155,8 +233,11 @@ function pager_last($text, $limit, $element = 0, $attributes = array()) {
/**
* displays "%d through %d of $d" type detail about the cur page
*
- * @param string $format allows you to reword the format string
- * @see pager_previous
+ * @param $limit how many nodes are displayed per page
+ * @param $element distinguish between multiple pagers on one page
+ * @param $format allows you to reword the format string
+ *
+ * @return string html of this pager piece
*/
function pager_detail($limit, $element = 0, $format = "%d through %d of %d.") {
global $pager_from_array, $pager_total;
@@ -171,9 +252,13 @@ function pager_detail($limit, $element = 0, $format = "%d through %d of %d.") {
/**
* displays a list of nearby pages with additional nodes
*
- * @param int $quantity defines the length of the page list
- * @param string $text optional text to display before the page list
- * @see pager_previous
+ * @param $limit how many nodes are displayed per page
+ * @param $element distinguish between multiple pagers on one page
+ * @param $quantity defines the length of the page list
+ * @param $text optional text to display before the page list
+ * @param $attributes extra html attributes for \<a href> (eg. title, onMouseOver, etc.)
+ *
+ * @return string html of this pager piece
*/
function pager_list($limit, $element = 0, $quantity = 5, $text = "", $attributes = array()) {
global $pager_from_array, $pager_total;
@@ -243,63 +328,7 @@ function pager_list($limit, $element = 0, $quantity = 5, $text = "", $attributes
return $output;
}
-
-
-/* ********************************************************************
- * QUERIES - call this instead of db_query() if you want your query to
- * support a pager.
- * ********************************************************************/
-
-/**
- * Use this function when doing select queries you wish to be able to page.
- * The pager uses LIMIT-based queries to fetch only the records required
- * to render a certain page. However, it has to learn the total number
- * of records returned by the query to (among others) compute the number
- * of pages (= number of all records / number of records per page). This
- * is done by inserting "COUNT(*)" in the original query, ie. by rewriting
- * the original query, say "SELECT nid, type FROM node WHERE status = '1'
- * ORDER BY static DESC, created DESC" to read "SELECT COUNT(*) FROM node
- * WHERE status = '1' ORDER BY static DESC, created DESC". Rewriting the
- * query is accomplished using a regular expression.
- *
- * Unfortunately, the rewrite rule does not always work as intended for
- * queries that (already) have a "COUNT(*)" or a "GROUP BY" clause, and
- * possibly for other complex queries. In those cases, you can optionally
- * pass a query that will be used to count the records.
- *
- * For example, if you want to page this query: "SELECT COUNT(*), TYPE FROM
- * node GROUP BY TYPE", pager_query() would invoke the wrong query, being:
- * "SELECT COUNT(*) FROM node GROUP BY TYPE". So instead, you should pass
- * "SELECT COUNT(DISTINCT(TYPE)) FROM node" as the optional $count_query
- * parameter.
- *
- * @param string $query the SQL query that needs paging
- * @param int $limit the number of rows per page
- * @param int $element optional attribute to distringuish between multiple pagers on one page
- * @param string $count_query an optional SQL query used to count records when rewriting the query would fail
- *
- * @return resource SQL query result
- */
-
-function pager_query($query, $limit = 10, $element = 0, $count_query = "") {
- global $pager_from_array, $pager_total;
- $from = $_GET["from"];
-
- // count the total number of records in this query:
- if ($count_query == "") {
- $pager_total[$element] = db_result(db_query(preg_replace(array("/SELECT.*FROM/i", "/ORDER BY .*/"), array("SELECT COUNT(*) FROM", ""), $query)));
-
- }
- else {
- $pager_total[$element] = db_result(db_query($count_query));
- }
-
- // convert comma separated $from to an array, used by other functions:
- $pager_from_array = explode(",", $from);
-
- return db_query_range($query, (int)$pager_from_array[$element], (int)$limit);
-
-}
+/* @} End of member group pager pieces */
function pager_link($from_new, $attributes = array()) {
$q = $_GET["q"];