PHP-klass för att skriva ut tabell med data från mysql

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2008

PHP-klass för att skriva ut tabell med data från mysql

Hej
Jag håller på att lära mig programmera php objektorienterat och nu är jag klar med min första klass. Jag är faktiskt väldigt nöjd med vad den kan göra för mig.
Man anger vilka fält man vill visa, och vilken titel dessa fält ska ha, och så skapas en tabell som visar upp informationen och dessutom länkar vidare till en detaljsida om varje post. Den skapar också automatiskt sorterings-länkar av kolumntitlarna. Raderna har två olika färger för att underlätta läsningen och varje rad får en annan färg när man håller musen över den.

Jag tänkte lägga upp den här, kanske kan någon ha nytta av den, och om jag har tur kanske någon kan upplysa mig om ifall jag kan göra något bättre, utan att lägga till nya funktioner. Jag skulle gärna vilja att allt fungerar på bästa sätt innan jag går vidare och lägger till nått mer.

alla tre filerna, alltså klassen, jsfilen och cssfilen finns att ladda ner på www.goteborgskalendern.be/listClass/listClass.zip

class createList{
var $fieldNames = array();
var $fieldHeaders = array();
var $query;
var $orderBy;
var $link_id;
var $link_url;

function fieldSelect($fieldName, $fieldHeader){
$this->fieldNames[] = $fieldName;
$this->fieldHeaders[] = $fieldHeader;
}

function printList(){
//--- Get data ---//
$db = new database;
if(isset($_GET['orderBy'])) $this->orderBy = $_GET['orderBy'];
$db->query($this->query.' ORDER BY '.$this->orderBy);

echo '<table class="dataList">';

//----Create table header ---//
echo '<tr>';

$n=0; //Counter for picking the right fieldName as order_by link
foreach($this->fieldHeaders AS $fieldHead){
//create ORDER BY link
$url = $_SERVER['PHP_SELF'].'?orderBy='.$this->fieldNames[$n];

echo "<th><a href='$url'>$fieldHead</a>";
if($this->orderBy == $this->fieldNames[$n]) echo 'v'; // show if this coumn is choosen as order_by column
echo "</th>";

$n++; //Counter for picking the right fieldName as order_by link
}
echo '</tr>';

//-------------------- Print the table rows ----------------//
$n = 1; //counter for row color
while ($db->nextRecord()){
$row = $db->record;

//Javascript is to highlight the row when hovering it, and to make the whole row into a link to the detail page.
echo "<tr class='contentRow$n' ";
echo "onmouseover=\"this.className='contentRowHighlight'\" ";
echo "onmouseout=\"this.className='contentRow$n'\" ";
echo 'onclick="window.location.href=\''.$this->link_url.'?'.$this->link_id.'='.$row[$this->link_id].'\';">';
echo "\n";
foreach($this->fieldNames AS $field){
echo '<td>'.$row[$field].'</td>';
echo "\n";
}
echo '</tr>';
echo "\n";
//Counter to altering row color
if($n == 2){$n =1;}else{$n++;}
}//end while loop

//------- ends the table ----------//
echo '</table>';
}//end function buildList
}//end class

/* ---- how to use the class createList --------

$list = new createList;

$list->query = "Here is the sql SELECT query _without_ ORDER BY";

$list->orderBy = 'Default ORDER BY field.';
//Each field-header will be a link that changes the ORDER BY-field.

$list->link_id = 'postID';
//Link_id is the field that will be used to identify the posts. This will not be displayed in the list. Dont forget to include it in the SELECT-query

$list->link_url='details_person.php';
//Link_url is the url each row will be linked to. link_id will be added to this link as a parmeter.

//Then add as many of these as you need:
$list->fieldSelect($columnName, $Header);
//$columnName should be exactly as in the database, header is the title that will be displayed in the list

//To print the list:
$list->printList();

Please see the cssfile for styling instructions
The javascript in list.js is needed

*/