PHP Classes

File: myXTree/sample.php

Recommend this page to a friend!
  Classes of Tereshchenko Andrey   myXTree   myXTree/sample.php   Download  
File: myXTree/sample.php
Role: Example script
Content type: text/plain
Description: Example
Class: myXTree
myXTree is an interface to a SQL-tree.
Author: By
Last change: -
Date: 19 years ago
Size: 5,098 bytes
 

Contents

Class file image Download
<?php
/**
* In front of use of this example necessary to create a database in mySQL.
* SQL queries for creation of tables can be taken from file base.sql in root
* directory. After this necessary to fill the tables by data from file tree.sql
* in root directory. After it need specified the linking up parameters to
* database beneath in this example or in file config.ini.
*/

$user = 'root';
$pass = '';
$host = 'localhost';
$name = 'myXTree';
$prefix = 'xt_';

$root = $_SERVER['DOCUMENT_ROOT'];
$config['PATH']['pear'] = $root.'/PEAR';
$config['PATH']['myxml'] = $root.'/myXML';
$config['PATH']['myxtree'] = $root.'/myXTree';

function
getmicrotime() {
   list(
$usec, $sec) = explode(" ", microtime());
   return ((float)
$usec + (float)$sec);
}
$time_start = getmicrotime();

if (
file_exists('config.ini')) {
   
$config = parse_ini_file('config.ini', true);
   
extract($config['DB'], EXTR_OVERWRITE);
}

$dsn = "mysql://$user:$pass@$host/$name";

if (
substr(PHP_OS, 0, 3) == 'WIN') {
   
$searchPath = implode(';', $config['PATH']).';';
} else {
   
$searchPath = implode(':', $config['PATH']).':';
}
// Set the search path.
ini_set('include_path', $searchPath);

require_once(
'myDOM/myDOM.php');
require_once(
'myXTree.php');
require_once(
'DB.php');
require_once(
'Output.php');

PEAR::setErrorHandling(PEAR_ERROR_RETURN, E_USER_ERROR);

// Create new DOM document.
$oDocument = new Document;
$oDocument->setOption('indent', true);
$oDocument->setOption('method', 'xml');

// Connecting to database.
$db = DB::connect($dsn);
PEAR::isError($db) and
   
raiseError($db->getMessage());

// Set the selecting path.
$path = '/books//';
if (
$_GET['xpath']) {
   
$path = stripslashes($_GET['xpath']);
}

// Create object myXTree.
$oXTree = myXTree::create(&$db, $prefix);

// Set method of selecting.
if ($_GET['method'] == 'recursive') {
   
$oXTree->recursive();
}
// Set the reception node.
$oXTree->setReceptionNode(&$oDocument);

// Selecting objects from SQL-tree.
$oXTree->select($path);
   
// Disconnecting.
$db->disconnect();

?>

<html>
  <head>
    <title>myXTree example</title>
  </head>
  <body style="margin: 10%; font-family: Courier New;">
    <center>
      <h1>myXTree example</h1>
    </center>
    <div>
      <ul>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">/books/book</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">/books/book/*[name()!="price"]</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book/descendant-or-self::node()</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[@id=1 or @id=3 or @id>7]//</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[price > 10]//</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[author="Plato" or author="Sophocles"]//</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[@id=5]/following::node()</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[@id=5]/preceding::node()</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[@id=5]/following-sibling::node()</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//book[@id=5]/preceding-sibling::node()</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//title/parent::book[@id >= 5]</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//title/../author[.="Sophocles"]//</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//price/ancestor::book[@id!=5]</li>
        <li style="cursor: hand;" onClick="document.pathForm.xpath.value=this.innerText;">//title[parent::book/@id=5]/ancestor::node()</li>
      </ul>
      <script language="php">
        $time_end = getmicrotime();
        $time = $time_end - $time_start;
        echo "<br>Time: $time s.";
        if ($oldtime = $_GET['time']) {
          $rate = ($oldtime - $time)/$oldtime*100;
          echo "<br>Rate: $rate %.";
        }
      </script>
      <form name="pathForm">
        <input type="hidden" name="time" value="<?php echo $time; ?>">
        <input type="radio" name="method" value="selfjoin" checked> Selfjoin method
        <input type="radio" name="method" value="recursive"> Recursive method <br>
        <input type="text" name="xpath" style="width: 400;">
        <input type="submit" name="submit" value="Submit">
      </form>
    </div>
    <div style="color: blue; background-color: silver; padding: 1%;">
      <script language="php">
        print '<pre>'.htmlentities($oDocument->toString()).'</pre>';
      </script>
    </div>
  </body>
</html>