Edit via SFTP
<?php
// NOTE: This is already a sort of vaguely-HTMLish page because it (optionally) does DOCTYPE.
abstract class fcPage extends fcPageElement {
    #use ftRenderableTree, ftExecutableTree; // 2020-12-11 should be redundant now
 
    // ++ EXECUTION ++ //
 
    public function DoBuilding() { $this->DoEvent(KI_NODE_EVENT_DO_BUILDING); }
    public function DoFiguring() { $this->DoEvent(KI_NODE_EVENT_DO_FIGURING); }    public function DoOutput() : void { echo $this->Render(); }
 
    // -- EXECUTION -- //
    // ++ CLASSES ++ //
 
    protected function DocTypeClass() : string { return 'fcpeDocType'; }
 
    // -- CLASSES -- //
    // ++ NODES ++ //
 
    protected function DocTypeNode() { return $this->Spawn($this->DocTypeClass()); }
 
    // -- NODES -- //
    // ++ I/O ++ //
 
    abstract public function AddContentString(string $s);
    abstract public function DoStashedRedirect(string $url);
    /*----
      CEMENT
      NOTE: All of a Page's contents are subnodes; it has none aside from that.
    */
    public function Render() : string { return $this->RenderNodes(); }
 
    // -- I/O -- //
 
}