File: D:/HostingSpaces/SBogers54/csbinstallatietechniek.nl/database/seeds/SamplePages.php
<?php
use Illuminate\Support\Facades\App;
use Illuminate\Support\Str;
use Komma\KMS\Globalization\Languages\Models\Language;
use App\Pages\Models\Page;
use App\Pages\Models\PageTranslation;
use App\Routes\RouteService;
use Komma\KMS\Sites\Models\Site;
use Komma\KMS\Sites\SiteServiceInterface;
;
use Illuminate\Database\Seeder;
class SamplePages extends Seeder
{
/**
*
*/
public function run()
{
$routeService = new RouteService();
$siteService = App::make(SiteServiceInterface::class); //Returns a singleton that is used throughout the whole app
$mainSite = Site::where('name', '=', 'Main company')->first();
$subsidiarySite = Site::where('name', '=', 'Subsidiary company')->first();
if (!$mainSite || !$subsidiarySite) {
throw new RuntimeException('No main or subsidiary site found. Did you forgot to run the core package seeds / migrations?');
}
$mainSiteRoot = new Page(['active' => '0', 'site_id' => $mainSite->id]);
$mainSiteRoot->makeRoot();
$mainSiteRoot->save();
$subsidiarySiteRoot = new Page(['active' => '0', 'site_id' => $subsidiarySite->id]);
$subsidiarySiteRoot->makeRoot();
$subsidiarySiteRoot->save();
$mainSitePages = [
[
'code_name' => 'home',
'nl' => "Home",
'de' => "Home",
'en' => "Home",
],
[
'code_name' => 'about',
'nl' => "Over ons",
'de' => "Über uns",
'en' => "About us",
'children' => [
[
'code_name' => 'the_team',
'nl' => 'Het team',
'de' => 'Das team',
'en' => 'The Team',
],
[
'code_name' => 'location',
'nl' => 'Locatie',
'de' => 'Standort',
'en' => 'Location',
'children' => [
[
'code_name' => 'location_a',
'nl' => 'Locatie A',
'de' => 'Standort A',
'en' => 'Location A',
'children' => [],
],
[
'code_name' => 'location_b',
'nl' => 'Locatie B',
'de' => 'Standort B',
'en' => 'Location B',
'children' => [],
],
],
],
[
'code_name' => 'what_we_do',
'nl' => 'Wat we doen',
'de' => 'Was wir machen',
'en' => 'What we do',
],
],
],
[
'code_name' => 'posts',
'nl' => "Blog",
'en' => "Blog",
'de' => "Blog",
],
[
'code_name' => 'contact',
'nl' => "Contact",
'de' => "Kontakt",
'en' => "Contact",
],
[
'code_name' => 'privacy',
'nl' => "Privacy",
'de' => "Privacy",
'en' => "Privacy",
],
[
'code_name' => 'legal',
'nl' => "Disclaimer",
'de' => "Haftungsausschluss",
'en' => "Disclaimer",
],
];
$subSidiarySitePages = [
[
'code_name' => 'home',
'nl' => "Thuis",
'de' => "House",
'en' => "Home",
],
[
'code_name' => 'about',
'nl' => "Over ons",
'de' => "Über uns",
'en' => "About us",
],
];
$siteService->setCurrentSiteBySlug($mainSite->slug);
foreach ($mainSitePages as $pageData) {
$page = $this->createPage($pageData, $mainSiteRoot, $mainSite, $routeService);
}
$siteService->setCurrentSiteBySlug($subsidiarySite->slug);
foreach ($subSidiarySitePages as $pageData) {
$page = $this->createPage($pageData, $subsidiarySiteRoot, $subsidiarySite, $routeService);
}
}
/**
* Create a category from the array data you pass it.
*
* @param $pageData
* @param Page $parent
* @param Site $site
* @param RouteService $routeService
* @return Page
*/
private function createPage(array $pageData, Page $parent, Site $site, RouteService $routeService): Page
{
$page = new Page();
$page->code_name = $pageData['code_name'];
$page->active = 1;
$page->site_id = $site->id;
$page->makeLastChildOf($parent); //Also saves
foreach ($pageData as $key => $value) {
switch ($key) {
case 'code_name':
break;
case 'children':
foreach ($value as $childCategoryData) {
$this->createPage($childCategoryData, $page, $site, $routeService);
}
break;
default:
$language = Language::where('iso_2', '=', $key)->first();
if (!$language) {
break;
}
$translation = new PageTranslation();
$translation->language()->associate($language);
$translation->translatable()->associate($page);
$translation->slug = Str::slug($value);
$translation->name = $value;
$translation->meta_title = $value;
$translation->description = '[]';
$translation->save();
$routeService->createOrUpdateRoutesForModelsTranslationsIfChanged($page);
}
}
return $page;
}
}