Structural changes in CMS pages. Fixed bugs #1300, #1295

This commit is contained in:
Prashant Singh 2019-08-16 17:36:47 +05:30
parent 8c96bca9b3
commit bd6e0c9345
9 changed files with 146 additions and 130 deletions

View File

@ -19,13 +19,17 @@ class CMSPageDataGrid extends DataGrid
public function prepareQueryBuilder()
{
$queryBuilder = DB::table('cms_pages')->select('id', 'url_key', 'page_title');
$queryBuilder = DB::table('cms_pages')->select('id', 'url_key', 'page_title', 'channel_id', 'locale_id');
$this->setQueryBuilder($queryBuilder);
}
public function addColumns()
{
$channels = app('Webkul\Core\Repositories\ChannelRepository');
$locales = app('Webkul\Core\Repositories\LocaleRepository');
$this->addColumn([
'index' => 'id',
'label' => trans('admin::app.datagrid.id'),
@ -52,6 +56,34 @@ class CMSPageDataGrid extends DataGrid
'sortable' => true,
'filterable' => true
]);
$this->addColumn([
'index' => 'locale_id',
'label' => trans('admin::app.cms.pages.locale'),
'type' => 'number',
'searchable' => false,
'sortable' => true,
'filterable' => true,
'wrapper' => function($row) use($channels) {
$channelCode = $channels->find($row->channel_id)->name;
return $row->channel_id.' ('. $channelCode. ')';
}
]);
$this->addColumn([
'index' => 'channel_id',
'label' => trans('admin::app.cms.pages.channel'),
'type' => 'number',
'searchable' => false,
'sortable' => true,
'filterable' => true,
'wrapper' => function($row) use($locales) {
$localeCode = $locales->find($row->locale_id)->code;
return $row->locale_id.' ('. $localeCode. ')';
}
]);
}
public function prepareActions() {

View File

@ -987,6 +987,8 @@ return [
'add-title' => 'Add Page',
'content' => 'Content',
'url-key' => 'URL Key',
'channel' => 'Channel',
'locale' => 'Locale',
'create-btn-title' => 'Add Page',
'edit-title' => 'Edit Page',
'edit-btn-title' => 'Save Page',

View File

@ -15,36 +15,6 @@
{{ __('admin::app.cms.pages.pages') }}
</h1>
<div class="control-group">
<select class="control" id="channel-switcher" name="channel">
@php
$locale = request()->get('locale') ?: app()->getLocale();
$channel = request()->get('channel') ?: core()->getDefaultChannelCode();
@endphp
@foreach (core()->getAllChannels() as $channelModel)
<option value="{{ $channelModel->code }}" {{ ($channelModel->code) == $channel ? 'selected' : '' }}>
{{ $channelModel->name }}
</option>
@endforeach
</select>
</div>
<div class="control-group">
<select class="control" id="locale-switcher" name="locale">
@foreach (core()->getAllLocales() as $localeModel)
<option value="{{ $localeModel->code }}" {{ ($localeModel->code) == $locale ? 'selected' : '' }}>
{{ $localeModel->name }}
</option>
@endforeach
</select>
</div>
</div>
<div class="page-action fixed-action">
@ -59,6 +29,14 @@
<div class="form-container">
@csrf()
<div class="control-group" :class="[errors.has('page_title') ? 'has-error' : '']">
<label for="page_title" class="required">{{ __('admin::app.cms.pages.page-title') }}</label>
<input type="text" class="control" name="page_title" v-validate="'required'" value="{{ old('page_title') }}" data-vv-as="&quot;{{ __('admin::app.cms.pages.page-title') }}&quot;">
<span class="control-error" v-if="errors.has('page_title')">@{{ errors.first('page_title') }}</span>
</div>
<div class="control-group" :class="[errors.has('url_key') ? 'has-error' : '']">
<label for="url-key" class="required">{{ __('admin::app.cms.pages.url-key') }}</label>
@ -67,6 +45,33 @@
<span class="control-error" v-if="errors.has('url_key')">@{{ errors.first('url_key') }}</span>
</div>
@inject('channels', 'Webkul\Core\Repositories\ChannelRepository')
@inject('locales', 'Webkul\Core\Repositories\LocaleRepository')
<div class="control-group" :class="[errors.has('channels[]') ? 'has-error' : '']">
<label for="url-key" class="required">{{ __('admin::app.cms.pages.channel') }}</label>
<select type="text" class="control" name="channels[]" v-validate="'required'" value="{{ old('channel[]') }}" data-vv-as="&quot;{{ __('admin::app.cms.pages.channel') }}&quot;" multiple="multiple">
@foreach($channels->all() as $channel)
<option value="{{ $channel->id }}">{{ $channel->name }}</option>
@endforeach
</select>
<span class="control-error" v-if="errors.has('channels[]')">@{{ errors.first('channels[]') }}</span>
</div>
<div class="control-group" :class="[errors.has('locales[]') ? 'has-error' : '']">
<label for="url-key" class="required">{{ __('admin::app.cms.pages.locale') }}</label>
<select type="text" class="control" name="locales[]" v-validate="'required'" value="{{ old('locale[]') }}" data-vv-as="&quot;{{ __('admin::app.cms.pages.locale') }}&quot;" multiple="multiple">
@foreach($locales->all() as $locale)
<option value="{{ $locale->id }}">{{ $locale->name }}</option>
@endforeach
</select>
<span class="control-error" v-if="errors.has('locales[]')">@{{ errors.first('locales[]') }}</span>
</div>
<div class="control-group" :class="[errors.has('html_content') ? 'has-error' : '']">
<label for="html_content" class="required">{{ __('admin::app.cms.pages.content') }}</label>
@ -85,14 +90,6 @@
<span class="control-error" v-if="errors.has('html_content')">@{{ errors.first('html_content') }}</span>
</div>
<div class="control-group" :class="[errors.has('page_title') ? 'has-error' : '']">
<label for="page_title" class="required">{{ __('admin::app.cms.pages.page-title') }}</label>
<input type="text" class="control" name="page_title" v-validate="'required'" value="{{ old('page_title') }}" data-vv-as="&quot;{{ __('admin::app.cms.pages.page-title') }}&quot;">
<span class="control-error" v-if="errors.has('page_title')">@{{ errors.first('page_title') }}</span>
</div>
<div class="control-group" :class="[errors.has('meta_title') ? 'has-error' : '']">
<label for="meta_title" class="required">{{ __('admin::app.cms.pages.meta_title') }}</label>

View File

@ -15,36 +15,6 @@
{{ __('admin::app.cms.pages.pages') }}
</h1>
<div class="control-group">
<select class="control" id="channel-switcher" name="channel">
@php
$locale = request()->get('locale') ?: app()->getLocale();
$channel = request()->get('channel') ?: core()->getDefaultChannelCode();
@endphp
@foreach (core()->getAllChannels() as $channelModel)
<option value="{{ $channelModel->code }}" {{ ($channelModel->code) == $channel ? 'selected' : '' }}>
{{ $channelModel->name }}
</option>
@endforeach
</select>
</div>
<div class="control-group">
<select class="control" id="locale-switcher" name="locale">
@foreach (core()->getAllLocales() as $localeModel)
<option value="{{ $localeModel->code }}" {{ ($localeModel->code) == $locale ? 'selected' : '' }}>
{{ $localeModel->name }}
</option>
@endforeach
</select>
</div>
</div>
<div class="page-action fixed-action">
@ -63,10 +33,18 @@
<div class="form-container">
@csrf()
<div class="control-group" :class="[errors.has('page_title') ? 'has-error' : '']">
<label for="page_title" class="required">{{ __('admin::app.cms.pages.page-title') }}</label>
<input type="text" class="control" name="page_title" v-validate="'required'" value="{{ $page->page_title ?? old('page_title') }}" data-vv-as="&quot;{{ __('admin::app.cms.pages.page-title') }}&quot;">
<span class="control-error" v-if="errors.has('page_title')">@{{ errors.first('page_title') }}</span>
</div>
<div class="control-group" :class="[errors.has('url_key') ? 'has-error' : '']">
<label for="url-key" class="required">{{ __('admin::app.cms.pages.url-key') }}</label>
<input type="text" class="control" name="url_key" v-validate="'required'" value="{{ $page->url_key ?? old('url_key') }}" data-vv-as="&quot;{{ __('admin::app.cms.pages.url-key') }}&quot;" v-slugify>
<input type="text" class="control" name="url_key" v-validate="'required'" value="{{ $page->url_key ?? old('url_key') }}" data-vv-as="&quot;{{ __('admin::app.cms.pages.url-key') }}&quot;" disabled>
<span class="control-error" v-if="errors.has('url_key')">@{{ errors.first('url_key') }}</span>
</div>
@ -89,14 +67,6 @@
<span class="control-error" v-if="errors.has('html_content')">@{{ errors.first('html_content') }}</span>
</div>
<div class="control-group" :class="[errors.has('page_title') ? 'has-error' : '']">
<label for="page_title" class="required">{{ __('admin::app.cms.pages.page-title') }}</label>
<input type="text" class="control" name="page_title" v-validate="'required'" value="{{ $page->page_title ?? old('page_title') }}" data-vv-as="&quot;{{ __('admin::app.cms.pages.page-title') }}&quot;">
<span class="control-error" v-if="errors.has('page_title')">@{{ errors.first('page_title') }}</span>
</div>
<div class="control-group" :class="[errors.has('meta_title') ? 'has-error' : '']">
<label for="meta_title" class="required">{{ __('admin::app.cms.pages.meta_title') }}</label>
@ -134,7 +104,7 @@
$('#preview').on('click', function(e) {
var form = $('#page-form').serialize();
// var url = '{{ route('admin.cms.preview', $page->id) }}' + '?' + form;
var url = '{{ route('admin.cms.preview', $page->url_key) }}';
var url = '{{ route('admin.cms.preview', $page->id) }}';
window.open(url, '_blank').focus();

View File

@ -15,7 +15,7 @@ class CreateCmsPagesTable extends Migration
{
Schema::create('cms_pages', function (Blueprint $table) {
$table->increments('id');
$table->string('url_key')->unique();
$table->string('url_key')->nullable();
$table->longtext('html_content');
$table->string('page_title');
$table->string('meta_title');

View File

@ -86,8 +86,8 @@ use Webkul\Core\Repositories\LocaleRepository as Locale;
public function store()
{
$this->validate(request(), [
'channel' => 'required|string',
'locale' => 'required|string',
'channels' => 'required',
'locales' => 'required',
'url_key' => 'required|unique:cms_pages,url_key',
'html_content' => 'required|string',
'page_title' => 'required|string',
@ -98,15 +98,25 @@ use Webkul\Core\Repositories\LocaleRepository as Locale;
$data = request()->all();
$data['content']['html'] = $data['html_content'];
$data['content']['page_title'] = $data['page_title'];
$data['content']['meta_keywords'] = $data['meta_keywords'];
$data['content']['meta_title'] = $data['meta_title'];
$data['content']['meta_description'] = $data['meta_description'];
foreach ($data['channels'] as $channel) {
foreach ($data['locales'] as $locale) {
$data['channel_id'] = $channel;
$data['content'] = json_encode($data['content']);
$data['locale_id'] = $locale;
$result = $this->cms->create($data);
$data['content']['html'] = $data['html_content'];
$data['content']['page_title'] = $data['page_title'];
$data['content']['meta_keywords'] = $data['meta_keywords'];
$data['content']['meta_title'] = $data['meta_title'];
$data['content']['meta_description'] = $data['meta_description'];
$data['content'] = json_encode($data['content']);
$result = $this->cms->create($data);
unset($data['content']);
}
}
if ($result) {
session()->flash('success', trans('admin::app.cms.pages.create-success'));
@ -126,6 +136,34 @@ use Webkul\Core\Repositories\LocaleRepository as Locale;
{
$page = $this->cms->findOrFail($id);
if (request()->has('channel') && request()->has('locale')) {
$channel = $this->channel->findOneWhere([
'code' => request()->input('channel')
]);
$locale = $this->locale->findOneWhere([
'code' => request()->input('locale')
]);
$page = $this->cms->findOneWhere([
'channel_id' => $channel->id,
'locale_id' => $locale->id,
'url_key' => $page->url_key
]);
if (! $page) {
$page = $this->cms->create([
'url_key' => str_random(8),
'channel' => $channel->code,
'locale' => $locale->code
]);
return redirect()->route('admin.cms.edit', $page->id);
}
} else {
$page = $this->cms->findOrFail($id);
}
return view($this->_config['view'])->with('page', $page);
}
@ -138,25 +176,21 @@ use Webkul\Core\Repositories\LocaleRepository as Locale;
{
$page = $this->cms->findOrFail($id);
$data = request()->all();
$this->validate(request(), [
'channel' => 'required|string',
'locale' => 'required|string',
'url_key' => 'required|unique:cms_pages,url_key,'.$id,
'html_content' => 'required|string',
'page_title' => 'required|string',
'html_content' => 'required|string',
'meta_title' => 'required|string',
'meta_description' => 'string',
'meta_keywords' => 'required|string'
]);
$data = request()->all();
$data['content']['html'] = $data['html_content'];
$data['content']['page_title'] = $data['page_title'];
$data['content']['meta_keywords'] = $data['meta_keywords'];
$data['content']['meta_title'] = $data['meta_title'];
$data['content']['meta_description'] = $data['meta_description'];
$data['content'] = json_encode($data['content']);
$result = $this->cms->update($data, $id);
@ -166,7 +200,6 @@ use Webkul\Core\Repositories\LocaleRepository as Locale;
} else {
session()->flash('success', trans('admin::app.cms.pages.update-failure'));
}
return redirect()->route($this->_config['redirect']);
}
@ -175,11 +208,9 @@ use Webkul\Core\Repositories\LocaleRepository as Locale;
*
* @return mixed
*/
public function preview($urlKey)
public function preview($id)
{
$page = $this->cms->findOneWhere([
'url_key' => $urlKey
]);
$page = $this->cms->findOrFail($id);
return view('shop::cms.page')->with('page', $page);
}
@ -203,20 +234,4 @@ use Webkul\Core\Repositories\LocaleRepository as Locale;
return response()->json(['message' => false], 200);
}
}
/**
* To extract the page content and load it in the respective view file\
*
* @return view
*/
public function presenter($slug)
{
$page = $this->cms->findOneWhere([
'url_key' => $slug
]);
$layout = $page->layout;
return view('shop::cms.page')->with('data', $page);
}
}

View File

@ -46,19 +46,12 @@ class CMSRepository extends Repository
public function create(array $data)
{
$channel = $this->channel->findOneByField('code', $data['channel']);
$locale = $this->locale->findOneByField('code', $data['locale']);
$data['channel_id'] = $channel->id;
$data['locale_id'] = $locale->id;
$result = $this->model->create($data);
if ($result) {
return true;
return $result;
} else {
return false;
return $result;
}
}
}

View File

@ -3,9 +3,9 @@
namespace Webkul\Core\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Event;
use Webkul\Core\Repositories\CurrencyRepository as Currency;
use Webkul\Core\Repositories\ExchangeRateRepository as ExchangeRate;
/**
* ExchangeRate controller
@ -22,6 +22,11 @@ class ExchangeRateController extends Controller
*/
protected $_config;
/**
* ExchangeRateRepository instance
*/
protected $exchangeRate;
/**
* CurrencyRepository object
*
@ -36,10 +41,12 @@ class ExchangeRateController extends Controller
* @param \Webkul\Core\Repositories\CurrencyRepository $currency
* @return void
*/
public function __construct(Currency $currency)
public function __construct(Currency $currency, ExchangeRate $exchangeRate)
{
$this->currency = $currency;
$this->exchangeRate = $exchangeRate;
$this->_config = request('_config');
}

View File

@ -29,8 +29,8 @@ use Webkul\Core\Repositories\SliderRepository;
*/
public function index()
{
$currentChannel = core()->getCurrentChannel();
$sliderData = $this->sliderRepository->findByField('channel_id', $currentChannel->id)->toArray();
$currentChannel = core()->getCurrentChannel()->id;
$sliderData = $this->sliderRepository->findByField('channel_id', $currentChannel)->toArray();
return view($this->_config['view'], compact('sliderData'));
}