I get no error messages, however the code does not show any of my xml content. I know you wrote this for me and changed it for my needs…I feel really bad about asking you to help me even more. But please help.
It has got to be something very simple that I just can’t see.
xml
<sayings>
<message>
<vdate>2010-05-28 00:21:18</vdate>
<msgpost>Hello World</msgpost>
</message>
</sayings>
<?php
class Pagination {
protected
/*
* Configuration defaults
*/
$_arrConfig = array(
'limit'=>10
,'page'=>1
,'basePath'=>'#'
,'label'=>'Items'
,'visiblePages'=>5
,'pageFlag'=>'{page}'
,'display_pages'=>1
,'display_entity'=>1
)
/*
* Data to be passed to template
*/
,$_arrTemplateData = array()
/*
* function to pass resolved offset and limit
*/
,$_onPaginate
/*
* extra arguments to pass to to pagination callback
* such as data source or db connection
*/
,$_arrArgs;
public function __construct($onPaginate,$arrConfig=array(),$arrArgs=array()) {
$this->_onPaginate = $onPaginate;
$this->_arrArgs = $arrArgs;
foreach($arrConfig as $strKey=>$mixValue) {
if(array_key_exists($strKey,$this->_arrConfig)) {
$this->_arrConfig[$strKey] = $mixValue;
}
}
}
public function paginate() {
/*
* Calculate page offset
*/
$intOffset = ($this->_arrConfig['page']-1)*$this->_arrConfig['limit'];
/*
* Paginate and get number of found rows
*/
$intFoundRows = call_user_func_array($this->_onPaginate,array_merge(array($intOffset,$this->_arrConfig['limit']),$this->_arrArgs));
/*
* Assign template data
*/
$this->_arrTemplateData['limit'] = $this->_arrConfig['limit'];
$this->_arrTemplateData['page'] = $this->_arrConfig['page'];
$this->_arrTemplateData['offset'] = $intOffset;
$this->_arrTemplateData['found_rows'] = $intFoundRows;
$this->_arrTemplateData['total_pages'] = $intFoundRows < $this->_arrConfig['limit']?1:ceil($intFoundRows/$this->_arrConfig['limit']);
$this->_arrTemplateData['visible_pages'] = $this->_arrConfig['visiblePages'];
$this->_arrTemplateData['base_path'] = $this->_arrConfig['basePath'];
$this->_arrTemplateData['label'] = $this->_arrConfig['label'];
$this->_arrTemplateData['page_flag'] = $this->_arrConfig['pageFlag'];
$this->_arrTemplateData['display_pages'] = $this->_arrConfig['display_pages'];
$this->_arrTemplateData['display_entity'] = $this->_arrConfig['display_entity'];
/*
* Return the pagination template
*/
return $this->display();
}
public function display() {
extract($this->_arrTemplateData);
if($total_pages <= $visible_pages) {
$page_start = 1;
$page_end = $total_pages;
} else if($page <= ceil($visible_pages/2)) {
$page_start = 1;
$page_end = $visible_pages;
} else if($page > ($total_pages - ceil($visible_pages/2))) {
$page_start = $total_pages - (ceil(($visible_pages/2)*2)-1);
$page_end = $total_pages;
} else {
$page_start = $page-(floor($visible_pages/2));
$page_end = $page+(floor($visible_pages/2));
}
$return='';
if($display_pages && $display_entity) {
$return.= sprintf(
'<div class="summary"><p class="pages">%u %s</p><p class="total">%u %s</p></div>'
,$total_pages
,$total_pages == 1?'Page':'Pages'
,$found_rows
,$found_rows == 1?$label:$label
);
}
$return.= sprintf('<ul class="pagination">');
$return.= sprintf(
'<li class="first">%s%s%s</li>'
,$page == 1?'':sprintf('<a href="%s">',str_replace($page_flag,1,$base_path))
,'First'
,$page == 1?'':'</a>'
);
$return.= sprintf(
'<li class="previous">%s%s%s</li>'
,$page == 1?'':sprintf('<a href="%s">',str_replace($page_flag,($page-1),$base_path))
,'Previous'
,$page == 1?'':'</a>'
);
foreach(range($page_start,$page_end,1) as $i) {
$return.= sprintf(
'<li%s>%s%s%s</li>'
,$page == $i?' class="current"':''
,$page == $i?'':sprintf('<a href="%s">',str_replace($page_flag,$i,$base_path))
,$i
,$page == $i?'':'</a>'
);
}
$return.= sprintf(
'<li class="next">%s%s%s</li>'
,$page == $total_pages?'':sprintf('<a href="%s">',str_replace($page_flag,($page+1),$base_path))
,'Next'
,$page == $total_pages?'':'</a>'
);
$return.= sprintf(
'<li class="last">%s%s%s</li>'
,$page == $total_pages?'':sprintf('<a href="%s">',str_replace($page_flag,$total_pages,$base_path))
,'Last'
,$page == $total_pages?'':'</a>'
);
$return.= sprintf('</ul>');
return $return;
}
/*
* Get current page
*/
public function getPage() {
return $this->_arrConfig['page'];
}
}
class Action {
private $_objXML;
private $_boolAscending = true;
private $_arrMessages = array();
public function __construct($boolAscending=true) {
/*
* Set ordering
*/
$this->_boolAscending = $boolAscending;
$objXML = simplexml_load_file('xml/bev.xml');
/*
* transform timestamps
*/
foreach($objXML->children() as $message) {
$message->vdate = strtotime((string) $message->vdate);
}
$strStyle =
'<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:template match="/">
<xsl:call-template name="content">
</xsl:call-template>
</xsl:template>
<xsl:template name="content">
<sayings>
<xsl:for-each select="/sayings/message">
<xsl:sort select="vdate" data-type="number" order="'.($this->_boolAscending?'ascending':'descending').'"/>
<message>
<vdate><xsl:value-of select="vdate"/></vdate>
<msgpost><xsl:value-of select="msgpost"/></msgpost>
</message>
</xsl:for-each>
</sayings>
</xsl:template>
</xsl:stylesheet>';
/*
* Load message DOM document
*/
$objMessage = new DOMDocument();
$objMessage->loadXML($objXML->asXML());
/*
* Load transform DOM document
*/
$objStylesheet = new DOMDocument();
$objStylesheet->loadXML($strStyle);
/*
* Create XSLT processor ansd set stylesheet
*/
$objXSLT = new XSLTProcessor();
$objXSLT->importStylesheet($objStylesheet);
/*
* apply transform
*/
$this->_objXML = simplexml_load_string($objXSLT->transformToXML($objMessage));
}
public function paginate($offset,$limit) {
$arrMessages = $this->_objXML->xpath('message');
if(isset($arrMessages[$offset])) {
for($i=0;$i<$limit;$i++) {
if(!isset($arrMessages[($i+$offset)])) break;
$this->_arrMessages[] = array(
'vdate'=>(string) $arrMessages[($i+$offset)]->vdate
,'msgpost'=>(string) $arrMessages[($i+$offset)]->msgpost
);
}
}
// return number of total found rows
return count($arrMessages);
}
public function getMessages() {
return $this->_arrMessages;
}
}
// set ordering
$order = isset($_GET['order']) && in_array($_GET['order'],array('asc','desc'))?$_GET['order']:'asc';
$action = new Action(strcmp($order,'asc') == 0?true:false);
$func = create_function('$offset,$limit,$action','return $action->paginate($offset,$limit);');
$pg = new Pagination($func,array(
'basePath'=>$_SERVER['PHP_SELF'].'?p={replace_me_with_page}&order='.$order
,'pageFlag'=>'{replace_me_with_page}'
,'label'=>'Messages'
,'limit'=>5
,'page'=>isset($_GET['p']) && is_numeric($_GET['p']) && $_GET['p'] != 0?$_GET['p']:1
,'visiblePages'=>5
,'display_pages'=>0
,'display_entity'=>0
),array($action));
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Untitled</title>
<style type="text/css">
.pagination {
text-align: center;
}
.pagination li {
display: inline-block;
}
*+html .pagination li {
display: inline;
}
* html .pagination li {
display: inline;
}
</style>
</head>
<body>
<?php
printf(
'<a href="%s?p=%u&order=%s">%s</a>'
,$_SERVER['PHP_SELF']
,$pg->getPage()
,strcmp($order,'desc') == 0?'asc':'desc'
,strcmp($order,'desc') == 0?'Ascending':'Descending'
);
?>
<?php $paging = $pg->paginate(); ?>
<?php echo $paging; ?>
<?php
if($action->getMessages()) {
echo '<ol>';
foreach($action->getMessages() as $arrMessage) {
printf(
'<li>
<p>%s</p>
<p>%s</p>
</li>'
,date('Y-m-d, H:i:s',$arrMessage['vdate'])
,$arrMessage['msgpost']
);
}
echo '</ol>';
} else {
echo "<p>No messages available</p>";
}?>
<?php echo $paging; ?>
btw: how do cut and paste your code keeping the colors? I have the colors in my code when it’s in dreamweaver but when I copy and paste it looses the colors.