FEATURE: add base support for displaying multiple pages on one-page template
This commit is contained in:
@@ -2,9 +2,12 @@
|
||||
namespace Templates\Base\OnePage\Handlers;
|
||||
|
||||
use App\Handlers\Contracts\TemplateHandler;
|
||||
use App\Helpers\PageRenderer;
|
||||
use App\Helpers\Settings;
|
||||
use App\Models\Content;
|
||||
use App\Models\Module;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
abstract class OnePage implements TemplateHandler
|
||||
{
|
||||
@@ -23,6 +26,50 @@ abstract class OnePage implements TemplateHandler
|
||||
*/
|
||||
public static function registerAdminMenu(User $user)
|
||||
{
|
||||
$menu = \Menu::instance('mainMenu');
|
||||
$menu->route('template.setHomepage', trans('template::admin/mainMenu.setHomepage'), [], 1, ['icon' => 'fa fa-fw fa-home']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare Content object to be rendered using Blade template
|
||||
*
|
||||
* @param Content $content
|
||||
*/
|
||||
public static function beforeRender(Content & $content)
|
||||
{
|
||||
if ($content->is_homepage) {
|
||||
$pageIds = (array)json_decode(Settings::get(self::HOMEPAGE_PAGES_SETTINGS_KEY, '[]'));
|
||||
|
||||
if (empty($pageIds)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// get all available pages
|
||||
$pages = Content::whereIn('id', $pageIds);
|
||||
|
||||
if (Auth::user()) {
|
||||
$pages = $pages->where('status', '!=', Content::STATUS_DRAFT);
|
||||
} else {
|
||||
$pages = $pages->where('status', Content::STATUS_PUBLIC);
|
||||
}
|
||||
|
||||
$pages = $pages->get();
|
||||
|
||||
// create real content from pages
|
||||
$pagesRaw = $pagesInTemplates = [];
|
||||
foreach ($pages as $page) {
|
||||
$pagesRaw[$page->url] = $page;
|
||||
$pagesInTemplates[$page->url] = PageRenderer::render($page)
|
||||
->render();
|
||||
}
|
||||
|
||||
// dd($pagesRaw);
|
||||
|
||||
// return pages into template
|
||||
return ['pagesHtml' => $pagesInTemplates, 'pagesRaw' => $pagesRaw];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -77,6 +77,13 @@ class SetHomepage extends Controller
|
||||
*/
|
||||
public function addPage($id)
|
||||
{
|
||||
$page = Content::findOrFail($id);
|
||||
|
||||
if ($page->is_template) {
|
||||
return redirect()
|
||||
->back()
|
||||
->with('error', trans('template::admin/setHomepage.cannotSetHomepageAsPartOfHomepage'));
|
||||
}
|
||||
|
||||
// try to get page config
|
||||
$settingsEntry = \App\Models\Settings::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY)
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
namespace Templates\Base\OnePage\Listeners;
|
||||
|
||||
use App\Events\SetHomepage;
|
||||
use App\Helpers\Settings;
|
||||
use App\Models\Settings as SettingsModel;
|
||||
use Templates\Base\OnePage\Handlers\OnePage;
|
||||
|
||||
class HomepageChanged
|
||||
{
|
||||
public function handle(SetHomepage $event)
|
||||
{
|
||||
$pagesOnHomepage = (array)json_decode(Settings::get(OnePage::HOMEPAGE_PAGES_SETTINGS_KEY, '[]'));
|
||||
|
||||
if (empty($pagesOnHomepage)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (in_array($event->page->id, $pagesOnHomepage)) {
|
||||
$position = array_search($event->page->id, $pagesOnHomepage);
|
||||
|
||||
unset($pagesOnHomepage[$position]);
|
||||
|
||||
$pages = array_values($pagesOnHomepage);
|
||||
|
||||
$settings = SettingsModel::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY)
|
||||
->where('language', \LaravelLocalization::getCurrentLocale());
|
||||
|
||||
// update in database
|
||||
if (!empty($pages)) {
|
||||
$settings->update(['value' => json_encode($pages)]);
|
||||
} else {
|
||||
$settings->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
namespace Templates\Base\OnePage\Providers;
|
||||
|
||||
use App\Events\SetHomepage;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
use Templates\Base\OnePage\Listeners\HomepageChanged;
|
||||
|
||||
class EventProvider extends ServiceProvider
|
||||
{
|
||||
protected $listen = [
|
||||
SetHomepage::class => [HomepageChanged::class]
|
||||
];
|
||||
}
|
||||
@@ -23,5 +23,8 @@ class OnePageTemplate extends ServiceProvider
|
||||
$this->loadViewsFrom(array_merge(array_map(function ($path) {
|
||||
return $path;
|
||||
}, \Config::get('view.paths')), [__DIR__ . '/../Resources/views']), 'template');
|
||||
|
||||
// register event service provider for this template
|
||||
$this->app->register(EventProvider::class);
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,15 @@
|
||||
<?php
|
||||
return [
|
||||
'title' => 'Homepage setup',
|
||||
'pageDescription' => 'On this page you can setup all pages which should appear on homepage. Use drag\'n\'drop feature and organize your pages into your presentation.',
|
||||
'noPagesSelected' => 'No pages selected for homepage. Yet...',
|
||||
'noPagesAvailable' => 'There are no pages you could set up for homepage.',
|
||||
'successfullyAdded' => 'Page successfully added to homepage.',
|
||||
'successfullyRemoved' => 'Page successfully removed from homepage.',
|
||||
'invalidPageId' => 'Cannot remove page from homepage, because given ID does not exist.',
|
||||
'usedPages' => 'Used pages',
|
||||
'notUsedPages' => 'Not used pages',
|
||||
'reallyRemovePage' => 'Do you really want to remove this page from homepage?',
|
||||
'title' => 'Homepage setup',
|
||||
'pageDescription' => 'On this page you can setup all pages which should appear on homepage. Use drag\'n\'drop feature and organize your pages into your presentation.',
|
||||
'noPagesSelected' => 'No pages selected for homepage. Yet...',
|
||||
'noPagesAvailable' => 'There are no pages you could set up for homepage.',
|
||||
'successfullyAdded' => 'Page successfully added to homepage.',
|
||||
'successfullyRemoved' => 'Page successfully removed from homepage.',
|
||||
'invalidPageId' => 'Cannot remove page from homepage, because given ID does not exist.',
|
||||
'usedPages' => 'Used pages',
|
||||
'notUsedPages' => 'Not used pages',
|
||||
'reallyRemovePage' => 'Do you really want to remove this page from homepage?',
|
||||
'cannotSetHomepageAsPartOfHomepage' => 'Cannot set currently set homepage as one of homepage pages.'
|
||||
|
||||
];
|
||||
Reference in New Issue
Block a user