Giter Site home page Giter Site logo

dom's Introduction

The modern DOM API for PHP 7 projects

The modern DOM API for PHP 7 projects.

Built on top of PHP's native DOMDocument, this project provides access to modern DOM APIs, as you would expect working with client-side code in the browser.

Performing DOM manipulation in your server-side code enhances the way dynamic pages can be built. Utilising a standardised object-oriented interface means the page can be ready-processed, benefitting browsers, webservers and content delivery networks.


Build status Code quality Code coverage Current version

Example usage: Hello, you!

Consider a page with a form, with an input element to enter your name. When the form is submitted, the page should greet you by your name.

This is a simple example of how source HTML files can be treated as templates. This can easily be applied to more advanced template pages to provide dynamic content, without requiring non-standard techniques such as {{curly braces}} for placeholders, or echo '<div class='easy-mistake'>' . $content['opa'] . '</div>' horrible HTML construction from within PHP.

Source HTML (name.html).

<!doctype html>
<h1>
	Hello, <span id="your-name">you</span> !
</h1>

<form>
	<input name="name" placeholder="Your name, please" required />
	<button>Submit</button>
</form>

PHP used to inject your name (index.php).

<?php
require "vendor/autoload.php";

$html = file_get_contents("name.html");
$document = new \Gt\Dom\HTMLDocument($html);

if(isset($_GET["name"])) {
	$document->getElementById("your-name")->textContent = $_GET["name"];
}

echo $document->saveHTML();

Screencast of above example:

Using DOM in PHP

Features at a glance.

Non-standard features.

The following features are currently in development and are planned to be released into version 2.0.

  • Server-side WebComponent support:
    • <calendar> <date>1988-04-05</date> <caption>My birthday</caption> </calendar>.
    • <button is="shopping-cart">Add to cart</button>.
  • Templating to ease dynamic content:
    • <template id="list-item"> <li> Add this many times </li> </template>.
    • <tr data-template="table-row"> <td> Add this many times. </td> </tr>.
  • Reference an element's children using CSS query selectors via ArrayAccess:
    • $container["h1"][0]->textContent = "Hello, World!";.
    • $document["body>header>nav li a"][0]->href = "/nowhere.html";.
    • foreach($myElement["input[type='checkbox']"] as $checkbox) {.

dom's People

Contributors

aguimaraes avatar g105b avatar j4m3s avatar jacobbearden avatar ognjen-petrovic avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.