PX : code

Sort Order Class by Serge Stepanov
Download this code


<?

/**

------------------------------------------------------------------
v1.2 -
  sort_order() now gets var without the "$" and sets the URL link
  to that.

v1.1 -
  Added strip_end() and set_default() functions
-------------------------------------------------------------------

sort_order_class.php - Copyright 2001 - 2002 Serge Stepanov.

This code is written with the hope that it will be of use to someone, and comes "as is"
without warranty of any kind.  I (Serge Stepanov) do no warrant or guarantee 
that the code will work under any circumstances besides my own.  Any damage caused
by the use of this script are not the fault of the author.  You are hereby granted
permission to use this code in a commerical or non-commerical environment without
any fees or written concent.   You may distribute, copy and/or modifiy this code for
non-commercial purposes, however, this copyright notice must appear on all copies.

And lastly, I ask that if you found this code useful or helpful in anyway, I would love to hear
from you, so if you may, please drop me a line at webmaster@gfxcafe.com

This is a class I wrote as a re-write of my original create_order_block() function.
It's used to create href links on a page to sort a SQL query (in both ascending and decending orders,
the two will alternate).  I will make this into an object later on, but it works great as a function too.

Here is how to use the class.
extra() - Any extra variables that you want to put in the href link (could be anything).
add_order($order_title, $order_table, $URL) - 
  $order_table - What row to sort by for that link, passed to function.
  $order_title - What to label the link, passed to function. 
  $URL - what the href links links to.
sort_order() - Specify variable containing the sorting information, will be what ehe href link uses.   Do not prefix the "$" -- name must be in quotes. 
prepend() - What will be prepended to each order link
append() - What will be appended to each order link
order_block() - Returns the order block
order_options() - Returns the SQL code which you put into the query.
set_default() - What the default sort order is, must include "ASC" or "DESC" at the end.
strip_end() - How many characters to strip from the end, don't put "0" as it will strip the entire string.

An example is provided below the function.

**/

class create_order_block {

    var $order_number;
    var $order_options;
    var $order_block;
    var $append;
    var $prepend;

    function create_order_block() {
        $this->order_number == 0;        
    }

    function set_default($var) {
        if (!isset($this->sortorder)) {
            $this->order_options = "ORDER BY $var";
            $this->sortorder = "1a";
        }
    }

    function extra($var) {
        $this->extra = "&" . $var;
    }

    function sort_order($var) {
        global ${$var};
        $this->sort_order = ${$var};
        $this->url = $var;
    }
    
    function append($var) {
        $this->append = $var;
    }

    function prepend($var) {
        $this->prepend = $var;
    }
    
    function add_order($order_title, $order_table, $URL="") {
        $this->order_number++;     

        if ($this->sort_order == $this->order_number . "a") {
            $this->order_options = "ORDER BY $order_table ASC";
            $this->order_block .= "$this->prepend<b>
            <a href=\"$URL?$this->url=$this->order_number" . "d" . "$this->extra\">$order_title</a>
            </b>$this->append";
        } else if ($this->sort_order == $this->order_number . "d") {
            $this->order_options = "ORDER BY $order_table DESC";
            $this->order_block .= "$this->prepend<b>
            <a href=\"$URL?$this->url=$this->order_number" . "a" . "$this->extra\">$order_title</a>
            </b>$this->append";
        } else {
            $this->order_block .= "$this->prepend
            <a href=\"$URL?$this->url=$this->order_number" . "d" . "$this->extra\">$order_title</a>$this->append";
        }
    }

    function strip_end($var="1") {
        $this->order_block = substr($this->order_block, 0, -$var);
    }
    
    function order_block() {
        return $this->order_block;
    }
    
    function order_options() {
        return $this->order_options;
    }

}


/**

Example

**/

// MySQL connection code here 

$order = new create_order_block;
$order->sort_order("sortorder");
$order->extra("myvar=1");
$order->append(" ");
$order->set_default("col1 ASC");
$order->add_order("Column 1", "col1", $PHP_SELF);
$order->add_order("Column 2", "col2", $PHP_SELF);
$order->strip_end(1);
$order_options = $order->order_options();
echo $order->order_block();


$query = mysql_query("SELECT col1, col2 FROM table $order_options");

while ($row = mysql_fetch_array($query)) {
    echo $row['col1'] . "  -  " . $row['col2'];
    echo "<br>\n";
}

?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.