fetchOne('SELECT id FROM page WHERE path = ?', ['angebote']); $SCHEMA = 24; $portal = 'https://portal.immobilienscout24.de/ergebnisliste/16200281'; $nurUnten = static fn (string $w): array => ['top' => '0px', 'right' => '0px', 'bottom' => $w, 'left' => '0px']; // Der Kopf wie auf Impressum und Datenschutz: helle Fläche, Kleinzeile, große leichte Überschrift. $kopf = ['id' => 'angebote-kopf', 'type' => 'section', 'children' => [ ['id' => 'angebote-label', 'type' => 'text', 'props' => ['text' => 'AKTUELLE OBJEKTE'], 'style' => [ 'desktop' => ['fontSize' => '12px', 'fontWeight' => '700', 'letterSpacing' => '0.14em', 'lineHeight' => 1.6, 'color' => '@anthrazit', 'margin' => ['bottom' => '25px']], 'mobile' => ['fontSize' => '11px', 'margin' => ['bottom' => '18px']], ], 'layout' => ['effects' => ['entrance' => 'fade', 'delay' => 'none']]], ['id' => 'angebote-h1', 'type' => 'heading', 'props' => ['text' => 'Unsere Angebote', 'level' => 1], 'style' => [ 'desktop' => ['fontWeight' => '400', 'fontSize' => '56px', 'lineHeight' => 1.1, 'letterSpacing' => '-0.05em', 'margin' => ['bottom' => '22px']], 'tablet' => ['fontSize' => '44px'], 'mobile' => ['fontSize' => '38px', 'margin' => ['bottom' => '16px']], ], 'layout' => ['effects' => ['entrance' => 'rise', 'delay' => 'short']]], ['id' => 'angebote-vorspann', 'type' => 'text', 'props' => ['text' => 'Wohnungen, Häuser und Grundstücke aus unserem Bestand in Freudenstadt und Umgebung. Die Liste wird laufend aktualisiert – sehen Sie sich um und sprechen Sie uns an.'], 'style' => [ 'desktop' => ['maxWidth' => '640px', 'fontSize' => '18px', 'lineHeight' => 1.7, 'color' => '@text', 'margin' => ['bottom' => '0px']], 'mobile' => ['fontSize' => '16px'], ], 'layout' => ['effects' => ['entrance' => 'rise', 'delay' => 'medium']]], ], 'style' => [ 'desktop' => ['backgroundColor' => '@hell', 'borderWidth' => $nurUnten('1px'), 'borderStyle' => 'solid', 'borderColor' => '@linie-hell', 'padding' => ['top' => '84px', 'bottom' => '72px']], 'tablet' => ['padding' => ['top' => '64px', 'bottom' => '56px']], 'mobile' => ['padding' => ['top' => '48px', 'bottom' => '40px']], ]]; // Die Liste selbst. Der Rahmen bleibt hoch genug, dass mehrere Objekte ohne Scrollen im Rahmen // sichtbar sind; darunter der Weg zum Portal für alle, die lieber dort suchen. $hinweisText = 'Nichts Passendes dabei? Alle Objekte direkt bei ImmobilienScout24 ansehen ↗ oder sprechen Sie uns an – wir kennen den Markt vor Ort und wissen oft von Objekten, bevor sie inseriert sind.'; $liste = ['id' => 'angebote-liste', 'type' => 'section', 'children' => [ ['id' => 'angebote-rahmen', 'type' => 'embed', 'props' => [ 'group' => 'external', 'title' => 'Aktuelle Immobilienangebote der Deeg Hausverwaltung und Immobilien GmbH bei ImmobilienScout24', 'provider' => 'ImmobilienScout24', 'url' => $portal, 'hint' => 'Die Angebotsliste wird von ImmobilienScout24 geladen. Dabei erfährt der Anbieter Ihre IP-Adresse und welche Seite Sie ansehen.', 'height' => 1000, ], 'style' => ['desktop' => ['margin' => ['bottom' => '26px']]], 'layout' => ['effects' => ['entrance' => 'fade', 'delay' => 'none']], // Der Rahmen selbst und der Platzhalter davor tragen den Zuschnitt der Vorlage: eckig, // helle Fläche, Logo-Blau auf dem Knopf. Was IM Rahmen steht, gehört ImmobilienScout24 - // daran kommt kein CSS dieser Website heran, und das ist keine Einstellung, sondern die // Trennung zwischen zwei Herkünften im Browser. 'css' => "& iframe{border:1px solid #dbe1e3;border-radius:0;background:#f5fafd} &.embed-blocked{border:1px solid #dbe1e3;border-radius:0;background:#f5fafd;padding:56px 24px;text-align:left} & .embed-title{font-size:20px;font-weight:700;color:#343a40;margin-bottom:12px} & .embed-hint{max-width:640px;font-size:15px;line-height:1.7;color:#58666d} & .embed-provider{font-size:13px;color:#66747b} & .consent-button{border-radius:0;background:#0076b6;border-color:#0076b6;color:#fff;flex:0 0 auto;padding:16px 24px} & .consent-button:hover{background:#006aa3;border-color:#006aa3}", ], ['id' => 'angebote-hinweis', 'type' => 'text', 'props' => ['text' => $hinweisText], 'style' => [ 'desktop' => ['maxWidth' => '760px', 'fontSize' => '16px', 'lineHeight' => 1.7, 'color' => '@text', 'margin' => ['bottom' => '0px']], ], 'css' => "& a{color:#006aa3;text-decoration:underline;text-underline-offset:3px}\n& a:hover{color:#343a40}", 'layout' => ['effects' => ['entrance' => 'rise', 'delay' => 'short']]], ], 'style' => [ 'desktop' => ['padding' => ['top' => '72px', 'bottom' => '108px']], 'tablet' => ['padding' => ['top' => '56px', 'bottom' => '80px']], 'mobile' => ['padding' => ['top' => '40px', 'bottom' => '65px']], ]]; $dokumentAngebote = [ 'schemaVersion' => $SCHEMA, 'title' => 'Angebote', 'description' => 'Aktuelle Wohnungen, Häuser und Grundstücke der Deeg Hausverwaltung und Immobilien GmbH in Freudenstadt und Umgebung.', 'blocks' => [$kopf, $liste], ]; if (false !== $vorhanden) { $id = (string) $vorhanden; $revision = $pages->saveDraft($id, $dokumentAngebote, (int) $pages->findForEditor($id)['version']); $pages->publish($id, $revision, (int) $pages->findForEditor($id)['version']); echo "Seite überarbeitet und veröffentlicht: /angebote\n"; } else { $id = $pages->createPage('angebote', null, 'page', $dokumentAngebote); $seite = $db->fetchAssociative('SELECT draft_revision_id, version FROM page WHERE id = ?', [$id]); $pages->publish($id, $seite['draft_revision_id'], (int) $seite['version']); echo "Seite angelegt und veröffentlicht: /angebote\n"; } $db->executeStatement('UPDATE page SET seo_title = ? WHERE id = ?', ['Aktuelle Angebote | Deeg Hausverwaltung und Immobilien GmbH', $id]); // „Immobilien“ in der Navigation zeigte auf den Sprungpunkt der Startseite; jetzt gibt es die // Seite, auf die dieser Abschnitt ohnehin nur verwiesen hat. $header = $menus->all()['header']; $eintraege = []; foreach ($header['items'] as $eintrag) { if ('Immobilien' === $eintrag['label']) { $eintrag['pageId'] = $id; $eintrag['anchor'] = ''; } $eintraege[] = $eintrag; } $menus->save('header', $header['name'], $eintraege, (int) $header['version']); echo "Navigation: „Immobilien“ zeigt auf /angebote\n"; // Und der Knopf im Angebote-Band der Startseite, der bisher auf die alte Website führte. $home = $db->fetchAssociative('SELECT id FROM page WHERE path = ?', ['home']); $dokument = $pages->findForEditor($home['id'])['document']; $getroffen = 0; $walk = function (array &$blocks) use (&$walk, &$getroffen): void { foreach ($blocks as &$block) { // Der Knopf im Angebote-Band ist ein Textbaustein mit eigenem CSS, kein Button-Baustein - // deshalb wird die Adresse im Text ersetzt, nicht in den Eigenschaften. foreach (['href', 'text'] as $feld) { $wert = (string) ($block['props'][$feld] ?? ''); if ('' !== $wert && str_contains($wert, 'immobiliendeeg.de/immobilien')) { $block['props'][$feld] = str_replace(['https://www.immobiliendeeg.de/immobilien/', 'https://www.immobiliendeeg.de/immobilien'], '/angebote', $wert); unset($block['props']['newTab']); ++$getroffen; } } if (isset($block['children']) && is_array($block['children'])) { $walk($block['children']); } } }; $walk($dokument['blocks']); if ($getroffen > 0) { $stand = $pages->findForEditor($home['id']); $revision = $pages->saveDraft($home['id'], $dokument, $stand['version']); $pages->publish($home['id'], $revision, $pages->findForEditor($home['id'])['version']); } echo "Startseite: $getroffen Knopf/Knöpfe zeigen jetzt auf /angebote\n"; // Ein fremder Rahmen ohne Einwilligung lädt beim Seitenaufruf mit und gibt dabei IP-Adresse und // Seite an den Anbieter weiter. Mit der Gruppe „Externe Inhalte“ steht davor der Platzhalter, und // erst der Knopf lädt die Liste. Der Balken trägt die Farben der Website. $aktuell = $settings->load(); $settings->save([ ...$aktuell, // Gespeichert als Liste, erwartet als Textfeld - wie es der Einstellungsbildschirm schickt. 'sameAs' => implode("\n", $aktuell['sameAs']), 'consentBanner' => true, 'consentGroups' => ['external'], 'consentShape' => 'eckig', 'consentAccent' => '@blau-tief', 'consentAccentInk' => '@papier', 'consentColor' => '@papier', 'consentInk' => '@anthrazit', ]); echo "Einwilligung eingeschaltet: Gruppe „Externe Inhalte“, Balken eckig in Logo-Blau\n";