PHP Classes

File: table.inc

Recommend this page to a friend!
  Classes of Jesse Estevez   Bucci's Table Class   table.inc   Download  
File: table.inc
Role: ???
Content type: text/plain
Description: Source Code ( lots of comments )
Class: Bucci's Table Class
Author: By
Last change:
Date: 24 years ago
Size: 15,525 bytes
 

Contents

Class file image Download
<? class table { /*================================================================= /*-------------------------------- 6/16/00 2:26 PM by jestevez Copyright (C) 2000 Travel-Italy.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --------------------------------*/ /*================================================================= PLEASE SEE USER GUIDE FOR DOCUMENTATION ===================================================================*/ // OBJECT PROPERTIES // This should be the path to the directory where you keep table templates, if you are going to use them. // Your path must end with "/". var $path_to_templates = ''; // CHANGE ME! var $debugging = FALSE; // Set to TRUE to have debugging information // output to broswer and HTML source. var $table; // Holds HTML for table. var $pair_string; // Buffer which holds attributes before they are added to a tag. var $pair_array; // Buffer that holds name value pairs which will be tag attributes. var $cellpadding; // Used in <TABLE> tag. var $cellspacing; // Used in <TABLE> tag. var $bgcolor; // Used in <TABLE> tag. var $border; // Used in <TABLE> tag. var $align; // Used in <TABLE> tag. var $width; // Used in <TABLE> tag. var $col_attribute; // Multi-dimensional array. Holds information which controls attribues of cells in a col. var $row_attribute; // Multi-dimensional array. Holds information which controls attribues of cells in a row. var $col = 0; // Keeps track of current column in table. var $row = 0; // Keeps track of current row in table. var $defaults = array ( 'debugging' => FALSE, 'width' => "100%", 'cellpadding' => "1", 'cellspacing' => "1", 'border' => '1', 'bgcolor' => "#FFFFFF" ); /* ================================================================= */ // CONSTRUCTOR function table( $arguments = "" ) // Load paramters over defaults. // Create the main "<table>" tag with appropriate attributes. { // Load defaults into corresponding object properties. while ( list( $key, $value ) = each ( $this->defaults ) ) { if ( $key and $value ) { $this->$key = $value; } } // Override defaults with passed parameters. if ( $arguments ) { while ( list ( $key, $value ) = each ( $arguments ) ) { $this->$key = $value; } } } /*=================================================================*/ // METHODS function pass_thru ( $string ) // Adds a string to the table, but doesn't wrap it in tags. // 5/27/00 7:05 PM by jestevez { $this->add ( $string ); } /*-----------------------------------------------------------------*/ function use_template ( $template ) // Select a predefined table style. { $template_file_name = $this->path_to_templates . $template . '.tpl'; if ( is_readable ( $template_file_name ) ) { include ( $template_file_name ); } // You may want to put in code to handle // an error if the template isn't readable. } /*-----------------------------------------------------------------*/ function add_col_attribute ( $name, $value, $loop = 0 ) // Save information about attributes to be used in cells of a column. // Several arrays are used to hold the data. { $this->col_attribute_name[] = $name; // Save the name of the attribute. $this->col_attribute_value[] = $value; // Each name has an associated array of values. $this->col_attribute_index[] = 0; // The current position in the array of values. $this->col_attribute_loop_buffer[] = $loop; // Number of times we have left to loop the values. $this->col_attribute_loop[] = $loop; // The total number of times to loop the values. } /*-----------------------------------------------------------------*/ function add_row_attribute($name, $value, $loop = 0) // Save information about attributes to be used in cells of a row. { $this->row_attribute_name[] = $name; // Save the name of the attribute. $this->row_attribute_value[] = $value; // Each name has an associated array of values. $this->row_attribute_index[] = 0; // The current position in the array of values. $this->row_attribute_loop_buffer[] = $loop; // Number of times we have left to loop the values. $this->row_attribute_loop[] = $loop; // The total number of times to loop the values. } /*-----------------------------------------------------------------*/ function add($s) // Add to the table. { $this->table .= $s; } /*-----------------------------------------------------------------*/ function start_table () // Open the table tag. { // Get the table tag values from properties. $cellpadding = $this->format_name_value_pair ( "CELLPADDING", $this->cellpadding ); $cellspacing = $this->format_name_value_pair ( "CELLSPACING", $this->cellspacing ); $border = $this->format_name_value_pair ( "BORDER", $this->border ); $bgcolor = $this->format_name_value_pair ( "BGCOLOR", $this->bgcolor ); $width = $this->format_name_value_pair ( "WIDTH", $this->width ); // Add beginning of table to the table. $this->add ( "\n\n" ); $this->add ( "<!-- START TABLE -->" ); $this->add ( "\n\n" ); $this->add ( "<TABLE $cellpadding $cellspacing $border $bgcolor $width>" ); } /*-----------------------------------------------------------------*/ function debugging_message ( $debugging_message ) // Add the message to ouput if debugging is turned on. { if ( $this->debugging ) { $this->add ( $debugging_message ); }; } /*-----------------------------------------------------------------*/ function finish_table () // Close the table tag. { $this->add ( "\n\n" ); $this->add ( "</TABLE>" ); $this->add ( "\n\n" ); $this->add ( "<!-- END TABLE -->" ); $this->add ( "\n\n" ); } /*-----------------------------------------------------------------*/ function reset_col_pointer () // Point to the first column in the table. { $this->col = 0; } /*-----------------------------------------------------------------*/ function format_name_value_pair ( $name, $value ) // Make sure a tag attribute is properly formated. { return ( strtoupper ( $name ) . "=\"$value\""); } /*-----------------------------------------------------------------*/ function is_not_valid_pair ( $name, $value ) // Return TRUE if pair is not valid. { if( $name == "" or $value == "" ) { return TRUE; } else { return FALSE; } } /*-----------------------------------------------------------------*/ function send_pair_to_buffer ( $name, $value ) // Make sure the pair is well-formed then send it to buffer. { // Make sure name and value are upper case. $upper_case_name = strtoupper($name); $upper_case_value = strtoupper($value); // Skip bad pairs. if ( $this->is_not_valid_pair ( $name, $value ) ) { return TRUE; } // Send pair to correct buffer. switch($upper_case_name) { case 'NOWRAP': $this->pair_string .= ' NOWRAP'; break; case 'BOLD': $this->content = '<B>' . $this->content . '</B>'; break; default: $this->pair_array[$upper_case_name] = $upper_case_value; } } /*-----------------------------------------------------------------*/ function add_cell_to_table () // Add the built cell to the table. // Optinally add debugging information. { // Add formatting to output. $this->add("\n\t\t"); // If debuggin is turned on, send additional information to HTML source code. $this->debugging_message ("<!-- ROW = " . $this->row . " and COL = " . $this->col . " -->\n\t\t"); // Add the tag to open the cell and all the cell attributes. $this->add("<TD" . $this->pair_string . ">"); // If debuggin is turned on, send additional information to screen. $this->debugging_message ("<small>index = ". $this->col . ", " . $this->row . "</small><br>"); // Add the cell content. $this->add($this->content); // Add formatting to output // $this->add("\n\t\t"); // Close the cell. $this->add("</TD>"); } /*-----------------------------------------------------------------*/ function make_array ( $any_data_type ) // I know this function is silly. Sorry. // Take any data type and make an array out of it. { if(! is_array ( $any_data_type ) ) { return ( array ( $any_data_type ) ); } else { return ( $any_data_type ); } } /*-----------------------------------------------------------------*/ function load_row_attributes () // Find any row attribute that applies to this cell and send it to the buffer. { // Don't do anything if there aren't any row attributes. if ( ! $this->row_attribute_name ) { return ( TRUE ); } // Send all the attribute pairs for row this cell is in to the buffer. $row_attribute_count = count ( $this->row_attribute_name ); for ( $i = 0; $i < $row_attribute_count ; $i++ ) { $current_row_position = $this->row_attribute_index[ $i ]; $current_row_attribute_value = $this->row_attribute_value[ $i ][ $current_row_position ]; $current_row_attribute_name = $this->row_attribute_name[ $i ]; $this->send_pair_to_buffer ( $current_row_attribute_name, $current_row_attribute_value ); } } /*-----------------------------------------------------------------*/ function load_col_attributes () // Find any column attribute that applies to this cell and send it to the buffer. { // Don't do anything if there aren't any column attributes. if ( ! $this->col_attribute_name ) { return ( TRUE ); } $col_attribute_count = count ( $this->col_attribute_name ); for ( $i = 0; $i < $col_attribute_count; $i++ ) { /*-------------------------------- 6/16/00 4:33 PM by jestevez This code is pretty gnarly because the names get long. It is an interesting exercise to rewrite this using "&" to link the long names to short names. I decided not to release the easier to read and shorter code because it only works with PHP4. --------------------------------*/ $last_col_index = count ( $this->col_attribute_value[ $i ] ); $at_the_last_index = $this->col_attribute_index[ $i ] == $last_col_index; if ( $at_the_last_index && --$this->col_attribute_loop_buffer[ $i ] ) { $this->col_attribute_index[ $i ] = 0; } print $this->col_attribute_loop_buffer[ $i ]; $col_attribute_name = $this->col_attribute_name[ $i ]; $col_attribute_value = $this->col_attribute_value[ $i ][ $this->col_attribute_index[ $i ] ]; $this->send_pair_to_buffer ( $col_attribute_name, $col_attribute_value ); // Move to the next column. $this->col_attribute_index[ $i ]++; } } /*-----------------------------------------------------------------*/ function load_local_attributes ( $input_array ) // Send the local cell attributes to the attribute buffer. { while( list ( $name, $value ) = each ( $input_array )) { $this->send_pair_to_buffer ( $name, $value ); } } /*-----------------------------------------------------------------*/ function build_attribute_string () // Add each pair in the array attribute buffer to the attribute string. { // Don't do anything if there isn't a pair_array if ( ! $this->pair_array ) { return TRUE; } reset ( $this->pair_array ); $pair_array_count = count ( $this->pair_array ); for( $i = 0; $i < $pair_array_count; $i++ ) { list( $name, $value ) = each ( $this->pair_array ); $this->pair_string .= " $name='$value'"; } } /*-----------------------------------------------------------------*/ function add_cell ( $input ) // Add a cell to a row. { // Make sure the input is an array. $input_array = $this->make_array ( $input ); // Put the cell content into the cell content buffer. $this->content = $input_array[0]; // Remove cell content from input array. unset($input_array[0]); $this->load_row_attributes (); $this->load_col_attributes (); $this->load_local_attributes ( $input_array ); $this->build_attribute_string (); $this->add_cell_to_table (); $this->get_ready_for_next_cell (); } /*-----------------------------------------------------------------*/ function get_ready_for_next_cell () // Erase information about current cell and set the pointer to the next cell. { $this->pair_array = array(); $this->pair_string = ''; $this->content = ''; $this->col++; } /*-----------------------------------------------------------------*/ function add_multiple_rows ( $row_array ) // Takes a multi-dimensional array of rows and adds it to the table. { $row_count = count ( $row_array ); for ( $this_row = 0; $this_row < $row_count; $this_row++ ) { $this->add_row ( $row_array[ $this_row ] ); } } /*-----------------------------------------------------------------*/ function add_row($cell_array) { // Reset to col zero. // We do this because every row starts with col zero. if ( $this->col_attribute_index ) { reset ( $this->col_attribute_index ); while ( list ( $name, $value ) = each ( $this->col_attribute_index )) { $this->col_attribute_index[ $name ] = 0; $this->col_attribute_loop_buffer[ $name ] = $this->col_attribute_loop[$name]; } } // Build entire row. As easy as ONE TWO THREE! //(1) Start the row. $this->add ( "\n\n\t<TR>\n" ); //(2) Loop the cell array and add each cell in turn. $cell_count = count ( $cell_array ); for ( $i = 0; $i < $cell_count; $i++ ) { $this->add_cell ( $cell_array[$i] ); } //(3) Finish the row. $this->add ( "\n\n\t</TR>" ); // Reset our col pointer back to zero. $this->reset_col_pointer (); // Set our row counter to the next row. $this->row++; // Check our row attribute properties to see if, for each one, they should be reset, expired, or left alone. if ( $this->row_attribute_name ) { $row_attribute_count = count ( $this->row_attribute_name ); for ( $i = 0; $i < $row_attribute_count; $i++ ) { $this->row_attribute_index[$i]++; $last_index = count ( $this->row_attribute_value[$i] ); $current_index = $this->row_attribute_index[$i]; $at_last_index = $current_index == $last_index; if ( $at_last_index && --$this->row_attribute_loop_buffer[$i] ) { $this->row_attribute_index[$i] = 0; } } } } /*-----------------------------------------------------------------*/ function return_table() // Return the table to the caller. { return $this->table; } } ?>