Meta.php

<?php

namespace RBear\LiaExt;

class Meta {

    protected $request;
    
    protected function __construct($request){
        $this->request = $request;
    }
    public function meta($fields){
        $request = $this->request;
        foreach ($fields as $field=>$value){
            // echo $field."\n";
            if (substr($field,0,'5')=='meta.'){
                // var_dump('za');exit;
                $request->addHeadHtml('<meta name="'.substr($field,5).'" content="'.$value.'">');
                continue;
            } else if (substr($field,0,'3')=='og.'){
                // var_dump('za');exit;
                $request->addHeadHtml('<meta name="og:'.str_replace('.',':',substr($field,3)).'" content="'.$value.'">');
                continue;
            }
            switch ($field){
                case 'title':
                    $request->addHeadHtml('<title>'.$value.'</title>');
                    $request->addHeadHtml('<meta property="og:title" content="'.$value.'">');
                    break;
                case 'image':
                    $request->addHeadHtml('<meta property="og:image" content="'.$value.'">');
                    break;
                case 'url.style':
                    $request->addStyleUrl($value);
                    break;
                case 'url.script':
                    $request->addScriptUrl($value);
                    break;
                default:
                    $request->addHeadHtml("<!--could not set unrecognized field '{$field}'-->\n");
            }
            
        }
    }

    public function extractHtmlRdfa($string){
        $rdfaParser = new \Jkphl\RdfaLiteMicrodata\Ports\Parser\RdfaLite();

        // Parse an HTML file
        // $rdfaItems = $rdfaParser->parseHtmlFile('/path/to/file.html');

        // Parse an HTML string
        $items = [];
        $rdfaItems = $rdfaParser->parseHtml($string);
        // print_r($rdfaItems);
        // exit;
        foreach ($rdfaItems->items[0]->properties as $schemaProp=>$propArray){
            $propName = \RBear\Strings::replaceFirst($schemaProp,'http://schema.org/');
            $items[$propName] = $propArray[0];
        }
        // print_r($items);
        // exit;
        return $items;

        // // Parse a DOM document (here: created from an HTML string)
        // $rdfaDom = new \DOMDocument();
        // $rdfaDom->loadHTML($string);
        // $rdfaItems = $rdfaParser->parseDom($rdfaDom);

        // // Parse an XML file (e.g. SVG)
        // $rdfaItems = $rdfaParser->parseXmlFile('/path/to/file.svg');

        // // Parse an XML string (e.g. SVG)
        // $rdfaItems = $rdfaParser->parseXml('<svg viewBox="0 0 100 100" vocab="http://schema.org/">...</svg>');

        // return $rdfaItems;
        // // echo json_encode($rdfaItems, JSON_PRETTY_PRINT);
    }

    static public function addToApp($app,$key=NULL){
        $app->addHook('requestStarted',[static::class,'addToRequest'],$key);
    }
    static public function addToRequest($request,$key){
        $ext = new self($request);
        $key = $key ?? 'meta';
        $request->addExtension($ext,$key);
        return $ext;
    }
}