<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/index.php?action=history&amp;feed=atom&amp;title=ProcessWire_-_Strucured_Data</id>
	<title>ProcessWire - Strucured Data - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/index.php?action=history&amp;feed=atom&amp;title=ProcessWire_-_Strucured_Data"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Strucured_Data&amp;action=history"/>
	<updated>2026-05-09T06:38:33Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikizone</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Strucured_Data&amp;diff=25892&amp;oldid=prev</id>
		<title>134.3.74.15: Die Seite wurde neu angelegt: „Möglichkeiten mit ProcessWire strukturierte Daten zu erzeugen.  == Test mit Job-Posting == job.php (Template) &lt;syntaxhighlight lang=&quot;php&quot;&gt; &lt;?php namespace Pro…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Strucured_Data&amp;diff=25892&amp;oldid=prev"/>
		<updated>2022-02-09T14:33:22Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „Möglichkeiten mit ProcessWire strukturierte Daten zu erzeugen.  == Test mit Job-Posting == job.php (Template) &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt; &amp;lt;?php namespace Pro…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Möglichkeiten mit ProcessWire strukturierte Daten zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
== Test mit Job-Posting ==&lt;br /&gt;
job.php (Template)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
include(&amp;#039;includes/SchemaHelper.php&amp;#039;);&lt;br /&gt;
$additionalHeaderData .= &amp;#039;&lt;br /&gt;
	&amp;lt;style&amp;gt;&lt;br /&gt;
		pre{background: #ccc; border: 1px solid black; padding: 2rem;}&lt;br /&gt;
	&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
$sh = new SchemaHelper;&lt;br /&gt;
$jsonld = $sh-&amp;gt;jsonldJobPosting($page);&lt;br /&gt;
&lt;br /&gt;
$applyForm = &amp;#039;&amp;#039;;&lt;br /&gt;
$apply = &amp;#039;&amp;#039;;&lt;br /&gt;
$callToAction = &amp;#039;&amp;#039;;&lt;br /&gt;
$content = &amp;#039;&amp;#039;;&lt;br /&gt;
$copyField = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$apply .= &amp;#039;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
	&amp;lt;a href=&amp;quot;#apply-form&amp;quot; rel=&amp;quot;nofollow noopener&amp;quot; target=&amp;quot;_self&amp;quot; class=&amp;quot;button primary&amp;quot;&amp;gt;&lt;br /&gt;
	    Jetzt bewerben&lt;br /&gt;
	&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;apply&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;&amp;#039;.$page-&amp;gt;title.&amp;#039;&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;#039;.$page-&amp;gt;body.&amp;#039;&lt;br /&gt;
	&amp;lt;h3&amp;gt; Alle Details zu dieser Stelle auf einen Blick&amp;lt;/h3&amp;gt;&lt;br /&gt;
	&amp;lt;table class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;tbody&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
$apply .=&amp;#039;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;th&amp;gt;Anzeigenart&amp;lt;/th&amp;gt;&lt;br /&gt;
				&amp;lt;td&amp;gt;Stellenangebot&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
$apply .=&amp;#039;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;th&amp;gt;Arbeitgeber&amp;lt;/th&amp;gt;&lt;br /&gt;
				&amp;lt;td&amp;gt;&amp;#039;.$page-&amp;gt;organization_name.&amp;#039;&amp;lt;br&amp;gt;&amp;#039;.$page-&amp;gt;link.&amp;#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
if($page-&amp;gt;minValue &amp;amp;&amp;amp; $page-&amp;gt;maxValue &amp;amp;&amp;amp; $page-&amp;gt;time_unit){&lt;br /&gt;
	$apply .=&amp;#039;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;th&amp;gt;Vergütung&amp;lt;/th&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;#039;.$page-&amp;gt;minValue.&amp;#039;€ - &amp;#039;.$page-&amp;gt;maxValue.&amp;#039;€ &amp;#039;.$page-&amp;gt;time_unit-&amp;gt;title.&amp;#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;#039;;&lt;br /&gt;
}else if($page-&amp;gt;minValue &amp;amp;&amp;amp; $page-&amp;gt;time_unit){&lt;br /&gt;
	$apply .=&amp;#039;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;th&amp;gt;Vergütung&amp;lt;/th&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;#039;.$page-&amp;gt;minValue.&amp;#039;€ &amp;#039;.$page-&amp;gt;unit-&amp;gt;title.&amp;#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
// Arbeitsort&lt;br /&gt;
$apply .=&amp;#039;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;th&amp;gt;Arbeitsort&amp;lt;/th&amp;gt;&lt;br /&gt;
				&amp;lt;td&amp;gt;&lt;br /&gt;
					&amp;#039;.$page-&amp;gt;fp_postal_address-&amp;gt;streetAddress.&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
					&amp;#039;.$page-&amp;gt;fp_postal_address-&amp;gt;postalCode.&amp;#039; &amp;#039;.$page-&amp;gt;fp_postal_address-&amp;gt;addressLocality.&amp;#039;&lt;br /&gt;
					&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$apply .= &amp;#039;&lt;br /&gt;
		&amp;lt;/tbody&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$applyForm .= &amp;#039;&lt;br /&gt;
&amp;lt;div id=&amp;quot;apply-form&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;h2&amp;gt;Bewerbung&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;#039;.$page-&amp;gt;body2.&amp;#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$callToAction .=&amp;#039;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
	&amp;lt;a href=&amp;quot;#apply-form&amp;quot; rel=&amp;quot;nofollow noopener&amp;quot; target=&amp;quot;_self&amp;quot; class=&amp;quot;button primary&amp;quot;&amp;gt;&lt;br /&gt;
		Jetzt bewerben&lt;br /&gt;
	&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$copyField = &amp;#039;&lt;br /&gt;
&amp;#039;.$callToAction.&amp;#039;&lt;br /&gt;
&amp;#039;.$apply.&amp;#039;&lt;br /&gt;
&amp;#039;.$applyForm.&amp;#039;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$copyField2 = &amp;#039;&lt;br /&gt;
&amp;#039;.$jsonld.&amp;#039;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$copyField = &amp;#039;&lt;br /&gt;
&amp;lt;h4&amp;gt;HTML&amp;lt;h4&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;.htmlspecialchars($copyField).&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$copyField2 = &amp;#039;&lt;br /&gt;
&amp;lt;h4&amp;gt;JsonLD&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;.htmlspecialchars($copyField2).&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$content .= $callToAction.$apply.$applyForm.$copyField2.$copyField.$jsonld;&lt;br /&gt;
&lt;br /&gt;
	/* @TODO weitere Eigenschaften:&lt;br /&gt;
	 * - Aus- und Weiterbildung&lt;br /&gt;
	 * - Berufskategorie (z.B. Handel, Vertrieb, Verkauf / Handelsvertretung)&lt;br /&gt;
	 * - Berufliche Praxis (z.B. mit Berufserfahrung)&lt;br /&gt;
	 * -&lt;br /&gt;
	 */&lt;br /&gt;
	?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
SchemaHelper.php&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
// @todo outsource some of the nessecary types (i.e. place) in backend use&lt;br /&gt;
// fieldgroups for that maybe s.th. like $place = getFg(&amp;#039;schema_place&amp;#039;)&lt;br /&gt;
class SchemaHelper{&lt;br /&gt;
	// Load the requested schema from the schemas directory and register the class&lt;br /&gt;
	public function jsonldJobPosting ($p) {&lt;br /&gt;
		$jsonld = array();&lt;br /&gt;
		$sanitizer = wire(&amp;#039;sanitizer&amp;#039;);&lt;br /&gt;
		//set unset fields (for not mandatory fields)&lt;br /&gt;
		$p-&amp;gt;validThrough = $p-&amp;gt;validThrough ? : &amp;#039;&amp;#039;; // todo test&lt;br /&gt;
&lt;br /&gt;
		$jsonld[&amp;quot;@context&amp;quot;] = &amp;quot;http://schema.org/&amp;quot;;&lt;br /&gt;
		$jsonld[&amp;quot;@type&amp;quot;] = &amp;quot;JobPosting&amp;quot;;&lt;br /&gt;
		if($p-&amp;gt;link) $jsonld[&amp;quot;url&amp;quot;] = $p-&amp;gt;link;&lt;br /&gt;
		else $jsonld[&amp;quot;url&amp;quot;] = $sanitizer-&amp;gt;url($p-&amp;gt;httpUrl);&lt;br /&gt;
		$jsonld[&amp;quot;datePosted&amp;quot;] = !empty($p-&amp;gt;datePosted) ? date(DATE_ISO8601, strtotime($p-&amp;gt;datePosted)) : date(DATE_ISO8601, strtotime($p-&amp;gt;created));&lt;br /&gt;
		$jsonld[&amp;quot;validThrough&amp;quot;] = date(DATE_ISO8601, strtotime($p-&amp;gt;validThrough));&lt;br /&gt;
		$jsonld[&amp;quot;description&amp;quot;] = $sanitizer-&amp;gt;textarea($p-&amp;gt;body);&lt;br /&gt;
		$jsonld[&amp;#039;hiringOrganization&amp;#039;] = array(&lt;br /&gt;
			&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;Organization&amp;quot;,&lt;br /&gt;
			&amp;quot;name&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;organization_name),&lt;br /&gt;
			&amp;quot;sameAs&amp;quot; =&amp;gt; $sanitizer-&amp;gt;url($p-&amp;gt;link)&lt;br /&gt;
		);&lt;br /&gt;
		if($p-&amp;gt;link2)$jsonld[&amp;#039;hiringOrganization&amp;#039;][&amp;#039;logo&amp;#039;] = $p-&amp;gt;link2;&lt;br /&gt;
		$jsonld[&amp;#039;title&amp;#039;] = $sanitizer-&amp;gt;text($p-&amp;gt;title);&lt;br /&gt;
&lt;br /&gt;
		if($p-&amp;gt;minValue &amp;amp;&amp;amp; $p-&amp;gt;maxValue &amp;amp;&amp;amp; $p-&amp;gt;time_unit){&lt;br /&gt;
			$jsonld[&amp;#039;baseSalary&amp;#039;] = array(&lt;br /&gt;
				&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;MonetaryAmount&amp;quot;,&lt;br /&gt;
				&amp;quot;currency&amp;quot; =&amp;gt; &amp;quot;EUR&amp;quot;,&lt;br /&gt;
				&amp;quot;value&amp;quot; =&amp;gt; array(&lt;br /&gt;
					&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;QuantitativeValue&amp;quot;,&lt;br /&gt;
					&amp;quot;minValue&amp;quot; =&amp;gt; $sanitizer-&amp;gt;float($p-&amp;gt;minValue),&lt;br /&gt;
					&amp;quot;maxValue&amp;quot; =&amp;gt; $sanitizer-&amp;gt;float($p-&amp;gt;maxValue),&lt;br /&gt;
					&amp;quot;unitText&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;time_unit-&amp;gt;value)&lt;br /&gt;
				)&lt;br /&gt;
			);&lt;br /&gt;
		}else if($p-&amp;gt;minValue &amp;amp;&amp;amp; $p-&amp;gt;time_unit){&lt;br /&gt;
			$jsonld[&amp;#039;baseSalary&amp;#039;] = array(&lt;br /&gt;
				&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;MonetaryAmount&amp;quot;,&lt;br /&gt;
				&amp;quot;currency&amp;quot; =&amp;gt; &amp;quot;EUR&amp;quot;,&lt;br /&gt;
				&amp;quot;value&amp;quot; =&amp;gt; array(&lt;br /&gt;
					&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;QuantitativeValue&amp;quot;,&lt;br /&gt;
					&amp;quot;value&amp;quot; =&amp;gt; $sanitizer-&amp;gt;float($p-&amp;gt;minValue),&lt;br /&gt;
					&amp;quot;unitText&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;time_unit-&amp;gt;value)&lt;br /&gt;
				)&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
		$jsonld[&amp;#039;jobLocation&amp;#039;] = array(&lt;br /&gt;
			&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;Place&amp;quot;,&lt;br /&gt;
			&amp;quot;address&amp;quot; =&amp;gt; array(&lt;br /&gt;
				&amp;quot;@type&amp;quot; =&amp;gt; &amp;quot;PostalAddress&amp;quot;,&lt;br /&gt;
				&amp;quot;streetAddress&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;fp_postal_address-&amp;gt;streetAddress),&lt;br /&gt;
				&amp;quot;addressLocality&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;fp_postal_address-&amp;gt;addressLocality),&lt;br /&gt;
				&amp;quot;addressRegion&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;fp_postal_address-&amp;gt;addressRegion),&lt;br /&gt;
				&amp;quot;postalCode&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;fp_postal_address-&amp;gt;postalCode),&lt;br /&gt;
				&amp;quot;addressCountry&amp;quot; =&amp;gt; $sanitizer-&amp;gt;text($p-&amp;gt;fp_postal_address-&amp;gt;addressCountry),&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
		// recommended properties&lt;br /&gt;
&lt;br /&gt;
		if($c = count($p-&amp;gt;employmentType)){&lt;br /&gt;
			$types = array();&lt;br /&gt;
			foreach($p-&amp;gt;employmentType as $type){&lt;br /&gt;
				$types[] = $sanitizer-&amp;gt;text($type-&amp;gt;value);&lt;br /&gt;
			}&lt;br /&gt;
			//var_dump($c);&lt;br /&gt;
			if($c &amp;gt; 1) $jsonld[&amp;#039;employmentType&amp;#039;] = $types;&lt;br /&gt;
			else $jsonld[&amp;#039;employmentType&amp;#039;] = $types[0];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//$out .= &amp;#039;&amp;lt;script type=&amp;quot;application/ld+json&amp;quot;&amp;gt;&amp;#039; . json_encode($jsonld) . &amp;#039;&amp;lt;/script&amp;gt;&amp;#039;;&lt;br /&gt;
		$out = &amp;#039;&amp;lt;script type=&amp;quot;application/ld+json&amp;quot;&amp;gt;&amp;#039; . json_encode($jsonld,JSON_PRETTY_PRINT) . &amp;#039;&amp;lt;/script&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		return $out;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.74.15</name></author>
	</entry>
</feed>