p("Hello World !");
* $oPage->output();
*/
class WebPage
{
protected $s_title;
protected $s_content;
protected $s_deferred_content;
protected $a_scripts;
protected $a_styles;
protected $a_include_scripts;
protected $a_include_stylesheets;
protected $a_headers;
protected $a_base;
public function __construct($s_title)
{
$this->s_title = $s_title;
$this->s_content = "";
$this->s_deferred_content = '';
$this->a_scripts = array();
$this->a_styles = array();
$this->a_linked_scripts = array();
$this->a_linked_stylesheets = array();
$this->a_headers = array();
$this->a_base = array( 'href' => '', 'target' => '');
ob_start(); // Start capturing the output
}
/**
* Change the title of the page after its creation
*/
public function set_title($s_title)
{
$this->s_title = $s_title;
}
/**
* Specify a default URL and a default target for all links on a page
*/
public function set_base($s_href = '', $s_target = '')
{
$this->a_base['href'] = $s_href;
$this->a_base['target'] = $s_target;
}
/**
* Add any text or HTML fragment to the body of the page
*/
public function add($s_html)
{
$this->s_content .= $s_html;
}
/**
* Add any text or HTML fragment at the end of the body of the page
* This is useful to add hidden content, DIVs or FORMs that should not
* be embedded into each other.
*/
public function add_at_the_end($s_html)
{
$this->s_deferred_content .= $s_html;
}
/**
* Add a paragraph to the body of the page
*/
public function p($s_html)
{
$this->add($this->GetP($s_html));
}
/**
* Add a paragraph to the body of the page
*/
public function GetP($s_html)
{
return "
$s_html
\n";
}
public function table($aConfig, $aData, $aParams = array())
{
$this->add($this->GetTable($aConfig, $aData, $aParams));
}
public function GetTable($aConfig, $aData, $aParams = array())
{
$oAppContext = new ApplicationContext();
static $iNbTables = 0;
$iNbTables++;
$sHtml = "";
$sHtml .= "
\n";
$sHtml .= "\n";
$sHtml .= "
\n";
foreach($aConfig as $sName=>$aDef)
{
$sHtml .= "
".$aDef['label']."
\n";
}
$sHtml .= "
\n";
$sHtml .= "\n";
$sHtml .= "\n";
foreach($aData as $aRow)
{
if (false) //(isset($aParams['preview']) && $aParams['preview'])
{
$sHtml .= "
\n";
}
else if (isset($aRow['key']))
{
$sHtml .= "
\n";
return $sHtml;
}
/**
* Add some Javascript to the header of the page
*/
public function add_script($s_script)
{
$this->a_scripts[] = $s_script;
}
/**
* Add some Javascript to the header of the page
*/
public function add_ready_script($s_script)
{
// Do nothing silently... this is not supported by this type of page...
}
/**
* Add some CSS definitions to the header of the page
*/
public function add_style($s_style)
{
$this->a_styles[] = $s_style;
}
/**
* Add a script (as an include, i.e. link) to the header of the page
*/
public function add_linked_script($s_linked_script)
{
$this->a_linked_scripts[] = $s_linked_script;
}
/**
* Add a CSS stylesheet (as an include, i.e. link) to the header of the page
*/
public function add_linked_stylesheet($s_linked_stylesheet, $s_condition = "")
{
$this->a_linked_stylesheets[] = array( 'link' => $s_linked_stylesheet, 'condition' => $s_condition);
}
/**
* Add some custom header to the page
*/
public function add_header($s_header)
{
$this->a_headers[] = $s_header;
}
/**
* Add needed headers to the page so that it will no be cached
*/
public function no_cache()
{
$this->add_header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
$this->add_header("Expires: Fri, 17 Jul 1970 05:00:00 GMT"); // Date in the past
}
/**
* Build a special kind of TABLE useful for displaying the details of an object from a hash array of data
*/
public function details($aFields)
{
$this->add($this->GetDetails($aFields));
}
/**
* Build a special kind of TABLE useful for displaying the details of an object from a hash array of data
*/
public function GetDetails($aFields)
{
$sHtml = "
\n";
// By Rom, for csv import, proposed to show several values for column selection
if (is_array($aAttrib['value']))
{
$sHtml .= "
".$aAttrib['label']."
".implode("
", $aAttrib['value'])."
\n";
}
else
{
$sHtml .= "
".$aAttrib['label']."
".$aAttrib['value']."
\n";
}
$sHtml .= "
\n";
}
$sHtml .= "\n";
$sHtml .= "
\n";
return $sHtml;
}
/**
* Outputs (via some echo) the complete HTML page by assembling all its elements
*/
public function output()
{
foreach($this->a_headers as $s_header)
{
header($s_header);
}
$s_captured_output = ob_get_contents();
ob_end_clean();
echo "\n";
echo "\n";
echo "\n";
echo "{$this->s_title}\n";
echo $this->get_base_tag();
foreach($this->a_linked_scripts as $s_script)
{
echo "\n";
}
if (count($this->a_scripts)>0)
{
echo "\n";
}
foreach($this->a_linked_stylesheets as $a_stylesheet)
{
if ($a_stylesheet['condition'] != "")
{
echo "\n";
}
}
if (count($this->a_styles)>0)
{
echo "\n";
}
echo "\n";
echo "\n";
echo $this->s_content;
if (trim($s_captured_output) != "")
{
echo "
$s_captured_output
\n";
}
echo $this->s_deferred_content;
echo "\n";
echo "\n";
}
/**
* Build a series of hidden field[s] from an array
*/
// By Rom - je verrais bien une serie d'outils pour gerer des parametres que l'on retransmet entre pages d'un wizard...
// ptet deriver webpage en webwizard
public function add_input_hidden($sLabel, $aData)
{
foreach($aData as $sKey=>$sValue)
{
$this->add("");
}
}
protected function get_base_tag()
{
$sTag = '';
if (($this->a_base['href'] != '') || ($this->a_base['target'] != ''))
{
$sTag = 'a_base['href'] != ''))
{
$sTag .= "href =\"{$this->a_base['href']}\" ";
}
if (($this->a_base['target'] != ''))
{
$sTag .= "target =\"{$this->a_base['target']}\" ";
}
$sTag .= " />\n";
}
return $sTag;
}
}
?>