web: Transparenzseiten — was kostet, ohne Abo, loeschen/aendern (Roadmap 2.4)
Drei Seiten mit unterschiedlicher Suchintention, DE/EN, Hub + Spokes: - /was-kostet-eine-pressemitteilung: kurze Antwort im ersten Bildschirm, vier Abrechnungsmodelle ohne Anbieternamen und fremde Preise, sechs Prueffragen fuer Folgekosten, "Was bei uns gilt" (sieben Zusagen mit Einloesung), Rechenbeispiel Einzelabrechnung gegen Starter-Monate mit Zeilen fuer beide Seiten. - /pressemitteilung-veroeffentlichen-ohne-abo: Ablauf, enthalten / nicht enthalten, nichts verfaellt, wann sich ein Tarif lohnt. - /pressemitteilung-loeschen-oder-aendern-lassen: fuenf Wege als Tabelle (Korrektur, Aenderung, DSGVO, Depublikation, DSA), Antragsweg ueber /melden/pm, Korrektur statt Loeschung, Absatz fuer Meldungen auf fremden Portalen ohne Zusagen ueber Dritte. PricingTransparencyData liefert alle Zahlen aus config/billing, credits, legal und dem Starter-Tarif; TransparencyPageController leitet die Marke aus dem Host ab. Tabellen-Typografie fuer .pm-body. Verlinkt aus Preisuebersicht, Hilfe-Center, Sitemaps und llms.txt. Test TransparencyPagesTest (9) erzwingt u. a., dass im Rechenbeispiel beide Modelle Zeilen gewinnen. Protokoll Teil 5, Roadmap 2.4 abgehakt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
84ea617107
commit
b6e4bc5dc0
18 changed files with 953 additions and 4 deletions
50
app/Http/Controllers/Web/TransparencyPageController.php
Normal file
50
app/Http/Controllers/Web/TransparencyPageController.php
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Web\PricingTransparencyData;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
/**
|
||||
* Transparenzseiten (Roadmap 2.4): drei Seiten mit unterschiedlicher
|
||||
* Suchintention, alle mit denselben Zahlen aus PricingTransparencyData.
|
||||
*/
|
||||
class TransparencyPageController extends Controller
|
||||
{
|
||||
public function cost(Request $request, PricingTransparencyData $data): View
|
||||
{
|
||||
return view('web.was-kostet-eine-pressemitteilung', $this->pageData($request, $data));
|
||||
}
|
||||
|
||||
public function noSubscription(Request $request, PricingTransparencyData $data): View
|
||||
{
|
||||
return view('web.pressemitteilung-veroeffentlichen-ohne-abo', $this->pageData($request, $data));
|
||||
}
|
||||
|
||||
public function changeOrDelete(Request $request, PricingTransparencyData $data): View
|
||||
{
|
||||
return view('web.pressemitteilung-loeschen-oder-aendern-lassen', $this->pageData($request, $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* Markenname aus dem Host (wie /melden) — der Theme-Provider ist in
|
||||
* Tests noch nicht auf den Request-Host gelaufen.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
private function pageData(Request $request, PricingTransparencyData $data): array
|
||||
{
|
||||
$host = $request->getHost();
|
||||
$brandKey = str_contains($host, 'pressekonto')
|
||||
? 'pressekonto'
|
||||
: (str_contains($host, 'presseecho') ? 'presseecho' : 'businessportal24');
|
||||
$brand = (array) config('domains.domains.'.$brandKey.'.brand', []);
|
||||
|
||||
return [
|
||||
...$data->build(),
|
||||
'brandLabel' => ($brand['name'] ?? '').($brand['accent'] ?? ''),
|
||||
];
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue