Last active
April 16, 2019 17:27
-
-
Save Atmden/d1354bd934bab42f9bc86c692757d651 to your computer and use it in GitHub Desktop.
Articles.php
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Admin\Sections; | |
use SleepingOwl\Admin\Contracts\Display\DisplayInterface; | |
use SleepingOwl\Admin\Contracts\Form\FormInterface; | |
use SleepingOwl\Admin\Contracts\Initializable; | |
use SleepingOwl\Admin\Section; | |
use AdminColumn; | |
use AdminDisplay; | |
use AdminForm; | |
use AdminFormElement; | |
use AdminColumnEditable; | |
use AdminSection; | |
use SleepingOwl\Admin\Form\Buttons\SaveAndClose; | |
use SleepingOwl\Admin\Form\Buttons\Cancel; | |
use App\Models\Tag; | |
use App\Models\Comment; | |
use SleepingOwl\Admin\Form\FormElements; | |
/** | |
* Class Articles | |
* | |
* @property \App\Models\Article $model | |
* | |
* @see http://sleepingowladmin.ru/docs/model_configuration_section | |
*/ | |
class Articles extends Section implements Initializable | |
{ | |
/** | |
* @see http://sleepingowladmin.ru/docs/model_configuration#ограничение-прав-доступа | |
* | |
* @var bool | |
*/ | |
protected $checkAccess = false; | |
/** | |
* @var string | |
*/ | |
protected $title = 'Статьи'; | |
protected $icon = 'fa fa-file-text-o'; | |
/** | |
* @var string | |
*/ | |
protected $alias; | |
/** | |
* @return DisplayInterface | |
*/ | |
public function onDisplay() | |
{ | |
$display = AdminDisplay::table() | |
->setHtmlAttribute('class', 'table-primary') | |
->setColumns([ | |
AdminColumn::link('title','Наименование'), | |
AdminColumnEditable::checkbox('online')->setLabel('Показывать на сайте'), | |
AdminColumn::order('order')->setLabel('Сортировка'), | |
AdminColumn::datetime('enable_at')->setLabel('Дата публикации')->setHtmlAttribute('class', 'text-muted'), | |
AdminColumn::datetime('updated_at')->setLabel('Последние изменения'), | |
])->paginate(20); | |
$display->setApply(function ($query) { | |
$query->orderBy('order'); | |
}); | |
return $display; | |
} | |
/** | |
* @param int $id | |
* | |
* @return FormInterface | |
*/ | |
public function onEdit($id) | |
{ | |
$comments = AdminSection::getModel(Comment::class)->fireDisplay(); | |
$comments->setApply(function ($query) use ($id) { | |
$query->where('article_id', $id); | |
}); | |
$form = AdminForm::panel()->addBody( | |
AdminFormElement::columns([ | |
[ | |
AdminFormElement::checkbox('online', 'Показывать на сайте'), | |
AdminFormElement::date('enable_at','Дата публикации'), | |
AdminFormElement::text('title', 'Наименование')->required(), | |
AdminFormElement::text('breadcrumbs', 'Хлебные крошки')->required(), | |
AdminFormElement::wysiwyg('prev_content', 'Краткое описание'), | |
AdminFormElement::multiselect('tags','Тэги') | |
->setModelForOptions(Tag::class) | |
->setDisplay('title'), | |
], | |
[ | |
AdminFormElement::image('image', 'Большое изображение')->setHelpText('Необходимый размер: 730х358')->required(), | |
AdminFormElement::image('prev_image', 'Превью')->setHelpText('Необходимый размер: 350x172')->required(), | |
], | |
]), | |
AdminFormElement::wysiwyg('content', 'Содержание статьи') | |
); | |
$form->getButtons()->setButtons([ | |
'save' => new SaveAndClose(), | |
'cancel' => (new Cancel())->setText('Отмена'), | |
]); | |
$tabs = AdminDisplay::tabbed(); | |
$tabs->appendTab($form, 'Статья'); | |
$tabs->appendTab($comments, 'Комментарии'); | |
return $tabs; | |
} | |
/** | |
* @return FormInterface | |
*/ | |
public function onCreate() | |
{ | |
return $this->onEdit(null); | |
} | |
/** | |
* @return void | |
*/ | |
public function onDelete($id) | |
{ | |
// remove if unused | |
} | |
/** | |
* @return void | |
*/ | |
public function onRestore($id) | |
{ | |
// remove if unused | |
} | |
/** | |
* Initialize class. | |
*/ | |
public function initialize() | |
{ | |
$this->addToNavigation(14); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment